{
  "version": 3,
  "sources": ["../node_modules/lodash.deburr/index.js", "../node_modules/@stream-io/transliterate/node_modules/escape-string-regexp/index.js", "../node_modules/@stream-io/transliterate/replacements.js", "../node_modules/@stream-io/transliterate/index.js", "../node_modules/inline-style-parser/index.js", "../node_modules/style-to-object/src/index.ts", "../node_modules/extend/index.js", "../node_modules/@rgrove/parse-xml/src/lib/StringScanner.js", "../node_modules/@rgrove/parse-xml/src/lib/syntax.js", "../node_modules/@rgrove/parse-xml/src/lib/XmlNode.js", "../node_modules/@rgrove/parse-xml/src/lib/XmlText.js", "../node_modules/@rgrove/parse-xml/src/lib/XmlCdata.js", "../node_modules/@rgrove/parse-xml/src/lib/XmlComment.js", "../node_modules/@rgrove/parse-xml/src/lib/XmlElement.js", "../node_modules/@rgrove/parse-xml/src/lib/XmlDocument.js", "../node_modules/@rgrove/parse-xml/src/lib/XmlProcessingInstruction.js", "../node_modules/@rgrove/parse-xml/src/lib/Parser.js", "../node_modules/@rgrove/parse-xml/src/index.js", "../node_modules/xtend/immutable.js", "../node_modules/mml-react/node_modules/bail/index.js", "../node_modules/mml-react/node_modules/is-buffer/index.js", "../node_modules/mml-react/node_modules/is-plain-obj/index.js", "../node_modules/mml-react/node_modules/trough/wrap.js", "../node_modules/mml-react/node_modules/trough/index.js", "../node_modules/unist-util-stringify-position/index.js", "../node_modules/mml-react/node_modules/vfile-message/index.js", "../node_modules/mml-react/node_modules/vfile/lib/minpath.js", "../node_modules/mml-react/node_modules/vfile/lib/minproc.js", "../node_modules/mml-react/node_modules/vfile/lib/core.js", "../node_modules/mml-react/node_modules/vfile/lib/index.js", "../node_modules/mml-react/node_modules/vfile/index.js", "../node_modules/mml-react/node_modules/unified/index.js", "../node_modules/mml-react/node_modules/mdast-util-to-string/index.js", "../node_modules/mml-react/node_modules/micromark/dist/constant/assign.js", "../node_modules/mml-react/node_modules/micromark/dist/constant/has-own-property.js", "../node_modules/mml-react/node_modules/micromark/dist/util/normalize-identifier.js", "../node_modules/mml-react/node_modules/micromark/dist/constant/from-char-code.js", "../node_modules/mml-react/node_modules/micromark/dist/util/safe-from-int.js", "../node_modules/mml-react/node_modules/micromark/dist/character/markdown-line-ending.js", "../node_modules/mml-react/node_modules/micromark/dist/character/markdown-space.js", "../node_modules/mml-react/node_modules/micromark/dist/tokenize/factory-space.js", "../node_modules/mml-react/node_modules/micromark/dist/initialize/content.js", "../node_modules/mml-react/node_modules/micromark/dist/tokenize/partial-blank-line.js", "../node_modules/mml-react/node_modules/micromark/dist/initialize/document.js", "../node_modules/mml-react/node_modules/micromark/dist/util/size-chunks.js", "../node_modules/mml-react/node_modules/micromark/dist/util/prefix-size.js", "../node_modules/mml-react/node_modules/micromark/dist/constant/splice.js", "../node_modules/mml-react/node_modules/micromark/dist/util/chunked-splice.js", "../node_modules/mml-react/node_modules/micromark/dist/util/shallow.js", "../node_modules/mml-react/node_modules/micromark/dist/util/subtokenize.js", "../node_modules/mml-react/node_modules/micromark/dist/tokenize/content.js", "../node_modules/mml-react/node_modules/micromark/dist/initialize/flow.js", "../node_modules/mml-react/node_modules/micromark/dist/initialize/text.js", "../node_modules/mml-react/node_modules/micromark/dist/util/miniflat.js", "../node_modules/mml-react/node_modules/micromark/dist/util/combine-extensions.js", "../node_modules/mml-react/node_modules/micromark/dist/util/chunked-push.js", "../node_modules/mml-react/node_modules/micromark/dist/util/resolve-all.js", "../node_modules/mml-react/node_modules/micromark/dist/util/serialize-chunks.js", "../node_modules/mml-react/node_modules/micromark/dist/util/slice-chunks.js", "../node_modules/mml-react/node_modules/micromark/dist/util/create-tokenizer.js", "../node_modules/mml-react/node_modules/micromark/dist/character/markdown-line-ending-or-space.js", "../node_modules/mml-react/node_modules/micromark/dist/constant/unicode-punctuation-regex.js", "../node_modules/mml-react/node_modules/micromark/dist/util/regex-check.js", "../node_modules/mml-react/node_modules/micromark/dist/character/unicode-punctuation.js", "../node_modules/mml-react/node_modules/micromark/dist/character/unicode-whitespace.js", "../node_modules/mml-react/node_modules/micromark/dist/util/classify-character.js", "../node_modules/mml-react/node_modules/micromark/dist/util/move-point.js", "../node_modules/mml-react/node_modules/micromark/dist/tokenize/attention.js", "../node_modules/mml-react/node_modules/micromark/dist/character/ascii-alpha.js", "../node_modules/mml-react/node_modules/micromark/dist/character/ascii-alphanumeric.js", "../node_modules/mml-react/node_modules/micromark/dist/character/ascii-atext.js", "../node_modules/mml-react/node_modules/micromark/dist/character/ascii-control.js", "../node_modules/mml-react/node_modules/micromark/dist/tokenize/autolink.js", "../node_modules/mml-react/node_modules/micromark/dist/tokenize/block-quote.js", "../node_modules/mml-react/node_modules/micromark/dist/character/ascii-punctuation.js", "../node_modules/mml-react/node_modules/micromark/dist/tokenize/character-escape.js", "../node_modules/character-entities/index.json", "../node_modules/parse-entities/decode-entity.js", "../node_modules/mml-react/node_modules/micromark/dist/character/ascii-digit.js", "../node_modules/mml-react/node_modules/micromark/dist/character/ascii-hex-digit.js", "../node_modules/mml-react/node_modules/micromark/dist/tokenize/character-reference.js", "../node_modules/mml-react/node_modules/micromark/dist/tokenize/code-fenced.js", "../node_modules/mml-react/node_modules/micromark/dist/tokenize/code-indented.js", "../node_modules/mml-react/node_modules/micromark/dist/tokenize/code-text.js", "../node_modules/mml-react/node_modules/micromark/dist/tokenize/factory-destination.js", "../node_modules/mml-react/node_modules/micromark/dist/tokenize/factory-label.js", "../node_modules/mml-react/node_modules/micromark/dist/tokenize/factory-whitespace.js", "../node_modules/mml-react/node_modules/micromark/dist/tokenize/factory-title.js", "../node_modules/mml-react/node_modules/micromark/dist/tokenize/definition.js", "../node_modules/mml-react/node_modules/micromark/dist/tokenize/hard-break-escape.js", "../node_modules/mml-react/node_modules/micromark/dist/tokenize/heading-atx.js", "../node_modules/mml-react/node_modules/micromark/dist/constant/html-block-names.js", "../node_modules/mml-react/node_modules/micromark/dist/constant/html-raw-names.js", "../node_modules/mml-react/node_modules/micromark/dist/tokenize/html-flow.js", "../node_modules/mml-react/node_modules/micromark/dist/tokenize/html-text.js", "../node_modules/mml-react/node_modules/micromark/dist/tokenize/label-end.js", "../node_modules/mml-react/node_modules/micromark/dist/tokenize/label-start-image.js", "../node_modules/mml-react/node_modules/micromark/dist/tokenize/label-start-link.js", "../node_modules/mml-react/node_modules/micromark/dist/tokenize/line-ending.js", "../node_modules/mml-react/node_modules/micromark/dist/tokenize/thematic-break.js", "../node_modules/mml-react/node_modules/micromark/dist/tokenize/list.js", "../node_modules/mml-react/node_modules/micromark/dist/tokenize/setext-underline.js", "../node_modules/mml-react/node_modules/micromark/dist/constructs.js", "../node_modules/mml-react/node_modules/micromark/dist/parse.js", "../node_modules/mml-react/node_modules/micromark/dist/preprocess.js", "../node_modules/mml-react/node_modules/micromark/dist/postprocess.js", "../node_modules/mml-react/node_modules/mdast-util-from-markdown/dist/index.js", "../node_modules/mml-react/node_modules/mdast-util-from-markdown/index.js", "../node_modules/mml-react/node_modules/remark-parse/index.js", "../node_modules/mdast-add-list-metadata/node_modules/unist-util-visit-parents/index.js", "../node_modules/mdast-add-list-metadata/index.js", "../node_modules/mml-react/node_modules/unist-util-is/convert.js", "../node_modules/mml-react/node_modules/unist-util-visit-parents/color.js", "../node_modules/mml-react/node_modules/unist-util-visit-parents/index.js", "../node_modules/mml-react/node_modules/unist-util-visit/index.js", "../node_modules/mml-react/node_modules/react-markdown/lib/plugins/naive-html.js", "../node_modules/mml-react/node_modules/react-markdown/lib/plugins/disallow-node.js", "../node_modules/react-is/cjs/react-is.production.min.js", "../node_modules/react-is/cjs/react-is.development.js", "../node_modules/react-is/index.js", "../node_modules/mml-react/node_modules/react-markdown/lib/ast-to-react.js", "../node_modules/mml-react/node_modules/react-markdown/lib/wrap-table-rows.js", "../node_modules/mml-react/node_modules/react-markdown/lib/get-definitions.js", "../node_modules/mml-react/node_modules/react-markdown/lib/uri-transformer.js", "../node_modules/mml-react/node_modules/react-markdown/lib/renderers.js", "../node_modules/mml-react/node_modules/react-markdown/lib/symbols.js", "../node_modules/mml-react/node_modules/react-markdown/lib/react-markdown.js", "../node_modules/ical.js/build/ical.js", "../node_modules/ical-expander/zones-compiled.json", "../node_modules/ical-expander/index.js", "../node_modules/mml-react/node_modules/regenerator-runtime/runtime.js", "../node_modules/mml-react/src/parser/MMLTag.ts", "../node_modules/mml-react/src/components/Card.tsx", "../node_modules/mml-react/src/components/Icon.tsx", "../node_modules/mml-react/src/components/CardHeader.tsx", "../node_modules/mml-react/src/components/CardBody.tsx", "../node_modules/mml-react/src/components/ButtonList.tsx", "../node_modules/mml-react/src/components/AddToCalendar.tsx", "../node_modules/mml-react/src/components/Button.tsx", "../node_modules/mml-react/src/components/Carousel.tsx", "../node_modules/mml-react/src/components/CarouselItem.tsx", "../node_modules/mml-react/src/components/Col.tsx", "../node_modules/mml-react/src/components/Error.tsx", "../node_modules/mml-react/src/components/Image.tsx", "../node_modules/mml-react/src/components/Input.tsx", "../node_modules/mml-react/src/components/Progress.tsx", "../node_modules/mml-react/src/components/Loading.tsx", "../node_modules/mml-react/src/components/MD.tsx", "../node_modules/mml-react/src/components/Number.tsx", "../node_modules/mml-react/src/components/Row.tsx", "../node_modules/mml-react/src/components/DatePicker/DatePickerSelect.tsx", "../node_modules/mml-react/src/components/DatePicker/DatePickerDate.tsx", "../node_modules/mml-react/src/components/DatePicker/DatePickerTime.tsx", "../node_modules/mml-react/src/components/DatePicker/DatePicker.tsx", "../node_modules/mml-react/src/components/Scheduler.tsx", "../node_modules/mml-react/src/components/Success.tsx", "../node_modules/mml-react/src/components/Text.tsx", "../node_modules/mml-react/src/parser/converters.tsx", "../node_modules/mml-react/src/parser/tree.ts", "../node_modules/mml-react/src/parser/parser.ts", "../node_modules/mml-react/src/mml/MML.tsx", "../node_modules/mml-react/node_modules/regenerator-runtime/runtime.js", "../node_modules/mml-react/src/parser/MMLTag.ts", "../node_modules/mml-react/src/components/Card.tsx", "../node_modules/mml-react/src/components/Icon.tsx", "../node_modules/mml-react/src/components/CardHeader.tsx", "../node_modules/mml-react/src/components/CardBody.tsx", "../node_modules/mml-react/src/components/ButtonList.tsx", "../node_modules/mml-react/src/components/AddToCalendar.tsx", "../node_modules/mml-react/src/components/Button.tsx", "../node_modules/mml-react/src/components/Carousel.tsx", "../node_modules/mml-react/src/components/CarouselItem.tsx", "../node_modules/mml-react/src/components/Col.tsx", "../node_modules/mml-react/src/components/Error.tsx", "../node_modules/mml-react/src/components/Image.tsx", "../node_modules/mml-react/src/components/Input.tsx", "../node_modules/mml-react/src/components/Progress.tsx", "../node_modules/mml-react/src/components/Loading.tsx", "../node_modules/mml-react/src/components/MD.tsx", "../node_modules/mml-react/src/components/Number.tsx", "../node_modules/mml-react/src/components/Row.tsx", "../node_modules/mml-react/src/components/DatePicker/DatePickerSelect.tsx", "../node_modules/mml-react/src/components/DatePicker/DatePickerDate.tsx", "../node_modules/mml-react/src/components/DatePicker/DatePickerTime.tsx", "../node_modules/mml-react/src/components/DatePicker/DatePicker.tsx", "../node_modules/mml-react/src/components/Scheduler.tsx", "../node_modules/mml-react/src/components/Success.tsx", "../node_modules/mml-react/src/components/Text.tsx", "../node_modules/mml-react/src/parser/converters.tsx", "../node_modules/mml-react/src/parser/tree.ts", "../node_modules/mml-react/src/parser/parser.ts", "../node_modules/mml-react/src/mml/MML.tsx", "../node_modules/mml-react/dist/index.js", "../src/index.ts", "../src/components/Attachment/Attachment.tsx", "../src/components/Attachment/utils.tsx", "../src/components/Attachment/AttachmentContainer.tsx", "../src/components/Attachment/AttachmentActions.tsx", "../src/context/ChannelActionContext.tsx", "../src/context/ChannelListContext.tsx", "../src/context/ChannelStateContext.tsx", "../src/context/ChatContext.tsx", "../src/context/utils/getDisplayName.ts", "../src/context/ComponentContext.tsx", "../src/context/DialogManagerContext.tsx", "../src/components/Dialog/DialogManager.ts", "../src/components/Dialog/DialogPortal.tsx", "../src/components/Dialog/hooks/useDialog.ts", "../src/store/hooks/useStateStore.ts", "../src/components/Portal/Portal.ts", "../src/context/MessageContext.tsx", "../src/context/MessageBounceContext.tsx", "../src/context/MessageInputContext.tsx", "../src/context/MessageListContext.tsx", "../src/context/PollContext.tsx", "../src/context/TranslationContext.tsx", "../src/i18n/utils.ts", "../src/context/TypingContext.tsx", "../src/context/WithComponents.tsx", "../src/components/Attachment/Audio.tsx", "../src/components/Attachment/components/DownloadButton.tsx", "../src/components/Attachment/icons.tsx", "../src/components/SafeAnchor/SafeAnchor.tsx", "../src/components/Attachment/components/FileSizeIndicator.tsx", "../src/constants/limits.ts", "../src/components/MessageInput/hooks/utils.ts", "../src/components/Attachment/components/ProgressBar.tsx", "../src/components/Attachment/components/PlaybackRateButton.tsx", "../src/components/Attachment/components/PlayButton.tsx", "../src/components/Attachment/components/WaveProgressBar.tsx", "../src/components/Attachment/audioSampling.ts", "../src/components/Attachment/hooks/useAudioController.ts", "../src/components/Attachment/VoiceRecording.tsx", "../src/components/ReactFileUtilities/FileIcon/FileIcon.tsx", "../src/components/ReactFileUtilities/FileIcon/FileIconSet.tsx", "../src/components/ReactFileUtilities/FileIcon/mimeTypes.ts", "../src/components/ReactFileUtilities/FileIcon/iconMap.ts", "../src/components/ReactFileUtilities/ImageDropzone.tsx", "../src/components/ReactFileUtilities/UploadButton.tsx", "../src/components/ReactFileUtilities/utils.ts", "../src/components/Gallery/BaseImage.tsx", "../src/components/Gallery/Gallery.tsx", "../src/components/Modal/Modal.tsx", "../src/components/Modal/icons.tsx", "../src/components/Gallery/ModalGallery.tsx", "../src/components/Gallery/Image.tsx", "../src/components/Attachment/Card.tsx", "../src/components/Attachment/FileAttachment.tsx", "../src/components/Attachment/UnsupportedAttachment.tsx", "../src/components/AutoCompleteTextarea/Item.jsx", "../src/components/AutoCompleteTextarea/List.jsx", "../src/components/Message/renderText/regex.ts", "../node_modules/unist-util-is/lib/index.js", "../node_modules/unist-util-visit-parents/lib/color.node.js", "../node_modules/unist-util-visit-parents/lib/index.js", "../node_modules/hast-util-is-element/lib/index.js", "../node_modules/hast-util-find-and-replace/node_modules/escape-string-regexp/index.js", "../node_modules/hast-util-find-and-replace/lib/index.js", "../node_modules/unist-builder/lib/index.js", "../src/components/Message/renderText/rehypePlugins/emojiMarkdownPlugin.ts", "../node_modules/unist-util-visit/lib/index.js", "../src/components/Message/renderText/rehypePlugins/mentionsMarkdownPlugin.ts", "../src/components/Message/renderText/remarkPlugins/htmlToTextPlugin.ts", "../src/components/Message/renderText/remarkPlugins/keepLineBreaksPlugin.ts", "../src/components/Message/renderText/renderText.tsx", "../node_modules/devlop/lib/default.js", "../node_modules/comma-separated-tokens/index.js", "../node_modules/estree-util-is-identifier-name/lib/index.js", "../node_modules/hast-util-whitespace/lib/index.js", "../node_modules/property-information/lib/util/schema.js", "../node_modules/property-information/lib/util/merge.js", "../node_modules/property-information/lib/normalize.js", "../node_modules/property-information/lib/util/info.js", "../node_modules/property-information/lib/util/types.js", "../node_modules/property-information/lib/util/defined-info.js", "../node_modules/property-information/lib/util/create.js", "../node_modules/property-information/lib/xlink.js", "../node_modules/property-information/lib/xml.js", "../node_modules/property-information/lib/util/case-sensitive-transform.js", "../node_modules/property-information/lib/util/case-insensitive-transform.js", "../node_modules/property-information/lib/xmlns.js", "../node_modules/property-information/lib/aria.js", "../node_modules/property-information/lib/html.js", "../node_modules/property-information/lib/svg.js", "../node_modules/property-information/lib/find.js", "../node_modules/property-information/lib/hast-to-react.js", "../node_modules/property-information/index.js", "../node_modules/space-separated-tokens/index.js", "../node_modules/style-to-object/esm/index.mjs", "../node_modules/unist-util-position/lib/index.js", "../node_modules/vfile-message/node_modules/unist-util-stringify-position/lib/index.js", "../node_modules/vfile-message/lib/index.js", "../node_modules/hast-util-to-jsx-runtime/lib/index.js", "../node_modules/html-url-attributes/lib/index.js", "../node_modules/react-markdown/lib/index.js", "../node_modules/mdast-util-to-string/lib/index.js", "../node_modules/decode-named-character-reference/node_modules/character-entities/index.js", "../node_modules/decode-named-character-reference/index.js", "../node_modules/micromark-util-chunked/index.js", "../node_modules/micromark-util-combine-extensions/index.js", "../node_modules/micromark-util-decode-numeric-character-reference/index.js", "../node_modules/micromark-util-normalize-identifier/index.js", "../node_modules/micromark-util-character/index.js", "../node_modules/micromark-util-sanitize-uri/index.js", "../node_modules/micromark-factory-space/index.js", "../node_modules/micromark/lib/initialize/content.js", "../node_modules/micromark/lib/initialize/document.js", "../node_modules/micromark-util-classify-character/index.js", "../node_modules/micromark-util-resolve-all/index.js", "../node_modules/micromark-core-commonmark/lib/attention.js", "../node_modules/micromark-core-commonmark/lib/autolink.js", "../node_modules/micromark-core-commonmark/lib/blank-line.js", "../node_modules/micromark-core-commonmark/lib/block-quote.js", "../node_modules/micromark-core-commonmark/lib/character-escape.js", "../node_modules/micromark-core-commonmark/lib/character-reference.js", "../node_modules/micromark-core-commonmark/lib/code-fenced.js", "../node_modules/micromark-core-commonmark/lib/code-indented.js", "../node_modules/micromark-core-commonmark/lib/code-text.js", "../node_modules/micromark-util-subtokenize/lib/splice-buffer.js", "../node_modules/micromark-util-subtokenize/index.js", "../node_modules/micromark-core-commonmark/lib/content.js", "../node_modules/micromark-factory-destination/index.js", "../node_modules/micromark-factory-label/index.js", "../node_modules/micromark-factory-title/index.js", "../node_modules/micromark-factory-whitespace/index.js", "../node_modules/micromark-core-commonmark/lib/definition.js", "../node_modules/micromark-core-commonmark/lib/hard-break-escape.js", "../node_modules/micromark-core-commonmark/lib/heading-atx.js", "../node_modules/micromark-util-html-tag-name/index.js", "../node_modules/micromark-core-commonmark/lib/html-flow.js", "../node_modules/micromark-core-commonmark/lib/html-text.js", "../node_modules/micromark-core-commonmark/lib/label-end.js", "../node_modules/micromark-core-commonmark/lib/label-start-image.js", "../node_modules/micromark-core-commonmark/lib/label-start-link.js", "../node_modules/micromark-core-commonmark/lib/line-ending.js", "../node_modules/micromark-core-commonmark/lib/thematic-break.js", "../node_modules/micromark-core-commonmark/lib/list.js", "../node_modules/micromark-core-commonmark/lib/setext-underline.js", "../node_modules/micromark/lib/initialize/flow.js", "../node_modules/micromark/lib/initialize/text.js", "../node_modules/micromark/lib/constructs.js", "../node_modules/micromark/lib/create-tokenizer.js", "../node_modules/micromark/lib/parse.js", "../node_modules/micromark/lib/postprocess.js", "../node_modules/micromark/lib/preprocess.js", "../node_modules/micromark-util-decode-string/index.js", "../node_modules/mdast-util-from-markdown/node_modules/unist-util-stringify-position/lib/index.js", "../node_modules/mdast-util-from-markdown/lib/index.js", "../node_modules/remark-parse/lib/index.js", "../node_modules/mdast-util-to-hast/lib/handlers/blockquote.js", "../node_modules/mdast-util-to-hast/lib/handlers/break.js", "../node_modules/mdast-util-to-hast/lib/handlers/code.js", "../node_modules/mdast-util-to-hast/lib/handlers/delete.js", "../node_modules/mdast-util-to-hast/lib/handlers/emphasis.js", "../node_modules/mdast-util-to-hast/lib/handlers/footnote-reference.js", "../node_modules/mdast-util-to-hast/lib/handlers/heading.js", "../node_modules/mdast-util-to-hast/lib/handlers/html.js", "../node_modules/mdast-util-to-hast/lib/revert.js", "../node_modules/mdast-util-to-hast/lib/handlers/image-reference.js", "../node_modules/mdast-util-to-hast/lib/handlers/image.js", "../node_modules/mdast-util-to-hast/lib/handlers/inline-code.js", "../node_modules/mdast-util-to-hast/lib/handlers/link-reference.js", "../node_modules/mdast-util-to-hast/lib/handlers/link.js", "../node_modules/mdast-util-to-hast/lib/handlers/list-item.js", "../node_modules/mdast-util-to-hast/lib/handlers/list.js", "../node_modules/mdast-util-to-hast/lib/handlers/paragraph.js", "../node_modules/mdast-util-to-hast/lib/handlers/root.js", "../node_modules/mdast-util-to-hast/lib/handlers/strong.js", "../node_modules/mdast-util-to-hast/lib/handlers/table.js", "../node_modules/mdast-util-to-hast/lib/handlers/table-row.js", "../node_modules/mdast-util-to-hast/lib/handlers/table-cell.js", "../node_modules/trim-lines/index.js", "../node_modules/mdast-util-to-hast/lib/handlers/text.js", "../node_modules/mdast-util-to-hast/lib/handlers/thematic-break.js", "../node_modules/mdast-util-to-hast/lib/handlers/index.js", "../node_modules/@ungap/structured-clone/esm/types.js", "../node_modules/@ungap/structured-clone/esm/deserialize.js", "../node_modules/@ungap/structured-clone/esm/serialize.js", "../node_modules/@ungap/structured-clone/esm/index.js", "../node_modules/mdast-util-to-hast/lib/footer.js", "../node_modules/mdast-util-to-hast/lib/state.js", "../node_modules/mdast-util-to-hast/lib/index.js", "../node_modules/remark-rehype/lib/index.js", "../node_modules/bail/index.js", "../node_modules/unified/lib/index.js", "../node_modules/is-plain-obj/index.js", "../node_modules/trough/index.js", "../node_modules/vfile/lib/minpath.js", "../node_modules/vfile/lib/minproc.js", "../node_modules/vfile/lib/minurl.js", "../node_modules/vfile/lib/minurl.shared.js", "../node_modules/vfile/lib/index.js", "../node_modules/unified/lib/callable-instance.js", "../node_modules/ccount/index.js", "../node_modules/mdast-util-find-and-replace/node_modules/escape-string-regexp/index.js", "../node_modules/mdast-util-find-and-replace/lib/index.js", "../node_modules/mdast-util-gfm-autolink-literal/lib/index.js", "../node_modules/mdast-util-gfm-footnote/lib/index.js", "../node_modules/mdast-util-gfm-strikethrough/lib/index.js", "../node_modules/markdown-table/index.js", "../node_modules/mdast-util-to-markdown/lib/handle/blockquote.js", "../node_modules/mdast-util-to-markdown/lib/util/pattern-in-scope.js", "../node_modules/mdast-util-to-markdown/lib/handle/break.js", "../node_modules/longest-streak/index.js", "../node_modules/mdast-util-to-markdown/lib/util/format-code-as-indented.js", "../node_modules/mdast-util-to-markdown/lib/util/check-fence.js", "../node_modules/mdast-util-to-markdown/lib/handle/code.js", "../node_modules/mdast-util-to-markdown/lib/util/check-quote.js", "../node_modules/mdast-util-to-markdown/lib/handle/definition.js", "../node_modules/mdast-util-to-markdown/lib/util/check-emphasis.js", "../node_modules/mdast-util-to-markdown/lib/util/encode-character-reference.js", "../node_modules/mdast-util-to-markdown/lib/util/encode-info.js", "../node_modules/mdast-util-to-markdown/lib/handle/emphasis.js", "../node_modules/mdast-util-to-markdown/lib/util/format-heading-as-setext.js", "../node_modules/mdast-util-to-markdown/lib/handle/heading.js", "../node_modules/mdast-util-to-markdown/lib/handle/html.js", "../node_modules/mdast-util-to-markdown/lib/handle/image.js", "../node_modules/mdast-util-to-markdown/lib/handle/image-reference.js", "../node_modules/mdast-util-to-markdown/lib/handle/inline-code.js", "../node_modules/mdast-util-to-markdown/lib/util/format-link-as-autolink.js", "../node_modules/mdast-util-to-markdown/lib/handle/link.js", "../node_modules/mdast-util-to-markdown/lib/handle/link-reference.js", "../node_modules/mdast-util-to-markdown/lib/util/check-bullet.js", "../node_modules/mdast-util-to-markdown/lib/util/check-bullet-other.js", "../node_modules/mdast-util-to-markdown/lib/util/check-bullet-ordered.js", "../node_modules/mdast-util-to-markdown/lib/util/check-rule.js", "../node_modules/mdast-util-to-markdown/lib/handle/list.js", "../node_modules/mdast-util-to-markdown/lib/util/check-list-item-indent.js", "../node_modules/mdast-util-to-markdown/lib/handle/list-item.js", "../node_modules/mdast-util-to-markdown/lib/handle/paragraph.js", "../node_modules/mdast-util-phrasing/lib/index.js", "../node_modules/mdast-util-to-markdown/lib/handle/root.js", "../node_modules/mdast-util-to-markdown/lib/util/check-strong.js", "../node_modules/mdast-util-to-markdown/lib/handle/strong.js", "../node_modules/mdast-util-to-markdown/lib/handle/text.js", "../node_modules/mdast-util-to-markdown/lib/util/check-rule-repetition.js", "../node_modules/mdast-util-to-markdown/lib/handle/thematic-break.js", "../node_modules/mdast-util-to-markdown/lib/handle/index.js", "../node_modules/mdast-util-gfm-table/lib/index.js", "../node_modules/mdast-util-gfm-task-list-item/lib/index.js", "../node_modules/mdast-util-gfm/lib/index.js", "../node_modules/micromark-extension-gfm-autolink-literal/lib/syntax.js", "../node_modules/micromark-extension-gfm-footnote/lib/syntax.js", "../node_modules/micromark-extension-gfm-strikethrough/lib/syntax.js", "../node_modules/micromark-extension-gfm-table/lib/edit-map.js", "../node_modules/micromark-extension-gfm-table/lib/infer.js", "../node_modules/micromark-extension-gfm-table/lib/syntax.js", "../node_modules/micromark-extension-gfm-task-list-item/lib/syntax.js", "../node_modules/micromark-extension-gfm/index.js", "../node_modules/remark-gfm/lib/index.js", "../src/components/Message/renderText/componentRenderers/Anchor.tsx", "../src/components/Message/renderText/componentRenderers/Emoji.tsx", "../src/components/Message/renderText/componentRenderers/Mention.tsx", "../src/components/UtilityComponents/NullComponent.tsx", "../src/components/UtilityComponents/ErrorBoundary.tsx", "../src/components/AutoCompleteTextarea/Textarea.jsx", "../src/components/AutoCompleteTextarea/utils.js", "../src/components/CommandItem/CommandItem.tsx", "../src/components/UserItem/UserItem.tsx", "../src/components/Avatar/Avatar.tsx", "../src/components/Threads/icons.tsx", "../src/utils/getChannel.ts", "../src/utils/getWholeChar.ts", "../src/components/Avatar/ChannelAvatar.tsx", "../src/components/Avatar/GroupAvatar.tsx", "../src/utils/browsers.ts", "../src/components/Channel/Channel.tsx", "../src/components/Channel/channelState.ts", "../src/components/Channel/hooks/useCreateChannelStateContext.ts", "../src/i18n/de.json", "../src/i18n/en.json", "../src/i18n/es.json", "../src/i18n/fr.json", "../src/i18n/hi.json", "../src/i18n/it.json", "../src/i18n/ja.json", "../src/i18n/ko.json", "../src/i18n/nl.json", "../src/i18n/pt.json", "../src/i18n/ru.json", "../src/i18n/tr.json", "../src/i18n/Streami18n.ts", "../src/components/Channel/hooks/useCreateTypingContext.ts", "../src/components/Channel/hooks/useEditMessageHandler.ts", "../src/components/Channel/hooks/useIsMounted.ts", "../src/components/Channel/hooks/useMentionsHandlers.ts", "../src/components/Loading/LoadingChannels.tsx", "../src/components/Loading/LoadingErrorIndicator.tsx", "../src/components/Loading/LoadingIndicator.tsx", "../src/components/Channel/LoadingChannel.tsx", "../src/components/MessageInput/DropzoneProvider.tsx", "../src/components/MessageInput/hooks/useCooldownTimer.tsx", "../src/components/MessageInput/hooks/useCreateMessageInputContext.ts", "../src/components/MessageInput/hooks/useMessageInputState.ts", "../src/components/MessageInput/hooks/useAttachments.ts", "../src/components/MessageInput/hooks/useLinkPreviews.ts", "../src/components/MessageInput/types.ts", "../src/components/MessageInput/hooks/useMessageInputText.ts", "../src/components/MessageInput/hooks/useSubmitHandler.ts", "../src/components/MessageInput/hooks/usePasteHandler.ts", "../src/components/MediaRecorder/hooks/useMediaRecorder.ts", "../src/components/MediaRecorder/observable/Subscription.ts", "../src/components/MediaRecorder/observable/Observer.ts", "../src/components/MediaRecorder/observable/Observable.ts", "../src/components/MediaRecorder/observable/Subject.ts", "../src/components/MediaRecorder/observable/BehaviorSubject.ts", "../src/components/MediaRecorder/classes/BrowserPermission.ts", "../src/components/MediaRecorder/classes/MediaRecorderController.ts", "../src/utils/mergeDeep.ts", "../src/components/MediaRecorder/classes/AmplitudeRecorder.ts", "../src/components/MediaRecorder/transcode/audioProcessing.ts", "../src/components/MediaRecorder/transcode/wav.ts", "../src/components/MediaRecorder/transcode/index.ts", "../src/components/Channel/constants.ts", "../src/components/MessageList/ConnectionStatus.tsx", "../src/components/MessageList/CustomNotification.tsx", "../src/components/MessageList/GiphyPreviewMessage.tsx", "../src/components/Message/Message.tsx", "../src/components/Message/hooks/useActionHandler.ts", "../src/components/Message/utils.tsx", "../src/components/Message/hooks/useDeleteHandler.ts", "../src/components/Message/hooks/useEditHandler.ts", "../src/components/Message/hooks/useFlagHandler.ts", "../src/components/Message/hooks/useMentionsHandler.ts", "../src/components/Message/hooks/useMarkUnreadHandler.ts", "../src/components/Message/hooks/useMuteHandler.ts", "../src/components/Message/hooks/useOpenThreadHandler.ts", "../src/components/Message/hooks/usePinHandler.ts", "../src/components/Message/hooks/useReactionHandler.ts", "../src/components/Threads/ThreadContext.tsx", "../src/components/Threads/ThreadList/ThreadList.tsx", "../src/components/Threads/ThreadList/ThreadListItem.tsx", "../src/components/Threads/ThreadList/ThreadListItemUI.tsx", "../src/components/Message/Timestamp.tsx", "../src/components/Threads/UnreadCountBadge.tsx", "../src/components/ChannelPreview/ChannelPreview.tsx", "../src/components/ChannelPreview/ChannelPreviewMessenger.tsx", "../src/components/ChannelPreview/ChannelPreviewActionButtons.tsx", "../src/components/ChannelList/ChannelList.tsx", "../src/components/ChannelList/ChannelListMessenger.tsx", "../src/components/ChannelList/hooks/useConnectionRecoveredListener.ts", "../src/components/ChannelList/hooks/useMobileNavigation.ts", "../src/components/ChannelList/hooks/usePaginatedChannels.ts", "../src/components/ChannelList/utils.ts", "../src/components/ChannelList/hooks/useChannelListShape.ts", "../src/components/ChannelSearch/ChannelSearch.tsx", "../src/components/ChannelSearch/hooks/useChannelSearch.ts", "../src/components/ChannelSearch/utils.ts", "../src/components/ChannelSearch/SearchBar.tsx", "../src/components/ChannelSearch/icons.tsx", "../src/components/ChannelSearch/SearchInput.tsx", "../src/components/ChannelSearch/SearchResults.tsx", "../src/components/EmptyStateIndicator/EmptyStateIndicator.tsx", "../src/components/EmptyStateIndicator/icons.tsx", "../src/components/LoadMore/LoadMorePaginator.tsx", "../src/components/LoadMore/LoadMoreButton.tsx", "../src/utils/deprecationWarning.ts", "../src/components/ChannelList/hooks/useChannelDeletedListener.ts", "../src/components/ChannelList/hooks/useChannelHiddenListener.ts", "../src/components/ChannelList/hooks/useChannelTruncatedListener.ts", "../src/components/ChannelList/hooks/useChannelUpdatedListener.ts", "../src/components/ChannelList/hooks/useChannelVisibleListener.ts", "../src/components/ChannelList/hooks/useMessageNewListener.ts", "../src/components/ChannelList/hooks/useNotificationAddedToChannelListener.ts", "../src/components/ChannelList/hooks/useNotificationMessageNewListener.ts", "../src/components/ChannelList/hooks/useNotificationRemovedFromChannelListener.ts", "../src/components/ChannelList/hooks/useUserPresenceChangedListener.ts", "../src/components/ChannelList/hooks/useSelectedChannelState.ts", "../src/components/ChannelList/hooks/useChannelMembershipState.ts", "../src/components/ChannelPreview/icons.tsx", "../src/components/ChannelPreview/hooks/useIsChannelMuted.ts", "../src/components/ChannelPreview/hooks/useChannelPreviewInfo.ts", "../src/components/ChannelPreview/utils.tsx", "../src/components/ChannelPreview/hooks/useMessageDeliveryStatus.ts", "../src/components/ChatView/ChatView.tsx", "../src/components/Threads/ThreadList/ThreadListEmptyPlaceholder.tsx", "../src/components/Threads/ThreadList/ThreadListUnseenThreadsBanner.tsx", "../src/components/Threads/ThreadList/ThreadListLoadingIndicator.tsx", "../src/components/Message/hooks/useRetryHandler.ts", "../src/components/Message/hooks/useUserHandler.ts", "../src/components/Message/hooks/useUserRole.ts", "../src/components/Message/hooks/useReactionsFetcher.ts", "../src/components/Message/hooks/useMessageTextStreaming.ts", "../src/components/Message/MessageSimple.tsx", "../src/components/Message/icons.tsx", "../src/components/MessageBounce/MessageBounceModal.tsx", "../src/components/MessageBounce/MessageBouncePrompt.tsx", "../src/components/Message/MessageDeleted.tsx", "../src/components/Message/MessageBlocked.tsx", "../src/components/Message/MessageOptions.tsx", "../src/components/MessageActions/MessageActions.tsx", "../src/components/MessageActions/MessageActionsBox.tsx", "../src/components/MessageActions/CustomMessageActionsList.tsx", "../src/components/Dialog/DialogAnchor.tsx", "../src/components/Reactions/ReactionSelectorWithButton.tsx", "../src/components/Reactions/ReactionSelector.tsx", "../src/components/Reactions/reactionOptions.tsx", "../src/components/Reactions/StreamEmoji.tsx", "../src/components/Reactions/SpriteImage.tsx", "../src/components/Reactions/utils/utils.ts", "../src/components/Message/MessageRepliesCountButton.tsx", "../src/components/Message/MessageStatus.tsx", "../src/components/Tooltip/Tooltip.tsx", "../src/components/Tooltip/hooks/useEnterLeaveHandlers.ts", "../src/components/Message/MessageText.tsx", "../src/components/Message/QuotedMessage.tsx", "../src/components/Poll/Poll.tsx", "../src/components/Poll/PollContent.tsx", "../src/components/Poll/PollHeader.tsx", "../src/components/Poll/PollActions/AddCommentForm.tsx", "../src/components/Dialog/FormDialog.tsx", "../src/components/Form/FieldError.tsx", "../src/components/Dialog/PromptDialog.tsx", "../src/components/Poll/PollActions/EndPollDialog.tsx", "../src/components/Poll/PollActions/PollActions.tsx", "../src/components/Poll/PollActions/PollAction.tsx", "../src/components/Poll/PollActions/SuggestPollOptionForm.tsx", "../src/components/Poll/PollActions/PollAnswerList.tsx", "../src/components/Modal/ModalHeader.tsx", "../src/components/Poll/PollVote.tsx", "../src/components/Poll/hooks/usePollAnswerPagination.ts", "../src/components/Poll/hooks/useManagePollVotesRealtime.ts", "../src/components/InfiniteScrollPaginator/hooks/useCursorPaginator.ts", "../src/components/Poll/hooks/usePollOptionVotesPagination.ts", "../src/components/InfiniteScrollPaginator/InfiniteScrollPaginator.tsx", "../src/components/Poll/PollActions/PollOptionsFullList.tsx", "../src/components/Poll/PollOptionList.tsx", "../src/components/Poll/PollOptionSelector.tsx", "../src/components/Poll/PollActions/PollResults/PollResults.tsx", "../src/components/Poll/PollActions/PollResults/PollOptionVotesList.tsx", "../src/components/Poll/PollActions/PollResults/PollOptionWithVotesHeader.tsx", "../src/components/Poll/PollActions/PollResults/PollOptionWithLatestVotes.tsx", "../src/components/Poll/constants.ts", "../src/components/Poll/QuotedPoll.tsx", "../src/components/Poll/PollCreationDialog/PollCreationDialog.tsx", "../src/components/Poll/PollCreationDialog/OptionFieldSet.tsx", "../src/components/DragAndDrop/DragAndDropContainer.tsx", "../src/components/Poll/PollCreationDialog/PollCreationDialogControls.tsx", "../src/components/Form/SwitchField.tsx", "../src/components/Message/MessageErrorText.tsx", "../src/components/Message/MessageTimestamp.tsx", "../src/constants/messageTypes.ts", "../src/components/MessageInput/AttachmentSelector.tsx", "../src/components/MessageInput/icons.tsx", "../src/components/Dialog/DialogMenu.tsx", "../src/context/AttachmentSelectorContext.tsx", "../src/components/MessageInput/AttachmentPreviewList/AttachmentPreviewList.tsx", "../src/components/MessageInput/AttachmentPreviewList/UnsupportedAttachmentPreview.tsx", "../src/components/MessageInput/AttachmentPreviewList/VoiceRecordingPreview.tsx", "../src/components/MediaRecorder/RecordingPermissionDeniedNotification.tsx", "../src/components/MediaRecorder/AudioRecorder/AudioRecorder.tsx", "../src/components/MediaRecorder/AudioRecorder/AudioRecordingPreview.tsx", "../src/components/MediaRecorder/AudioRecorder/RecordingTimer.tsx", "../src/components/MediaRecorder/AudioRecorder/AudioRecordingInProgress.tsx", "../src/components/MessageInput/hooks/useTimeElapsed.ts", "../src/components/MediaRecorder/AudioRecorder/AudioRecordingButtons.tsx", "../src/components/MessageInput/AttachmentPreviewList/FileAttachmentPreview.tsx", "../src/components/MessageInput/AttachmentPreviewList/ImageAttachmentPreview.tsx", "../src/components/MessageInput/CooldownTimer.tsx", "../src/components/MessageInput/hooks/useTimer.ts", "../src/components/MessageInput/DefaultTriggerProvider.tsx", "../src/components/MessageInput/hooks/useCommandTrigger.ts", "../src/components/EmoticonItem/EmoticonItem.tsx", "../src/components/MessageInput/hooks/useEmojiTrigger.ts", "../src/components/MessageInput/hooks/useUserTrigger.ts", "../src/components/MessageInput/EditMessageForm.tsx", "../src/components/MessageInput/MessageInputFlat.tsx", "../src/components/MessageInput/SendButton.tsx", "../src/components/MessageInput/StopAIGenerationButton.tsx", "../src/components/MessageInput/QuotedMessagePreview.tsx", "../src/components/Message/FixedHeightMessage.tsx", "../src/components/MML/MML.tsx", "../src/components/Message/StreamedMessageText.tsx", "../src/components/MessageInput/LinkPreviewList.tsx", "../src/components/ChatAutoComplete/ChatAutoComplete.tsx", "../src/components/AIStateIndicator/AIStateIndicator.tsx", "../src/components/AIStateIndicator/hooks/useAIState.ts", "../src/components/MessageInput/MessageInput.tsx", "../src/components/Reactions/ReactionsList.tsx", "../src/components/Reactions/ReactionsListModal.tsx", "../src/components/Reactions/hooks/useFetchReactions.ts", "../src/components/Reactions/hooks/useProcessReactions.tsx", "../src/components/Reactions/SimpleReactionsList.tsx", "../src/components/Message/MessageEditedTimestamp.tsx", "../src/components/MessageList/MessageList.tsx", "../src/components/MessageList/hooks/MessageList/useEnrichedMessages.ts", "../src/components/MessageList/utils.ts", "../src/components/MessageList/hooks/MessageList/useMessageListElements.tsx", "../src/components/MessageList/hooks/useLastReadData.ts", "../src/components/MessageList/hooks/MessageList/useMessageListScrollManager.ts", "../src/components/MessageList/hooks/MessageList/useScrollLocationLogic.tsx", "../src/components/MessageList/hooks/MessageList/useUnreadMessagesNotification.ts", "../src/components/MessageList/MessageListMainPanel.tsx", "../src/components/MessageList/UnreadMessagesSeparator.tsx", "../src/components/MessageList/hooks/useMarkRead.ts", "../src/components/MessageList/MessageNotification.tsx", "../src/components/MessageList/MessageListNotifications.tsx", "../src/components/MessageList/UnreadMessagesNotification.tsx", "../src/components/MessageList/icons.tsx", "../src/components/InfiniteScrollPaginator/InfiniteScroll.tsx", "../src/components/TypingIndicator/TypingIndicator.tsx", "../src/components/MessageList/renderMessages.tsx", "../src/components/DateSeparator/DateSeparator.tsx", "../src/components/EventComponent/EventComponent.tsx", "../src/components/MessageList/ScrollToBottomButton.tsx", "../src/components/MessageList/VirtualizedMessageList.tsx", "../src/components/MessageList/hooks/VirtualizedMessageList/useNewMessageNotification.ts", "../src/components/MessageList/hooks/VirtualizedMessageList/usePrependMessagesCount.ts", "../src/components/MessageList/hooks/VirtualizedMessageList/useShouldForceScrollToBottom.ts", "../src/components/MessageList/hooks/VirtualizedMessageList/useGiphyPreview.ts", "../src/components/MessageList/hooks/VirtualizedMessageList/useMessageSetKey.ts", "../src/components/MessageList/hooks/VirtualizedMessageList/useScrollToBottomOnNewMessage.ts", "../src/components/MessageList/hooks/VirtualizedMessageList/useUnreadMessagesNotificationVirtualized.ts", "../src/components/MessageList/VirtualizedMessageListComponents.tsx", "../src/context/VirtualizedMessageListContext.tsx", "../src/components/Channel/hooks/useChannelContainerClasses.ts", "../src/components/Channel/utils.ts", "../src/components/Attachment/attachment-sizing.tsx", "../src/experimental/Search/hooks/useSearchFocusedMessage.ts", "../src/components/ChannelHeader/ChannelHeader.tsx", "../src/components/ChannelHeader/icons.tsx", "../src/components/Chat/Chat.tsx", "../src/components/Chat/hooks/useChat.ts", "../src/components/Chat/hooks/useCreateChatContext.ts", "../src/components/Chat/hooks/useChannelsQueryState.ts", "../src/components/Chat/hooks/useCreateChatClient.ts", "../src/components/Thread/Thread.tsx", "../src/components/Thread/ThreadHeader.tsx", "../src/components/Thread/icons.tsx", "../src/components/Thread/ThreadHead.tsx", "../src/components/Thread/ThreadStart.tsx", "../src/components/Window/Window.tsx"],
  "sourcesContent": ["/**\n * lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors <https://jquery.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/** Used to match Latin Unicode letters (excluding mathematical operators). */\nvar reLatin = /[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g;\n\n/** Used to compose unicode character classes. */\nvar rsComboMarksRange = '\\\\u0300-\\\\u036f\\\\ufe20-\\\\ufe23',\n    rsComboSymbolsRange = '\\\\u20d0-\\\\u20f0';\n\n/** Used to compose unicode capture groups. */\nvar rsCombo = '[' + rsComboMarksRange + rsComboSymbolsRange + ']';\n\n/**\n * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and\n * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).\n */\nvar reComboMark = RegExp(rsCombo, 'g');\n\n/** Used to map Latin Unicode letters to basic Latin letters. */\nvar deburredLetters = {\n  // Latin-1 Supplement block.\n  '\\xc0': 'A',  '\\xc1': 'A', '\\xc2': 'A', '\\xc3': 'A', '\\xc4': 'A', '\\xc5': 'A',\n  '\\xe0': 'a',  '\\xe1': 'a', '\\xe2': 'a', '\\xe3': 'a', '\\xe4': 'a', '\\xe5': 'a',\n  '\\xc7': 'C',  '\\xe7': 'c',\n  '\\xd0': 'D',  '\\xf0': 'd',\n  '\\xc8': 'E',  '\\xc9': 'E', '\\xca': 'E', '\\xcb': 'E',\n  '\\xe8': 'e',  '\\xe9': 'e', '\\xea': 'e', '\\xeb': 'e',\n  '\\xcc': 'I',  '\\xcd': 'I', '\\xce': 'I', '\\xcf': 'I',\n  '\\xec': 'i',  '\\xed': 'i', '\\xee': 'i', '\\xef': 'i',\n  '\\xd1': 'N',  '\\xf1': 'n',\n  '\\xd2': 'O',  '\\xd3': 'O', '\\xd4': 'O', '\\xd5': 'O', '\\xd6': 'O', '\\xd8': 'O',\n  '\\xf2': 'o',  '\\xf3': 'o', '\\xf4': 'o', '\\xf5': 'o', '\\xf6': 'o', '\\xf8': 'o',\n  '\\xd9': 'U',  '\\xda': 'U', '\\xdb': 'U', '\\xdc': 'U',\n  '\\xf9': 'u',  '\\xfa': 'u', '\\xfb': 'u', '\\xfc': 'u',\n  '\\xdd': 'Y',  '\\xfd': 'y', '\\xff': 'y',\n  '\\xc6': 'Ae', '\\xe6': 'ae',\n  '\\xde': 'Th', '\\xfe': 'th',\n  '\\xdf': 'ss',\n  // Latin Extended-A block.\n  '\\u0100': 'A',  '\\u0102': 'A', '\\u0104': 'A',\n  '\\u0101': 'a',  '\\u0103': 'a', '\\u0105': 'a',\n  '\\u0106': 'C',  '\\u0108': 'C', '\\u010a': 'C', '\\u010c': 'C',\n  '\\u0107': 'c',  '\\u0109': 'c', '\\u010b': 'c', '\\u010d': 'c',\n  '\\u010e': 'D',  '\\u0110': 'D', '\\u010f': 'd', '\\u0111': 'd',\n  '\\u0112': 'E',  '\\u0114': 'E', '\\u0116': 'E', '\\u0118': 'E', '\\u011a': 'E',\n  '\\u0113': 'e',  '\\u0115': 'e', '\\u0117': 'e', '\\u0119': 'e', '\\u011b': 'e',\n  '\\u011c': 'G',  '\\u011e': 'G', '\\u0120': 'G', '\\u0122': 'G',\n  '\\u011d': 'g',  '\\u011f': 'g', '\\u0121': 'g', '\\u0123': 'g',\n  '\\u0124': 'H',  '\\u0126': 'H', '\\u0125': 'h', '\\u0127': 'h',\n  '\\u0128': 'I',  '\\u012a': 'I', '\\u012c': 'I', '\\u012e': 'I', '\\u0130': 'I',\n  '\\u0129': 'i',  '\\u012b': 'i', '\\u012d': 'i', '\\u012f': 'i', '\\u0131': 'i',\n  '\\u0134': 'J',  '\\u0135': 'j',\n  '\\u0136': 'K',  '\\u0137': 'k', '\\u0138': 'k',\n  '\\u0139': 'L',  '\\u013b': 'L', '\\u013d': 'L', '\\u013f': 'L', '\\u0141': 'L',\n  '\\u013a': 'l',  '\\u013c': 'l', '\\u013e': 'l', '\\u0140': 'l', '\\u0142': 'l',\n  '\\u0143': 'N',  '\\u0145': 'N', '\\u0147': 'N', '\\u014a': 'N',\n  '\\u0144': 'n',  '\\u0146': 'n', '\\u0148': 'n', '\\u014b': 'n',\n  '\\u014c': 'O',  '\\u014e': 'O', '\\u0150': 'O',\n  '\\u014d': 'o',  '\\u014f': 'o', '\\u0151': 'o',\n  '\\u0154': 'R',  '\\u0156': 'R', '\\u0158': 'R',\n  '\\u0155': 'r',  '\\u0157': 'r', '\\u0159': 'r',\n  '\\u015a': 'S',  '\\u015c': 'S', '\\u015e': 'S', '\\u0160': 'S',\n  '\\u015b': 's',  '\\u015d': 's', '\\u015f': 's', '\\u0161': 's',\n  '\\u0162': 'T',  '\\u0164': 'T', '\\u0166': 'T',\n  '\\u0163': 't',  '\\u0165': 't', '\\u0167': 't',\n  '\\u0168': 'U',  '\\u016a': 'U', '\\u016c': 'U', '\\u016e': 'U', '\\u0170': 'U', '\\u0172': 'U',\n  '\\u0169': 'u',  '\\u016b': 'u', '\\u016d': 'u', '\\u016f': 'u', '\\u0171': 'u', '\\u0173': 'u',\n  '\\u0174': 'W',  '\\u0175': 'w',\n  '\\u0176': 'Y',  '\\u0177': 'y', '\\u0178': 'Y',\n  '\\u0179': 'Z',  '\\u017b': 'Z', '\\u017d': 'Z',\n  '\\u017a': 'z',  '\\u017c': 'z', '\\u017e': 'z',\n  '\\u0132': 'IJ', '\\u0133': 'ij',\n  '\\u0152': 'Oe', '\\u0153': 'oe',\n  '\\u0149': \"'n\", '\\u017f': 'ss'\n};\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/**\n * The base implementation of `_.propertyOf` without support for deep paths.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyOf(object) {\n  return function(key) {\n    return object == null ? undefined : object[key];\n  };\n}\n\n/**\n * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A\n * letters to basic Latin letters.\n *\n * @private\n * @param {string} letter The matched letter to deburr.\n * @returns {string} Returns the deburred letter.\n */\nvar deburrLetter = basePropertyOf(deburredLetters);\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n    symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n  // Exit early for strings to avoid a performance hit in some environments.\n  if (typeof value == 'string') {\n    return value;\n  }\n  if (isSymbol(value)) {\n    return symbolToString ? symbolToString.call(value) : '';\n  }\n  var result = (value + '');\n  return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n  return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n  return typeof value == 'symbol' ||\n    (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n  return value == null ? '' : baseToString(value);\n}\n\n/**\n * Deburrs `string` by converting\n * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)\n * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)\n * letters to basic Latin letters and removing\n * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to deburr.\n * @returns {string} Returns the deburred string.\n * @example\n *\n * _.deburr('d\u00E9j\u00E0 vu');\n * // => 'deja vu'\n */\nfunction deburr(string) {\n  string = toString(string);\n  return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');\n}\n\nmodule.exports = deburr;\n", "'use strict';\n\nvar matchOperatorsRe = /[|\\\\{}()[\\]^$+*?.]/g;\n\nmodule.exports = function (str) {\n\tif (typeof str !== 'string') {\n\t\tthrow new TypeError('Expected a string');\n\t}\n\n\treturn str.replace(matchOperatorsRe, '\\\\$&');\n};\n", "const replacements = [\n\t// German umlauts\n\t['ß', 'ss'],\n\t['ẞ', 'Ss'],\n\t['ä', 'ae'],\n\t['Ä', 'Ae'],\n\t['ö', 'oe'],\n\t['Ö', 'Oe'],\n\t['ü', 'ue'],\n\t['Ü', 'Ue'],\n\n\t// Latin\n\t['À', 'A'],\n\t['Á', 'A'],\n\t['Â', 'A'],\n\t['Ã', 'A'],\n\t['Ä', 'Ae'],\n\t['Å', 'A'],\n\t['Æ', 'AE'],\n\t['Ç', 'C'],\n\t['È', 'E'],\n\t['É', 'E'],\n\t['Ê', 'E'],\n\t['Ë', 'E'],\n\t['Ì', 'I'],\n\t['Í', 'I'],\n\t['Î', 'I'],\n\t['Ï', 'I'],\n\t['Ð', 'D'],\n\t['Ñ', 'N'],\n\t['Ò', 'O'],\n\t['Ó', 'O'],\n\t['Ô', 'O'],\n\t['Õ', 'O'],\n\t['Ö', 'Oe'],\n\t['Ő', 'O'],\n\t['Ø', 'O'],\n\t['Ù', 'U'],\n\t['Ú', 'U'],\n\t['Û', 'U'],\n\t['Ü', 'Ue'],\n\t['Ű', 'U'],\n\t['Ý', 'Y'],\n\t['Þ', 'TH'],\n\t['ß', 'ss'],\n\t['à', 'a'],\n\t['á', 'a'],\n\t['â', 'a'],\n\t['ã', 'a'],\n\t['ä', 'ae'],\n\t['å', 'a'],\n\t['æ', 'ae'],\n\t['ç', 'c'],\n\t['è', 'e'],\n\t['é', 'e'],\n\t['ê', 'e'],\n\t['ë', 'e'],\n\t['ì', 'i'],\n\t['í', 'i'],\n\t['î', 'i'],\n\t['ï', 'i'],\n\t['ð', 'd'],\n\t['ñ', 'n'],\n\t['ò', 'o'],\n\t['ó', 'o'],\n\t['ô', 'o'],\n\t['õ', 'o'],\n\t['ö', 'oe'],\n\t['ő', 'o'],\n\t['ø', 'o'],\n\t['ù', 'u'],\n\t['ú', 'u'],\n\t['û', 'u'],\n\t['ü', 'ue'],\n\t['ű', 'u'],\n\t['ý', 'y'],\n\t['þ', 'th'],\n\t['ÿ', 'y'],\n\t['ẞ', 'SS'],\n\n\t// Vietnamese\n\t['à', 'a'],\n\t['À', 'A'],\n\t['á', 'a'],\n\t['Á', 'A'],\n\t['â', 'a'],\n\t['Â', 'A'],\n\t['ã', 'a'],\n\t['Ã', 'A'],\n\t['è', 'e'],\n\t['È', 'E'],\n\t['é', 'e'],\n\t['É', 'E'],\n\t['ê', 'e'],\n\t['Ê', 'E'],\n\t['ì', 'i'],\n\t['Ì', 'I'],\n\t['í', 'i'],\n\t['Í', 'I'],\n\t['ò', 'o'],\n\t['Ò', 'O'],\n\t['ó', 'o'],\n\t['Ó', 'O'],\n\t['ô', 'o'],\n\t['Ô', 'O'],\n\t['õ', 'o'],\n\t['Õ', 'O'],\n\t['ù', 'u'],\n\t['Ù', 'U'],\n\t['ú', 'u'],\n\t['Ú', 'U'],\n\t['ý', 'y'],\n\t['Ý', 'Y'],\n\t['ă', 'a'],\n\t['Ă', 'A'],\n\t['Đ', 'D'],\n\t['đ', 'd'],\n\t['ĩ', 'i'],\n\t['Ĩ', 'I'],\n\t['ũ', 'u'],\n\t['Ũ', 'U'],\n\t['ơ', 'o'],\n\t['Ơ', 'O'],\n\t['ư', 'u'],\n\t['Ư', 'U'],\n\t['ạ', 'a'],\n\t['Ạ', 'A'],\n\t['ả', 'a'],\n\t['Ả', 'A'],\n\t['ấ', 'a'],\n\t['Ấ', 'A'],\n\t['ầ', 'a'],\n\t['Ầ', 'A'],\n\t['ẩ', 'a'],\n\t['Ẩ', 'A'],\n\t['ẫ', 'a'],\n\t['Ẫ', 'A'],\n\t['ậ', 'a'],\n\t['Ậ', 'A'],\n\t['ắ', 'a'],\n\t['Ắ', 'A'],\n\t['ằ', 'a'],\n\t['Ằ', 'A'],\n\t['ẳ', 'a'],\n\t['Ẳ', 'A'],\n\t['ẵ', 'a'],\n\t['Ẵ', 'A'],\n\t['ặ', 'a'],\n\t['Ặ', 'A'],\n\t['ẹ', 'e'],\n\t['Ẹ', 'E'],\n\t['ẻ', 'e'],\n\t['Ẻ', 'E'],\n\t['ẽ', 'e'],\n\t['Ẽ', 'E'],\n\t['ế', 'e'],\n\t['Ế', 'E'],\n\t['ề', 'e'],\n\t['Ề', 'E'],\n\t['ể', 'e'],\n\t['Ể', 'E'],\n\t['ễ', 'e'],\n\t['Ễ', 'E'],\n\t['ệ', 'e'],\n\t['Ệ', 'E'],\n\t['ỉ', 'i'],\n\t['Ỉ', 'I'],\n\t['ị', 'i'],\n\t['Ị', 'I'],\n\t['ọ', 'o'],\n\t['Ọ', 'O'],\n\t['ỏ', 'o'],\n\t['Ỏ', 'O'],\n\t['ố', 'o'],\n\t['Ố', 'O'],\n\t['ồ', 'o'],\n\t['Ồ', 'O'],\n\t['ổ', 'o'],\n\t['Ổ', 'O'],\n\t['ỗ', 'o'],\n\t['Ỗ', 'O'],\n\t['ộ', 'o'],\n\t['Ộ', 'O'],\n\t['ớ', 'o'],\n\t['Ớ', 'O'],\n\t['ờ', 'o'],\n\t['Ờ', 'O'],\n\t['ở', 'o'],\n\t['Ở', 'O'],\n\t['ỡ', 'o'],\n\t['Ỡ', 'O'],\n\t['ợ', 'o'],\n\t['Ợ', 'O'],\n\t['ụ', 'u'],\n\t['Ụ', 'U'],\n\t['ủ', 'u'],\n\t['Ủ', 'U'],\n\t['ứ', 'u'],\n\t['Ứ', 'U'],\n\t['ừ', 'u'],\n\t['Ừ', 'U'],\n\t['ử', 'u'],\n\t['Ử', 'U'],\n\t['ữ', 'u'],\n\t['Ữ', 'U'],\n\t['ự', 'u'],\n\t['Ự', 'U'],\n\t['ỳ', 'y'],\n\t['Ỳ', 'Y'],\n\t['ỵ', 'y'],\n\t['Ỵ', 'Y'],\n\t['ỷ', 'y'],\n\t['Ỷ', 'Y'],\n\t['ỹ', 'y'],\n\t['Ỹ', 'Y'],\n\n\t// Arabic\n\t['ء', 'e'],\n\t['آ', 'a'],\n\t['أ', 'a'],\n\t['ؤ', 'w'],\n\t['إ', 'i'],\n\t['ئ', 'y'],\n\t['ا', 'a'],\n\t['ب', 'b'],\n\t['ة', 't'],\n\t['ت', 't'],\n\t['ث', 'th'],\n\t['ج', 'j'],\n\t['ح', 'h'],\n\t['خ', 'kh'],\n\t['د', 'd'],\n\t['ذ', 'dh'],\n\t['ر', 'r'],\n\t['ز', 'z'],\n\t['س', 's'],\n\t['ش', 'sh'],\n\t['ص', 's'],\n\t['ض', 'd'],\n\t['ط', 't'],\n\t['ظ', 'z'],\n\t['ع', 'e'],\n\t['غ', 'gh'],\n\t['ـ', '_'],\n\t['ف', 'f'],\n\t['ق', 'q'],\n\t['ك', 'k'],\n\t['ل', 'l'],\n\t['م', 'm'],\n\t['ن', 'n'],\n\t['ه', 'h'],\n\t['و', 'w'],\n\t['ى', 'a'],\n\t['ي', 'y'],\n\t['َ‎', 'a'],\n\t['ُ', 'u'],\n\t['ِ‎', 'i'],\n\t['٠', '0'],\n\t['١', '1'],\n\t['٢', '2'],\n\t['٣', '3'],\n\t['٤', '4'],\n\t['٥', '5'],\n\t['٦', '6'],\n\t['٧', '7'],\n\t['٨', '8'],\n\t['٩', '9'],\n\n\t// Persian / Farsi\n\t['چ', 'ch'],\n\t['ک', 'k'],\n\t['گ', 'g'],\n\t['پ', 'p'],\n\t['ژ', 'zh'],\n\t['ی', 'y'],\n\t['۰', '0'],\n\t['۱', '1'],\n\t['۲', '2'],\n\t['۳', '3'],\n\t['۴', '4'],\n\t['۵', '5'],\n\t['۶', '6'],\n\t['۷', '7'],\n\t['۸', '8'],\n\t['۹', '9'],\n\n\t// Pashto\n\t['ټ', 'p'],\n\t['ځ', 'z'],\n\t['څ', 'c'],\n\t['ډ', 'd'],\n\t['ﺫ', 'd'],\n\t['ﺭ', 'r'],\n\t['ړ', 'r'],\n\t['ﺯ', 'z'],\n\t['ږ', 'g'],\n\t['ښ', 'x'],\n\t['ګ', 'g'],\n\t['ڼ', 'n'],\n\t['ۀ', 'e'],\n\t['ې', 'e'],\n\t['ۍ', 'ai'],\n\n\t// Urdu\n\t['ٹ', 't'],\n\t['ڈ', 'd'],\n\t['ڑ', 'r'],\n\t['ں', 'n'],\n\t['ہ', 'h'],\n\t['ھ', 'h'],\n\t['ے', 'e'],\n\n\t// Russian\n\t['А', 'A'],\n\t['а', 'a'],\n\t['Б', 'B'],\n\t['б', 'b'],\n\t['В', 'V'],\n\t['в', 'v'],\n\t['Г', 'G'],\n\t['г', 'g'],\n\t['Д', 'D'],\n\t['д', 'd'],\n\t['ъе', 'ye'],\n\t['Ъе', 'Ye'],\n\t['ъЕ', 'yE'],\n\t['ЪЕ', 'YE'],\n\t['Е', 'E'],\n\t['е', 'e'],\n\t['Ё', 'Yo'],\n\t['ё', 'yo'],\n\t['Ж', 'Zh'],\n\t['ж', 'zh'],\n\t['З', 'Z'],\n\t['з', 'z'],\n\t['И', 'I'],\n\t['и', 'i'],\n\t['ый', 'iy'],\n\t['Ый', 'Iy'],\n\t['ЫЙ', 'IY'],\n\t['ыЙ', 'iY'],\n\t['Й', 'Y'],\n\t['й', 'y'],\n\t['К', 'K'],\n\t['к', 'k'],\n\t['Л', 'L'],\n\t['л', 'l'],\n\t['М', 'M'],\n\t['м', 'm'],\n\t['Н', 'N'],\n\t['н', 'n'],\n\t['О', 'O'],\n\t['о', 'o'],\n\t['П', 'P'],\n\t['п', 'p'],\n\t['Р', 'R'],\n\t['р', 'r'],\n\t['С', 'S'],\n\t['с', 's'],\n\t['Т', 'T'],\n\t['т', 't'],\n\t['У', 'U'],\n\t['у', 'u'],\n\t['Ф', 'F'],\n\t['ф', 'f'],\n\t['Х', 'Kh'],\n\t['х', 'kh'],\n\t['Ц', 'Ts'],\n\t['ц', 'ts'],\n\t['Ч', 'Ch'],\n\t['ч', 'ch'],\n\t['Ш', 'Sh'],\n\t['ш', 'sh'],\n\t['Щ', 'Sch'],\n\t['щ', 'sch'],\n\t['Ъ', ''],\n\t['ъ', ''],\n\t['Ы', 'Y'],\n\t['ы', 'y'],\n\t['Ь', ''],\n\t['ь', ''],\n\t['Э', 'E'],\n\t['э', 'e'],\n\t['Ю', 'Yu'],\n\t['ю', 'yu'],\n\t['Я', 'Ya'],\n\t['я', 'ya'],\n\n\t// Romanian\n\t['ă', 'a'],\n\t['Ă', 'A'],\n\t['ș', 's'],\n\t['Ș', 'S'],\n\t['ț', 't'],\n\t['Ț', 'T'],\n\t['ţ', 't'],\n\t['Ţ', 'T'],\n\n\t// Turkish\n\t['ş', 's'],\n\t['Ş', 'S'],\n\t['ç', 'c'],\n\t['Ç', 'C'],\n\t['ğ', 'g'],\n\t['Ğ', 'G'],\n\t['ı', 'i'],\n\t['İ', 'I'],\n\n\t// Armenian\n\t['ա', 'a'],\n\t['Ա', 'A'],\n\t['բ', 'b'],\n\t['Բ', 'B'],\n\t['գ', 'g'],\n\t['Գ', 'G'],\n\t['դ', 'd'],\n\t['Դ', 'D'],\n\t['ե', 'ye'],\n\t['Ե', 'Ye'],\n\t['զ', 'z'],\n\t['Զ', 'Z'],\n\t['է', 'e'],\n\t['Է', 'E'],\n\t['ը', 'y'],\n\t['Ը', 'Y'],\n\t['թ', 't'],\n\t['Թ', 'T'],\n\t['ժ', 'zh'],\n\t['Ժ', 'Zh'],\n\t['ի', 'i'],\n\t['Ի', 'I'],\n\t['լ', 'l'],\n\t['Լ', 'L'],\n\t['խ', 'kh'],\n\t['Խ', 'Kh'],\n\t['ծ', 'ts'],\n\t['Ծ', 'Ts'],\n\t['կ', 'k'],\n\t['Կ', 'K'],\n\t['հ', 'h'],\n\t['Հ', 'H'],\n\t['ձ', 'dz'],\n\t['Ձ', 'Dz'],\n\t['ղ', 'gh'],\n\t['Ղ', 'Gh'],\n\t['ճ', 'tch'],\n\t['Ճ', 'Tch'],\n\t['մ', 'm'],\n\t['Մ', 'M'],\n\t['յ', 'y'],\n\t['Յ', 'Y'],\n\t['ն', 'n'],\n\t['Ն', 'N'],\n\t['շ', 'sh'],\n\t['Շ', 'Sh'],\n\t['ո', 'vo'],\n\t['Ո', 'Vo'],\n\t['չ', 'ch'],\n\t['Չ', 'Ch'],\n\t['պ', 'p'],\n\t['Պ', 'P'],\n\t['ջ', 'j'],\n\t['Ջ', 'J'],\n\t['ռ', 'r'],\n\t['Ռ', 'R'],\n\t['ս', 's'],\n\t['Ս', 'S'],\n\t['վ', 'v'],\n\t['Վ', 'V'],\n\t['տ', 't'],\n\t['Տ', 'T'],\n\t['ր', 'r'],\n\t['Ր', 'R'],\n\t['ց', 'c'],\n\t['Ց', 'C'],\n\t['ու', 'u'],\n\t['ՈՒ', 'U'],\n\t['Ու', 'U'],\n\t['փ', 'p'],\n\t['Փ', 'P'],\n\t['ք', 'q'],\n\t['Ք', 'Q'],\n\t['օ', 'o'],\n\t['Օ', 'O'],\n\t['ֆ', 'f'],\n\t['Ֆ', 'F'],\n\t['և', 'yev'],\n\n\t// Georgian\n\t['ა', 'a'],\n\t['ბ', 'b'],\n\t['გ', 'g'],\n\t['დ', 'd'],\n\t['ე', 'e'],\n\t['ვ', 'v'],\n\t['ზ', 'z'],\n\t['თ', 't'],\n\t['ი', 'i'],\n\t['კ', 'k'],\n\t['ლ', 'l'],\n\t['მ', 'm'],\n\t['ნ', 'n'],\n\t['ო', 'o'],\n\t['პ', 'p'],\n\t['ჟ', 'zh'],\n\t['რ', 'r'],\n\t['ს', 's'],\n\t['ტ', 't'],\n\t['უ', 'u'],\n\t['ფ', 'ph'],\n\t['ქ', 'q'],\n\t['ღ', 'gh'],\n\t['ყ', 'k'],\n\t['შ', 'sh'],\n\t['ჩ', 'ch'],\n\t['ც', 'ts'],\n\t['ძ', 'dz'],\n\t['წ', 'ts'],\n\t['ჭ', 'tch'],\n\t['ხ', 'kh'],\n\t['ჯ', 'j'],\n\t['ჰ', 'h'],\n\n\t// Czech\n\t['č', 'c'],\n\t['ď', 'd'],\n\t['ě', 'e'],\n\t['ň', 'n'],\n\t['ř', 'r'],\n\t['š', 's'],\n\t['ť', 't'],\n\t['ů', 'u'],\n\t['ž', 'z'],\n\t['Č', 'C'],\n\t['Ď', 'D'],\n\t['Ě', 'E'],\n\t['Ň', 'N'],\n\t['Ř', 'R'],\n\t['Š', 'S'],\n\t['Ť', 'T'],\n\t['Ů', 'U'],\n\t['Ž', 'Z'],\n\n\t// Dhivehi\n\t['ހ', 'h'],\n\t['ށ', 'sh'],\n\t['ނ', 'n'],\n\t['ރ', 'r'],\n\t['ބ', 'b'],\n\t['ޅ', 'lh'],\n\t['ކ', 'k'],\n\t['އ', 'a'],\n\t['ވ', 'v'],\n\t['މ', 'm'],\n\t['ފ', 'f'],\n\t['ދ', 'dh'],\n\t['ތ', 'th'],\n\t['ލ', 'l'],\n\t['ގ', 'g'],\n\t['ޏ', 'gn'],\n\t['ސ', 's'],\n\t['ޑ', 'd'],\n\t['ޒ', 'z'],\n\t['ޓ', 't'],\n\t['ޔ', 'y'],\n\t['ޕ', 'p'],\n\t['ޖ', 'j'],\n\t['ޗ', 'ch'],\n\t['ޘ', 'tt'],\n\t['ޙ', 'hh'],\n\t['ޚ', 'kh'],\n\t['ޛ', 'th'],\n\t['ޜ', 'z'],\n\t['ޝ', 'sh'],\n\t['ޞ', 's'],\n\t['ޟ', 'd'],\n\t['ޠ', 't'],\n\t['ޡ', 'z'],\n\t['ޢ', 'a'],\n\t['ޣ', 'gh'],\n\t['ޤ', 'q'],\n\t['ޥ', 'w'],\n\t['ަ', 'a'],\n\t['ާ', 'aa'],\n\t['ި', 'i'],\n\t['ީ', 'ee'],\n\t['ު', 'u'],\n\t['ޫ', 'oo'],\n\t['ެ', 'e'],\n\t['ޭ', 'ey'],\n\t['ޮ', 'o'],\n\t['ޯ', 'oa'],\n\t['ް', ''],\n\n\t// Greek\n\t['α', 'a'],\n\t['β', 'v'],\n\t['γ', 'g'],\n\t['δ', 'd'],\n\t['ε', 'e'],\n\t['ζ', 'z'],\n\t['η', 'i'],\n\t['θ', 'th'],\n\t['ι', 'i'],\n\t['κ', 'k'],\n\t['λ', 'l'],\n\t['μ', 'm'],\n\t['ν', 'n'],\n\t['ξ', 'ks'],\n\t['ο', 'o'],\n\t['π', 'p'],\n\t['ρ', 'r'],\n\t['σ', 's'],\n\t['τ', 't'],\n\t['υ', 'y'],\n\t['φ', 'f'],\n\t['χ', 'x'],\n\t['ψ', 'ps'],\n\t['ω', 'o'],\n\t['ά', 'a'],\n\t['έ', 'e'],\n\t['ί', 'i'],\n\t['ό', 'o'],\n\t['ύ', 'y'],\n\t['ή', 'i'],\n\t['ώ', 'o'],\n\t['ς', 's'],\n\t['ϊ', 'i'],\n\t['ΰ', 'y'],\n\t['ϋ', 'y'],\n\t['ΐ', 'i'],\n\t['Α', 'A'],\n\t['Β', 'B'],\n\t['Γ', 'G'],\n\t['Δ', 'D'],\n\t['Ε', 'E'],\n\t['Ζ', 'Z'],\n\t['Η', 'I'],\n\t['Θ', 'TH'],\n\t['Ι', 'I'],\n\t['Κ', 'K'],\n\t['Λ', 'L'],\n\t['Μ', 'M'],\n\t['Ν', 'N'],\n\t['Ξ', 'KS'],\n\t['Ο', 'O'],\n\t['Π', 'P'],\n\t['Ρ', 'R'],\n\t['Σ', 'S'],\n\t['Τ', 'T'],\n\t['Υ', 'Y'],\n\t['Φ', 'F'],\n\t['Χ', 'X'],\n\t['Ψ', 'PS'],\n\t['Ω', 'O'],\n\t['Ά', 'A'],\n\t['Έ', 'E'],\n\t['Ί', 'I'],\n\t['Ό', 'O'],\n\t['Ύ', 'Y'],\n\t['Ή', 'I'],\n\t['Ώ', 'O'],\n\t['Ϊ', 'I'],\n\t['Ϋ', 'Y'],\n\n\t// Disabled as it conflicts with German and Latin.\n\t// Hungarian\n\t// ['ä', 'a'],\n\t// ['Ä', 'A'],\n\t// ['ö', 'o'],\n\t// ['Ö', 'O'],\n\t// ['ü', 'u'],\n\t// ['Ü', 'U'],\n\t// ['ű', 'u'],\n\t// ['Ű', 'U'],\n\n\t// Latvian\n\t['ā', 'a'],\n\t['ē', 'e'],\n\t['ģ', 'g'],\n\t['ī', 'i'],\n\t['ķ', 'k'],\n\t['ļ', 'l'],\n\t['ņ', 'n'],\n\t['ū', 'u'],\n\t['Ā', 'A'],\n\t['Ē', 'E'],\n\t['Ģ', 'G'],\n\t['Ī', 'I'],\n\t['Ķ', 'K'],\n\t['Ļ', 'L'],\n\t['Ņ', 'N'],\n\t['Ū', 'U'],\n\t['č', 'c'],\n\t['š', 's'],\n\t['ž', 'z'],\n\t['Č', 'C'],\n\t['Š', 'S'],\n\t['Ž', 'Z'],\n\n\t// Lithuanian\n\t['ą', 'a'],\n\t['č', 'c'],\n\t['ę', 'e'],\n\t['ė', 'e'],\n\t['į', 'i'],\n\t['š', 's'],\n\t['ų', 'u'],\n\t['ū', 'u'],\n\t['ž', 'z'],\n\t['Ą', 'A'],\n\t['Č', 'C'],\n\t['Ę', 'E'],\n\t['Ė', 'E'],\n\t['Į', 'I'],\n\t['Š', 'S'],\n\t['Ų', 'U'],\n\t['Ū', 'U'],\n\n\t// Macedonian\n\t['Ќ', 'Kj'],\n\t['ќ', 'kj'],\n\t['Љ', 'Lj'],\n\t['љ', 'lj'],\n\t['Њ', 'Nj'],\n\t['њ', 'nj'],\n\t['Тс', 'Ts'],\n\t['тс', 'ts'],\n\n\t// Polish\n\t['ą', 'a'],\n\t['ć', 'c'],\n\t['ę', 'e'],\n\t['ł', 'l'],\n\t['ń', 'n'],\n\t['ś', 's'],\n\t['ź', 'z'],\n\t['ż', 'z'],\n\t['Ą', 'A'],\n\t['Ć', 'C'],\n\t['Ę', 'E'],\n\t['Ł', 'L'],\n\t['Ń', 'N'],\n\t['Ś', 'S'],\n\t['Ź', 'Z'],\n\t['Ż', 'Z'],\n\n\t// Disabled as it conflicts with Vietnamese.\n\t// Serbian\n\t// ['љ', 'lj'],\n\t// ['њ', 'nj'],\n\t// ['Љ', 'Lj'],\n\t// ['Њ', 'Nj'],\n\t// ['đ', 'dj'],\n\t// ['Đ', 'Dj'],\n\t// ['ђ', 'dj'],\n\t// ['ј', 'j'],\n\t// ['ћ', 'c'],\n\t// ['џ', 'dz'],\n\t// ['Ђ', 'Dj'],\n\t// ['Ј', 'j'],\n\t// ['Ћ', 'C'],\n\t// ['Џ', 'Dz'],\n\n\t// Disabled as it conflicts with German and Latin.\n\t// Slovak\n\t// ['ä', 'a'],\n\t// ['Ä', 'A'],\n\t// ['ľ', 'l'],\n\t// ['ĺ', 'l'],\n\t// ['ŕ', 'r'],\n\t// ['Ľ', 'L'],\n\t// ['Ĺ', 'L'],\n\t// ['Ŕ', 'R'],\n\n\t// Disabled as it conflicts with German and Latin.\n\t// Swedish\n\t// ['å', 'o'],\n\t// ['Å', 'o'],\n\t// ['ä', 'a'],\n\t// ['Ä', 'A'],\n\t// ['ë', 'e'],\n\t// ['Ë', 'E'],\n\t// ['ö', 'o'],\n\t// ['Ö', 'O'],\n\n\t// Ukrainian\n\t['Є', 'Ye'],\n\t['І', 'I'],\n\t['Ї', 'Yi'],\n\t['Ґ', 'G'],\n\t['є', 'ye'],\n\t['і', 'i'],\n\t['ї', 'yi'],\n\t['ґ', 'g'],\n\n\t// Dutch\n\t['Ĳ', 'IJ'],\n\t['ĳ', 'ij'],\n\n\t// Danish\n\t// ['Æ', 'Ae'],\n\t// ['Ø', 'Oe'],\n\t// ['Å', 'Aa'],\n\t// ['æ', 'ae'],\n\t// ['ø', 'oe'],\n\t// ['å', 'aa']\n\n\t// Currencies\n\t['¢', 'c'],\n\t['¥', 'Y'],\n\t['߿', 'b'],\n\t['৳', 't'],\n\t['૱', 'Bo'],\n\t['฿', 'B'],\n\t['₠', 'CE'],\n\t['₡', 'C'],\n\t['₢', 'Cr'],\n\t['₣', 'F'],\n\t['₥', 'm'],\n\t['₦', 'N'],\n\t['₧', 'Pt'],\n\t['₨', 'Rs'],\n\t['₩', 'W'],\n\t['₫', 's'],\n\t['€', 'E'],\n\t['₭', 'K'],\n\t['₮', 'T'],\n\t['₯', 'Dp'],\n\t['₰', 'S'],\n\t['₱', 'P'],\n\t['₲', 'G'],\n\t['₳', 'A'],\n\t['₴', 'S'],\n\t['₵', 'C'],\n\t['₶', 'tt'],\n\t['₷', 'S'],\n\t['₸', 'T'],\n\t['₹', 'R'],\n\t['₺', 'L'],\n\t['₽', 'P'],\n\t['₿', 'B'],\n\t['﹩', '$'],\n\t['￠', 'c'],\n\t['￥', 'Y'],\n\t['￦', 'W'],\n\n\t// Latin\n\t['𝐀', 'A'],\n\t['𝐁', 'B'],\n\t['𝐂', 'C'],\n\t['𝐃', 'D'],\n\t['𝐄', 'E'],\n\t['𝐅', 'F'],\n\t['𝐆', 'G'],\n\t['𝐇', 'H'],\n\t['𝐈', 'I'],\n\t['𝐉', 'J'],\n\t['𝐊', 'K'],\n\t['𝐋', 'L'],\n\t['𝐌', 'M'],\n\t['𝐍', 'N'],\n\t['𝐎', 'O'],\n\t['𝐏', 'P'],\n\t['𝐐', 'Q'],\n\t['𝐑', 'R'],\n\t['𝐒', 'S'],\n\t['𝐓', 'T'],\n\t['𝐔', 'U'],\n\t['𝐕', 'V'],\n\t['𝐖', 'W'],\n\t['𝐗', 'X'],\n\t['𝐘', 'Y'],\n\t['𝐙', 'Z'],\n\t['𝐚', 'a'],\n\t['𝐛', 'b'],\n\t['𝐜', 'c'],\n\t['𝐝', 'd'],\n\t['𝐞', 'e'],\n\t['𝐟', 'f'],\n\t['𝐠', 'g'],\n\t['𝐡', 'h'],\n\t['𝐢', 'i'],\n\t['𝐣', 'j'],\n\t['𝐤', 'k'],\n\t['𝐥', 'l'],\n\t['𝐦', 'm'],\n\t['𝐧', 'n'],\n\t['𝐨', 'o'],\n\t['𝐩', 'p'],\n\t['𝐪', 'q'],\n\t['𝐫', 'r'],\n\t['𝐬', 's'],\n\t['𝐭', 't'],\n\t['𝐮', 'u'],\n\t['𝐯', 'v'],\n\t['𝐰', 'w'],\n\t['𝐱', 'x'],\n\t['𝐲', 'y'],\n\t['𝐳', 'z'],\n\t['𝐴', 'A'],\n\t['𝐵', 'B'],\n\t['𝐶', 'C'],\n\t['𝐷', 'D'],\n\t['𝐸', 'E'],\n\t['𝐹', 'F'],\n\t['𝐺', 'G'],\n\t['𝐻', 'H'],\n\t['𝐼', 'I'],\n\t['𝐽', 'J'],\n\t['𝐾', 'K'],\n\t['𝐿', 'L'],\n\t['𝑀', 'M'],\n\t['𝑁', 'N'],\n\t['𝑂', 'O'],\n\t['𝑃', 'P'],\n\t['𝑄', 'Q'],\n\t['𝑅', 'R'],\n\t['𝑆', 'S'],\n\t['𝑇', 'T'],\n\t['𝑈', 'U'],\n\t['𝑉', 'V'],\n\t['𝑊', 'W'],\n\t['𝑋', 'X'],\n\t['𝑌', 'Y'],\n\t['𝑍', 'Z'],\n\t['𝑎', 'a'],\n\t['𝑏', 'b'],\n\t['𝑐', 'c'],\n\t['𝑑', 'd'],\n\t['𝑒', 'e'],\n\t['𝑓', 'f'],\n\t['𝑔', 'g'],\n\t['𝑖', 'i'],\n\t['𝑗', 'j'],\n\t['𝑘', 'k'],\n\t['𝑙', 'l'],\n\t['𝑚', 'm'],\n\t['𝑛', 'n'],\n\t['𝑜', 'o'],\n\t['𝑝', 'p'],\n\t['𝑞', 'q'],\n\t['𝑟', 'r'],\n\t['𝑠', 's'],\n\t['𝑡', 't'],\n\t['𝑢', 'u'],\n\t['𝑣', 'v'],\n\t['𝑤', 'w'],\n\t['𝑥', 'x'],\n\t['𝑦', 'y'],\n\t['𝑧', 'z'],\n\t['𝑨', 'A'],\n\t['𝑩', 'B'],\n\t['𝑪', 'C'],\n\t['𝑫', 'D'],\n\t['𝑬', 'E'],\n\t['𝑭', 'F'],\n\t['𝑮', 'G'],\n\t['𝑯', 'H'],\n\t['𝑰', 'I'],\n\t['𝑱', 'J'],\n\t['𝑲', 'K'],\n\t['𝑳', 'L'],\n\t['𝑴', 'M'],\n\t['𝑵', 'N'],\n\t['𝑶', 'O'],\n\t['𝑷', 'P'],\n\t['𝑸', 'Q'],\n\t['𝑹', 'R'],\n\t['𝑺', 'S'],\n\t['𝑻', 'T'],\n\t['𝑼', 'U'],\n\t['𝑽', 'V'],\n\t['𝑾', 'W'],\n\t['𝑿', 'X'],\n\t['𝒀', 'Y'],\n\t['𝒁', 'Z'],\n\t['𝒂', 'a'],\n\t['𝒃', 'b'],\n\t['𝒄', 'c'],\n\t['𝒅', 'd'],\n\t['𝒆', 'e'],\n\t['𝒇', 'f'],\n\t['𝒈', 'g'],\n\t['𝒉', 'h'],\n\t['𝒊', 'i'],\n\t['𝒋', 'j'],\n\t['𝒌', 'k'],\n\t['𝒍', 'l'],\n\t['𝒎', 'm'],\n\t['𝒏', 'n'],\n\t['𝒐', 'o'],\n\t['𝒑', 'p'],\n\t['𝒒', 'q'],\n\t['𝒓', 'r'],\n\t['𝒔', 's'],\n\t['𝒕', 't'],\n\t['𝒖', 'u'],\n\t['𝒗', 'v'],\n\t['𝒘', 'w'],\n\t['𝒙', 'x'],\n\t['𝒚', 'y'],\n\t['𝒛', 'z'],\n\t['𝒜', 'A'],\n\t['𝒞', 'C'],\n\t['𝒟', 'D'],\n\t['𝒢', 'g'],\n\t['𝒥', 'J'],\n\t['𝒦', 'K'],\n\t['𝒩', 'N'],\n\t['𝒪', 'O'],\n\t['𝒫', 'P'],\n\t['𝒬', 'Q'],\n\t['𝒮', 'S'],\n\t['𝒯', 'T'],\n\t['𝒰', 'U'],\n\t['𝒱', 'V'],\n\t['𝒲', 'W'],\n\t['𝒳', 'X'],\n\t['𝒴', 'Y'],\n\t['𝒵', 'Z'],\n\t['𝒶', 'a'],\n\t['𝒷', 'b'],\n\t['𝒸', 'c'],\n\t['𝒹', 'd'],\n\t['𝒻', 'f'],\n\t['𝒽', 'h'],\n\t['𝒾', 'i'],\n\t['𝒿', 'j'],\n\t['𝓀', 'h'],\n\t['𝓁', 'l'],\n\t['𝓂', 'm'],\n\t['𝓃', 'n'],\n\t['𝓅', 'p'],\n\t['𝓆', 'q'],\n\t['𝓇', 'r'],\n\t['𝓈', 's'],\n\t['𝓉', 't'],\n\t['𝓊', 'u'],\n\t['𝓋', 'v'],\n\t['𝓌', 'w'],\n\t['𝓍', 'x'],\n\t['𝓎', 'y'],\n\t['𝓏', 'z'],\n\t['𝓐', 'A'],\n\t['𝓑', 'B'],\n\t['𝓒', 'C'],\n\t['𝓓', 'D'],\n\t['𝓔', 'E'],\n\t['𝓕', 'F'],\n\t['𝓖', 'G'],\n\t['𝓗', 'H'],\n\t['𝓘', 'I'],\n\t['𝓙', 'J'],\n\t['𝓚', 'K'],\n\t['𝓛', 'L'],\n\t['𝓜', 'M'],\n\t['𝓝', 'N'],\n\t['𝓞', 'O'],\n\t['𝓟', 'P'],\n\t['𝓠', 'Q'],\n\t['𝓡', 'R'],\n\t['𝓢', 'S'],\n\t['𝓣', 'T'],\n\t['𝓤', 'U'],\n\t['𝓥', 'V'],\n\t['𝓦', 'W'],\n\t['𝓧', 'X'],\n\t['𝓨', 'Y'],\n\t['𝓩', 'Z'],\n\t['𝓪', 'a'],\n\t['𝓫', 'b'],\n\t['𝓬', 'c'],\n\t['𝓭', 'd'],\n\t['𝓮', 'e'],\n\t['𝓯', 'f'],\n\t['𝓰', 'g'],\n\t['𝓱', 'h'],\n\t['𝓲', 'i'],\n\t['𝓳', 'j'],\n\t['𝓴', 'k'],\n\t['𝓵', 'l'],\n\t['𝓶', 'm'],\n\t['𝓷', 'n'],\n\t['𝓸', 'o'],\n\t['𝓹', 'p'],\n\t['𝓺', 'q'],\n\t['𝓻', 'r'],\n\t['𝓼', 's'],\n\t['𝓽', 't'],\n\t['𝓾', 'u'],\n\t['𝓿', 'v'],\n\t['𝔀', 'w'],\n\t['𝔁', 'x'],\n\t['𝔂', 'y'],\n\t['𝔃', 'z'],\n\t['𝔄', 'A'],\n\t['𝔅', 'B'],\n\t['𝔇', 'D'],\n\t['𝔈', 'E'],\n\t['𝔉', 'F'],\n\t['𝔊', 'G'],\n\t['𝔍', 'J'],\n\t['𝔎', 'K'],\n\t['𝔏', 'L'],\n\t['𝔐', 'M'],\n\t['𝔑', 'N'],\n\t['𝔒', 'O'],\n\t['𝔓', 'P'],\n\t['𝔔', 'Q'],\n\t['𝔖', 'S'],\n\t['𝔗', 'T'],\n\t['𝔘', 'U'],\n\t['𝔙', 'V'],\n\t['𝔚', 'W'],\n\t['𝔛', 'X'],\n\t['𝔜', 'Y'],\n\t['𝔞', 'a'],\n\t['𝔟', 'b'],\n\t['𝔠', 'c'],\n\t['𝔡', 'd'],\n\t['𝔢', 'e'],\n\t['𝔣', 'f'],\n\t['𝔤', 'g'],\n\t['𝔥', 'h'],\n\t['𝔦', 'i'],\n\t['𝔧', 'j'],\n\t['𝔨', 'k'],\n\t['𝔩', 'l'],\n\t['𝔪', 'm'],\n\t['𝔫', 'n'],\n\t['𝔬', 'o'],\n\t['𝔭', 'p'],\n\t['𝔮', 'q'],\n\t['𝔯', 'r'],\n\t['𝔰', 's'],\n\t['𝔱', 't'],\n\t['𝔲', 'u'],\n\t['𝔳', 'v'],\n\t['𝔴', 'w'],\n\t['𝔵', 'x'],\n\t['𝔶', 'y'],\n\t['𝔷', 'z'],\n\t['𝔸', 'A'],\n\t['𝔹', 'B'],\n\t['𝔻', 'D'],\n\t['𝔼', 'E'],\n\t['𝔽', 'F'],\n\t['𝔾', 'G'],\n\t['𝕀', 'I'],\n\t['𝕁', 'J'],\n\t['𝕂', 'K'],\n\t['𝕃', 'L'],\n\t['𝕄', 'M'],\n\t['𝕆', 'N'],\n\t['𝕊', 'S'],\n\t['𝕋', 'T'],\n\t['𝕌', 'U'],\n\t['𝕍', 'V'],\n\t['𝕎', 'W'],\n\t['𝕏', 'X'],\n\t['𝕐', 'Y'],\n\t['𝕒', 'a'],\n\t['𝕓', 'b'],\n\t['𝕔', 'c'],\n\t['𝕕', 'd'],\n\t['𝕖', 'e'],\n\t['𝕗', 'f'],\n\t['𝕘', 'g'],\n\t['𝕙', 'h'],\n\t['𝕚', 'i'],\n\t['𝕛', 'j'],\n\t['𝕜', 'k'],\n\t['𝕝', 'l'],\n\t['𝕞', 'm'],\n\t['𝕟', 'n'],\n\t['𝕠', 'o'],\n\t['𝕡', 'p'],\n\t['𝕢', 'q'],\n\t['𝕣', 'r'],\n\t['𝕤', 's'],\n\t['𝕥', 't'],\n\t['𝕦', 'u'],\n\t['𝕧', 'v'],\n\t['𝕨', 'w'],\n\t['𝕩', 'x'],\n\t['𝕪', 'y'],\n\t['𝕫', 'z'],\n\t['𝕬', 'A'],\n\t['𝕭', 'B'],\n\t['𝕮', 'C'],\n\t['𝕯', 'D'],\n\t['𝕰', 'E'],\n\t['𝕱', 'F'],\n\t['𝕲', 'G'],\n\t['𝕳', 'H'],\n\t['𝕴', 'I'],\n\t['𝕵', 'J'],\n\t['𝕶', 'K'],\n\t['𝕷', 'L'],\n\t['𝕸', 'M'],\n\t['𝕹', 'N'],\n\t['𝕺', 'O'],\n\t['𝕻', 'P'],\n\t['𝕼', 'Q'],\n\t['𝕽', 'R'],\n\t['𝕾', 'S'],\n\t['𝕿', 'T'],\n\t['𝖀', 'U'],\n\t['𝖁', 'V'],\n\t['𝖂', 'W'],\n\t['𝖃', 'X'],\n\t['𝖄', 'Y'],\n\t['𝖅', 'Z'],\n\t['𝖆', 'a'],\n\t['𝖇', 'b'],\n\t['𝖈', 'c'],\n\t['𝖉', 'd'],\n\t['𝖊', 'e'],\n\t['𝖋', 'f'],\n\t['𝖌', 'g'],\n\t['𝖍', 'h'],\n\t['𝖎', 'i'],\n\t['𝖏', 'j'],\n\t['𝖐', 'k'],\n\t['𝖑', 'l'],\n\t['𝖒', 'm'],\n\t['𝖓', 'n'],\n\t['𝖔', 'o'],\n\t['𝖕', 'p'],\n\t['𝖖', 'q'],\n\t['𝖗', 'r'],\n\t['𝖘', 's'],\n\t['𝖙', 't'],\n\t['𝖚', 'u'],\n\t['𝖛', 'v'],\n\t['𝖜', 'w'],\n\t['𝖝', 'x'],\n\t['𝖞', 'y'],\n\t['𝖟', 'z'],\n\t['𝖠', 'A'],\n\t['𝖡', 'B'],\n\t['𝖢', 'C'],\n\t['𝖣', 'D'],\n\t['𝖤', 'E'],\n\t['𝖥', 'F'],\n\t['𝖦', 'G'],\n\t['𝖧', 'H'],\n\t['𝖨', 'I'],\n\t['𝖩', 'J'],\n\t['𝖪', 'K'],\n\t['𝖫', 'L'],\n\t['𝖬', 'M'],\n\t['𝖭', 'N'],\n\t['𝖮', 'O'],\n\t['𝖯', 'P'],\n\t['𝖰', 'Q'],\n\t['𝖱', 'R'],\n\t['𝖲', 'S'],\n\t['𝖳', 'T'],\n\t['𝖴', 'U'],\n\t['𝖵', 'V'],\n\t['𝖶', 'W'],\n\t['𝖷', 'X'],\n\t['𝖸', 'Y'],\n\t['𝖹', 'Z'],\n\t['𝖺', 'a'],\n\t['𝖻', 'b'],\n\t['𝖼', 'c'],\n\t['𝖽', 'd'],\n\t['𝖾', 'e'],\n\t['𝖿', 'f'],\n\t['𝗀', 'g'],\n\t['𝗁', 'h'],\n\t['𝗂', 'i'],\n\t['𝗃', 'j'],\n\t['𝗄', 'k'],\n\t['𝗅', 'l'],\n\t['𝗆', 'm'],\n\t['𝗇', 'n'],\n\t['𝗈', 'o'],\n\t['𝗉', 'p'],\n\t['𝗊', 'q'],\n\t['𝗋', 'r'],\n\t['𝗌', 's'],\n\t['𝗍', 't'],\n\t['𝗎', 'u'],\n\t['𝗏', 'v'],\n\t['𝗐', 'w'],\n\t['𝗑', 'x'],\n\t['𝗒', 'y'],\n\t['𝗓', 'z'],\n\t['𝗔', 'A'],\n\t['𝗕', 'B'],\n\t['𝗖', 'C'],\n\t['𝗗', 'D'],\n\t['𝗘', 'E'],\n\t['𝗙', 'F'],\n\t['𝗚', 'G'],\n\t['𝗛', 'H'],\n\t['𝗜', 'I'],\n\t['𝗝', 'J'],\n\t['𝗞', 'K'],\n\t['𝗟', 'L'],\n\t['𝗠', 'M'],\n\t['𝗡', 'N'],\n\t['𝗢', 'O'],\n\t['𝗣', 'P'],\n\t['𝗤', 'Q'],\n\t['𝗥', 'R'],\n\t['𝗦', 'S'],\n\t['𝗧', 'T'],\n\t['𝗨', 'U'],\n\t['𝗩', 'V'],\n\t['𝗪', 'W'],\n\t['𝗫', 'X'],\n\t['𝗬', 'Y'],\n\t['𝗭', 'Z'],\n\t['𝗮', 'a'],\n\t['𝗯', 'b'],\n\t['𝗰', 'c'],\n\t['𝗱', 'd'],\n\t['𝗲', 'e'],\n\t['𝗳', 'f'],\n\t['𝗴', 'g'],\n\t['𝗵', 'h'],\n\t['𝗶', 'i'],\n\t['𝗷', 'j'],\n\t['𝗸', 'k'],\n\t['𝗹', 'l'],\n\t['𝗺', 'm'],\n\t['𝗻', 'n'],\n\t['𝗼', 'o'],\n\t['𝗽', 'p'],\n\t['𝗾', 'q'],\n\t['𝗿', 'r'],\n\t['𝘀', 's'],\n\t['𝘁', 't'],\n\t['𝘂', 'u'],\n\t['𝘃', 'v'],\n\t['𝘄', 'w'],\n\t['𝘅', 'x'],\n\t['𝘆', 'y'],\n\t['𝘇', 'z'],\n\t['𝘈', 'A'],\n\t['𝘉', 'B'],\n\t['𝘊', 'C'],\n\t['𝘋', 'D'],\n\t['𝘌', 'E'],\n\t['𝘍', 'F'],\n\t['𝘎', 'G'],\n\t['𝘏', 'H'],\n\t['𝘐', 'I'],\n\t['𝘑', 'J'],\n\t['𝘒', 'K'],\n\t['𝘓', 'L'],\n\t['𝘔', 'M'],\n\t['𝘕', 'N'],\n\t['𝘖', 'O'],\n\t['𝘗', 'P'],\n\t['𝘘', 'Q'],\n\t['𝘙', 'R'],\n\t['𝘚', 'S'],\n\t['𝘛', 'T'],\n\t['𝘜', 'U'],\n\t['𝘝', 'V'],\n\t['𝘞', 'W'],\n\t['𝘟', 'X'],\n\t['𝘠', 'Y'],\n\t['𝘡', 'Z'],\n\t['𝘢', 'a'],\n\t['𝘣', 'b'],\n\t['𝘤', 'c'],\n\t['𝘥', 'd'],\n\t['𝘦', 'e'],\n\t['𝘧', 'f'],\n\t['𝘨', 'g'],\n\t['𝘩', 'h'],\n\t['𝘪', 'i'],\n\t['𝘫', 'j'],\n\t['𝘬', 'k'],\n\t['𝘭', 'l'],\n\t['𝘮', 'm'],\n\t['𝘯', 'n'],\n\t['𝘰', 'o'],\n\t['𝘱', 'p'],\n\t['𝘲', 'q'],\n\t['𝘳', 'r'],\n\t['𝘴', 's'],\n\t['𝘵', 't'],\n\t['𝘶', 'u'],\n\t['𝘷', 'v'],\n\t['𝘸', 'w'],\n\t['𝘹', 'x'],\n\t['𝘺', 'y'],\n\t['𝘻', 'z'],\n\t['𝘼', 'A'],\n\t['𝘽', 'B'],\n\t['𝘾', 'C'],\n\t['𝘿', 'D'],\n\t['𝙀', 'E'],\n\t['𝙁', 'F'],\n\t['𝙂', 'G'],\n\t['𝙃', 'H'],\n\t['𝙄', 'I'],\n\t['𝙅', 'J'],\n\t['𝙆', 'K'],\n\t['𝙇', 'L'],\n\t['𝙈', 'M'],\n\t['𝙉', 'N'],\n\t['𝙊', 'O'],\n\t['𝙋', 'P'],\n\t['𝙌', 'Q'],\n\t['𝙍', 'R'],\n\t['𝙎', 'S'],\n\t['𝙏', 'T'],\n\t['𝙐', 'U'],\n\t['𝙑', 'V'],\n\t['𝙒', 'W'],\n\t['𝙓', 'X'],\n\t['𝙔', 'Y'],\n\t['𝙕', 'Z'],\n\t['𝙖', 'a'],\n\t['𝙗', 'b'],\n\t['𝙘', 'c'],\n\t['𝙙', 'd'],\n\t['𝙚', 'e'],\n\t['𝙛', 'f'],\n\t['𝙜', 'g'],\n\t['𝙝', 'h'],\n\t['𝙞', 'i'],\n\t['𝙟', 'j'],\n\t['𝙠', 'k'],\n\t['𝙡', 'l'],\n\t['𝙢', 'm'],\n\t['𝙣', 'n'],\n\t['𝙤', 'o'],\n\t['𝙥', 'p'],\n\t['𝙦', 'q'],\n\t['𝙧', 'r'],\n\t['𝙨', 's'],\n\t['𝙩', 't'],\n\t['𝙪', 'u'],\n\t['𝙫', 'v'],\n\t['𝙬', 'w'],\n\t['𝙭', 'x'],\n\t['𝙮', 'y'],\n\t['𝙯', 'z'],\n\t['𝙰', 'A'],\n\t['𝙱', 'B'],\n\t['𝙲', 'C'],\n\t['𝙳', 'D'],\n\t['𝙴', 'E'],\n\t['𝙵', 'F'],\n\t['𝙶', 'G'],\n\t['𝙷', 'H'],\n\t['𝙸', 'I'],\n\t['𝙹', 'J'],\n\t['𝙺', 'K'],\n\t['𝙻', 'L'],\n\t['𝙼', 'M'],\n\t['𝙽', 'N'],\n\t['𝙾', 'O'],\n\t['𝙿', 'P'],\n\t['𝚀', 'Q'],\n\t['𝚁', 'R'],\n\t['𝚂', 'S'],\n\t['𝚃', 'T'],\n\t['𝚄', 'U'],\n\t['𝚅', 'V'],\n\t['𝚆', 'W'],\n\t['𝚇', 'X'],\n\t['𝚈', 'Y'],\n\t['𝚉', 'Z'],\n\t['𝚊', 'a'],\n\t['𝚋', 'b'],\n\t['𝚌', 'c'],\n\t['𝚍', 'd'],\n\t['𝚎', 'e'],\n\t['𝚏', 'f'],\n\t['𝚐', 'g'],\n\t['𝚑', 'h'],\n\t['𝚒', 'i'],\n\t['𝚓', 'j'],\n\t['𝚔', 'k'],\n\t['𝚕', 'l'],\n\t['𝚖', 'm'],\n\t['𝚗', 'n'],\n\t['𝚘', 'o'],\n\t['𝚙', 'p'],\n\t['𝚚', 'q'],\n\t['𝚛', 'r'],\n\t['𝚜', 's'],\n\t['𝚝', 't'],\n\t['𝚞', 'u'],\n\t['𝚟', 'v'],\n\t['𝚠', 'w'],\n\t['𝚡', 'x'],\n\t['𝚢', 'y'],\n\t['𝚣', 'z'],\n\n\t// Dotless letters\n\t['𝚤', 'l'],\n\t['𝚥', 'j'],\n\n\t// Greek\n\t['𝛢', 'A'],\n\t['𝛣', 'B'],\n\t['𝛤', 'G'],\n\t['𝛥', 'D'],\n\t['𝛦', 'E'],\n\t['𝛧', 'Z'],\n\t['𝛨', 'I'],\n\t['𝛩', 'TH'],\n\t['𝛪', 'I'],\n\t['𝛫', 'K'],\n\t['𝛬', 'L'],\n\t['𝛭', 'M'],\n\t['𝛮', 'N'],\n\t['𝛯', 'KS'],\n\t['𝛰', 'O'],\n\t['𝛱', 'P'],\n\t['𝛲', 'R'],\n\t['𝛳', 'TH'],\n\t['𝛴', 'S'],\n\t['𝛵', 'T'],\n\t['𝛶', 'Y'],\n\t['𝛷', 'F'],\n\t['𝛸', 'x'],\n\t['𝛹', 'PS'],\n\t['𝛺', 'O'],\n\t['𝛻', 'D'],\n\t['𝛼', 'a'],\n\t['𝛽', 'b'],\n\t['𝛾', 'g'],\n\t['𝛿', 'd'],\n\t['𝜀', 'e'],\n\t['𝜁', 'z'],\n\t['𝜂', 'i'],\n\t['𝜃', 'th'],\n\t['𝜄', 'i'],\n\t['𝜅', 'k'],\n\t['𝜆', 'l'],\n\t['𝜇', 'm'],\n\t['𝜈', 'n'],\n\t['𝜉', 'ks'],\n\t['𝜊', 'o'],\n\t['𝜋', 'p'],\n\t['𝜌', 'r'],\n\t['𝜍', 's'],\n\t['𝜎', 's'],\n\t['𝜏', 't'],\n\t['𝜐', 'y'],\n\t['𝜑', 'f'],\n\t['𝜒', 'x'],\n\t['𝜓', 'ps'],\n\t['𝜔', 'o'],\n\t['𝜕', 'd'],\n\t['𝜖', 'E'],\n\t['𝜗', 'TH'],\n\t['𝜘', 'K'],\n\t['𝜙', 'f'],\n\t['𝜚', 'r'],\n\t['𝜛', 'p'],\n\t['𝜜', 'A'],\n\t['𝜝', 'V'],\n\t['𝜞', 'G'],\n\t['𝜟', 'D'],\n\t['𝜠', 'E'],\n\t['𝜡', 'Z'],\n\t['𝜢', 'I'],\n\t['𝜣', 'TH'],\n\t['𝜤', 'I'],\n\t['𝜥', 'K'],\n\t['𝜦', 'L'],\n\t['𝜧', 'M'],\n\t['𝜨', 'N'],\n\t['𝜩', 'KS'],\n\t['𝜪', 'O'],\n\t['𝜫', 'P'],\n\t['𝜬', 'S'],\n\t['𝜭', 'TH'],\n\t['𝜮', 'S'],\n\t['𝜯', 'T'],\n\t['𝜰', 'Y'],\n\t['𝜱', 'F'],\n\t['𝜲', 'X'],\n\t['𝜳', 'PS'],\n\t['𝜴', 'O'],\n\t['𝜵', 'D'],\n\t['𝜶', 'a'],\n\t['𝜷', 'v'],\n\t['𝜸', 'g'],\n\t['𝜹', 'd'],\n\t['𝜺', 'e'],\n\t['𝜻', 'z'],\n\t['𝜼', 'i'],\n\t['𝜽', 'th'],\n\t['𝜾', 'i'],\n\t['𝜿', 'k'],\n\t['𝝀', 'l'],\n\t['𝝁', 'm'],\n\t['𝝂', 'n'],\n\t['𝝃', 'ks'],\n\t['𝝄', 'o'],\n\t['𝝅', 'p'],\n\t['𝝆', 'r'],\n\t['𝝇', 's'],\n\t['𝝈', 's'],\n\t['𝝉', 't'],\n\t['𝝊', 'y'],\n\t['𝝋', 'f'],\n\t['𝝌', 'x'],\n\t['𝝍', 'ps'],\n\t['𝝎', 'o'],\n\t['𝝏', 'a'],\n\t['𝝐', 'e'],\n\t['𝝑', 'i'],\n\t['𝝒', 'k'],\n\t['𝝓', 'f'],\n\t['𝝔', 'r'],\n\t['𝝕', 'p'],\n\t['𝝖', 'A'],\n\t['𝝗', 'B'],\n\t['𝝘', 'G'],\n\t['𝝙', 'D'],\n\t['𝝚', 'E'],\n\t['𝝛', 'Z'],\n\t['𝝜', 'I'],\n\t['𝝝', 'TH'],\n\t['𝝞', 'I'],\n\t['𝝟', 'K'],\n\t['𝝠', 'L'],\n\t['𝝡', 'M'],\n\t['𝝢', 'N'],\n\t['𝝣', 'KS'],\n\t['𝝤', 'O'],\n\t['𝝥', 'P'],\n\t['𝝦', 'R'],\n\t['𝝧', 'TH'],\n\t['𝝨', 'S'],\n\t['𝝩', 'T'],\n\t['𝝪', 'Y'],\n\t['𝝫', 'F'],\n\t['𝝬', 'X'],\n\t['𝝭', 'PS'],\n\t['𝝮', 'O'],\n\t['𝝯', 'D'],\n\t['𝝰', 'a'],\n\t['𝝱', 'v'],\n\t['𝝲', 'g'],\n\t['𝝳', 'd'],\n\t['𝝴', 'e'],\n\t['𝝵', 'z'],\n\t['𝝶', 'i'],\n\t['𝝷', 'th'],\n\t['𝝸', 'i'],\n\t['𝝹', 'k'],\n\t['𝝺', 'l'],\n\t['𝝻', 'm'],\n\t['𝝼', 'n'],\n\t['𝝽', 'ks'],\n\t['𝝾', 'o'],\n\t['𝝿', 'p'],\n\t['𝞀', 'r'],\n\t['𝞁', 's'],\n\t['𝞂', 's'],\n\t['𝞃', 't'],\n\t['𝞄', 'y'],\n\t['𝞅', 'f'],\n\t['𝞆', 'x'],\n\t['𝞇', 'ps'],\n\t['𝞈', 'o'],\n\t['𝞉', 'a'],\n\t['𝞊', 'e'],\n\t['𝞋', 'i'],\n\t['𝞌', 'k'],\n\t['𝞍', 'f'],\n\t['𝞎', 'r'],\n\t['𝞏', 'p'],\n\t['𝞐', 'A'],\n\t['𝞑', 'V'],\n\t['𝞒', 'G'],\n\t['𝞓', 'D'],\n\t['𝞔', 'E'],\n\t['𝞕', 'Z'],\n\t['𝞖', 'I'],\n\t['𝞗', 'TH'],\n\t['𝞘', 'I'],\n\t['𝞙', 'K'],\n\t['𝞚', 'L'],\n\t['𝞛', 'M'],\n\t['𝞜', 'N'],\n\t['𝞝', 'KS'],\n\t['𝞞', 'O'],\n\t['𝞟', 'P'],\n\t['𝞠', 'S'],\n\t['𝞡', 'TH'],\n\t['𝞢', 'S'],\n\t['𝞣', 'T'],\n\t['𝞤', 'Y'],\n\t['𝞥', 'F'],\n\t['𝞦', 'X'],\n\t['𝞧', 'PS'],\n\t['𝞨', 'O'],\n\t['𝞩', 'D'],\n\t['𝞪', 'av'],\n\t['𝞫', 'g'],\n\t['𝞬', 'd'],\n\t['𝞭', 'e'],\n\t['𝞮', 'z'],\n\t['𝞯', 'i'],\n\t['𝞰', 'i'],\n\t['𝞱', 'th'],\n\t['𝞲', 'i'],\n\t['𝞳', 'k'],\n\t['𝞴', 'l'],\n\t['𝞵', 'm'],\n\t['𝞶', 'n'],\n\t['𝞷', 'ks'],\n\t['𝞸', 'o'],\n\t['𝞹', 'p'],\n\t['𝞺', 'r'],\n\t['𝞻', 's'],\n\t['𝞼', 's'],\n\t['𝞽', 't'],\n\t['𝞾', 'y'],\n\t['𝞿', 'f'],\n\t['𝟀', 'x'],\n\t['𝟁', 'ps'],\n\t['𝟂', 'o'],\n\t['𝟃', 'a'],\n\t['𝟄', 'e'],\n\t['𝟅', 'i'],\n\t['𝟆', 'k'],\n\t['𝟇', 'f'],\n\t['𝟈', 'r'],\n\t['𝟉', 'p'],\n\t['𝟊', 'F'],\n\t['𝟋', 'f'],\n\t['⒜', '(a)'],\n\t['⒝', '(b)'],\n\t['⒞', '(c)'],\n\t['⒟', '(d)'],\n\t['⒠', '(e)'],\n\t['⒡', '(f)'],\n\t['⒢', '(g)'],\n\t['⒣', '(h)'],\n\t['⒤', '(i)'],\n\t['⒥', '(j)'],\n\t['⒦', '(k)'],\n\t['⒧', '(l)'],\n\t['⒨', '(m)'],\n\t['⒩', '(n)'],\n\t['⒪', '(o)'],\n\t['⒫', '(p)'],\n\t['⒬', '(q)'],\n\t['⒭', '(r)'],\n\t['⒮', '(s)'],\n\t['⒯', '(t)'],\n\t['⒰', '(u)'],\n\t['⒱', '(v)'],\n\t['⒲', '(w)'],\n\t['⒳', '(x)'],\n\t['⒴', '(y)'],\n\t['⒵', '(z)'],\n\t['Ⓐ', '(A)'],\n\t['Ⓑ', '(B)'],\n\t['Ⓒ', '(C)'],\n\t['Ⓓ', '(D)'],\n\t['Ⓔ', '(E)'],\n\t['Ⓕ', '(F)'],\n\t['Ⓖ', '(G)'],\n\t['Ⓗ', '(H)'],\n\t['Ⓘ', '(I)'],\n\t['Ⓙ', '(J)'],\n\t['Ⓚ', '(K)'],\n\t['Ⓛ', '(L)'],\n\t['Ⓝ', '(N)'],\n\t['Ⓞ', '(O)'],\n\t['Ⓟ', '(P)'],\n\t['Ⓠ', '(Q)'],\n\t['Ⓡ', '(R)'],\n\t['Ⓢ', '(S)'],\n\t['Ⓣ', '(T)'],\n\t['Ⓤ', '(U)'],\n\t['Ⓥ', '(V)'],\n\t['Ⓦ', '(W)'],\n\t['Ⓧ', '(X)'],\n\t['Ⓨ', '(Y)'],\n\t['Ⓩ', '(Z)'],\n\t['ⓐ', '(a)'],\n\t['ⓑ', '(b)'],\n\t['ⓒ', '(b)'],\n\t['ⓓ', '(c)'],\n\t['ⓔ', '(e)'],\n\t['ⓕ', '(f)'],\n\t['ⓖ', '(g)'],\n\t['ⓗ', '(h)'],\n\t['ⓘ', '(i)'],\n\t['ⓙ', '(j)'],\n\t['ⓚ', '(k)'],\n\t['ⓛ', '(l)'],\n\t['ⓜ', '(m)'],\n\t['ⓝ', '(n)'],\n\t['ⓞ', '(o)'],\n\t['ⓟ', '(p)'],\n\t['ⓠ', '(q)'],\n\t['ⓡ', '(r)'],\n\t['ⓢ', '(s)'],\n\t['ⓣ', '(t)'],\n\t['ⓤ', '(u)'],\n\t['ⓥ', '(v)'],\n\t['ⓦ', '(w)'],\n\t['ⓧ', '(x)'],\n\t['ⓨ', '(y)'],\n\t['ⓩ', '(z)'],\n\n\t// Maltese\n\t['Ċ', 'C'],\n\t['ċ', 'c'],\n\t['Ġ', 'G'],\n\t['ġ', 'g'],\n\t['Ħ', 'H'],\n\t['ħ', 'h'],\n\t['Ż', 'Z'],\n\t['ż', 'z'],\n\n\t// Numbers\n\t['𝟎', '0'],\n\t['𝟏', '1'],\n\t['𝟐', '2'],\n\t['𝟑', '3'],\n\t['𝟒', '4'],\n\t['𝟓', '5'],\n\t['𝟔', '6'],\n\t['𝟕', '7'],\n\t['𝟖', '8'],\n\t['𝟗', '9'],\n\t['𝟘', '0'],\n\t['𝟙', '1'],\n\t['𝟚', '2'],\n\t['𝟛', '3'],\n\t['𝟜', '4'],\n\t['𝟝', '5'],\n\t['𝟞', '6'],\n\t['𝟟', '7'],\n\t['𝟠', '8'],\n\t['𝟡', '9'],\n\t['𝟢', '0'],\n\t['𝟣', '1'],\n\t['𝟤', '2'],\n\t['𝟥', '3'],\n\t['𝟦', '4'],\n\t['𝟧', '5'],\n\t['𝟨', '6'],\n\t['𝟩', '7'],\n\t['𝟪', '8'],\n\t['𝟫', '9'],\n\t['𝟬', '0'],\n\t['𝟭', '1'],\n\t['𝟮', '2'],\n\t['𝟯', '3'],\n\t['𝟰', '4'],\n\t['𝟱', '5'],\n\t['𝟲', '6'],\n\t['𝟳', '7'],\n\t['𝟴', '8'],\n\t['𝟵', '9'],\n\t['𝟶', '0'],\n\t['𝟷', '1'],\n\t['𝟸', '2'],\n\t['𝟹', '3'],\n\t['𝟺', '4'],\n\t['𝟻', '5'],\n\t['𝟼', '6'],\n\t['𝟽', '7'],\n\t['𝟾', '8'],\n\t['𝟿', '9'],\n\t['①', '1'],\n\t['②', '2'],\n\t['③', '3'],\n\t['④', '4'],\n\t['⑤', '5'],\n\t['⑥', '6'],\n\t['⑦', '7'],\n\t['⑧', '8'],\n\t['⑨', '9'],\n\t['⑩', '10'],\n\t['⑪', '11'],\n\t['⑫', '12'],\n\t['⑬', '13'],\n\t['⑭', '14'],\n\t['⑮', '15'],\n\t['⑯', '16'],\n\t['⑰', '17'],\n\t['⑱', '18'],\n\t['⑲', '19'],\n\t['⑳', '20'],\n\t['⑴', '1'],\n\t['⑵', '2'],\n\t['⑶', '3'],\n\t['⑷', '4'],\n\t['⑸', '5'],\n\t['⑹', '6'],\n\t['⑺', '7'],\n\t['⑻', '8'],\n\t['⑼', '9'],\n\t['⑽', '10'],\n\t['⑾', '11'],\n\t['⑿', '12'],\n\t['⒀', '13'],\n\t['⒁', '14'],\n\t['⒂', '15'],\n\t['⒃', '16'],\n\t['⒄', '17'],\n\t['⒅', '18'],\n\t['⒆', '19'],\n\t['⒇', '20'],\n\t['⒈', '1.'],\n\t['⒉', '2.'],\n\t['⒊', '3.'],\n\t['⒋', '4.'],\n\t['⒌', '5.'],\n\t['⒍', '6.'],\n\t['⒎', '7.'],\n\t['⒏', '8.'],\n\t['⒐', '9.'],\n\t['⒑', '10.'],\n\t['⒒', '11.'],\n\t['⒓', '12.'],\n\t['⒔', '13.'],\n\t['⒕', '14.'],\n\t['⒖', '15.'],\n\t['⒗', '16.'],\n\t['⒘', '17.'],\n\t['⒙', '18.'],\n\t['⒚', '19.'],\n\t['⒛', '20.'],\n\t['⓪', '0'],\n\t['⓫', '11'],\n\t['⓬', '12'],\n\t['⓭', '13'],\n\t['⓮', '14'],\n\t['⓯', '15'],\n\t['⓰', '16'],\n\t['⓱', '17'],\n\t['⓲', '18'],\n\t['⓳', '19'],\n\t['⓴', '20'],\n\t['⓵', '1'],\n\t['⓶', '2'],\n\t['⓷', '3'],\n\t['⓸', '4'],\n\t['⓹', '5'],\n\t['⓺', '6'],\n\t['⓻', '7'],\n\t['⓼', '8'],\n\t['⓽', '9'],\n\t['⓾', '10'],\n\t['⓿', '0'],\n\n\t// Punctuation\n\t['🙰', '&'],\n\t['🙱', '&'],\n\t['🙲', '&'],\n\t['🙳', '&'],\n\t['🙴', '&'],\n\t['🙵', '&'],\n\t['🙶', '\"'],\n\t['🙷', '\"'],\n\t['🙸', '\"'],\n\t['‽', '?!'],\n\t['🙹', '?!'],\n\t['🙺', '?!'],\n\t['🙻', '?!'],\n\t['🙼', '/'],\n\t['🙽', '\\\\'],\n\n\t// Alchemy\n\t['🜇', 'AR'],\n\t['🜈', 'V'],\n\t['🜉', 'V'],\n\t['🜆', 'VR'],\n\t['🜅', 'VF'],\n\t['🜩', '2'],\n\t['🜪', '5'],\n\t['🝡', 'f'],\n\t['🝢', 'W'],\n\t['🝣', 'U'],\n\t['🝧', 'V'],\n\t['🝨', 'T'],\n\t['🝪', 'V'],\n\t['🝫', 'MB'],\n\t['🝬', 'VB'],\n\t['🝲', '3B'],\n\t['🝳', '3B'],\n\n\t// Emojis\n\t['💯', '100'],\n\t['🔙', 'BACK'],\n\t['🔚', 'END'],\n\t['🔛', 'ON!'],\n\t['🔜', 'SOON'],\n\t['🔝', 'TOP'],\n\t['🔞', '18'],\n\t['🔤', 'abc'],\n\t['🔠', 'ABCD'],\n\t['🔡', 'abcd'],\n\t['🔢', '1234'],\n\t['🔣', 'T&@%'],\n\t['#️⃣', '#'],\n\t['*️⃣', '*'],\n\t['0️⃣', '0'],\n\t['1️⃣', '1'],\n\t['2️⃣', '2'],\n\t['3️⃣', '3'],\n\t['4️⃣', '4'],\n\t['5️⃣', '5'],\n\t['6️⃣', '6'],\n\t['7️⃣', '7'],\n\t['8️⃣', '8'],\n\t['9️⃣', '9'],\n\t['🔟', '10'],\n\t['🅰️', 'A'],\n\t['🅱️', 'B'],\n\t['🆎', 'AB'],\n\t['🆑', 'CL'],\n\t['🅾️', 'O'],\n\t['🅿', 'P'],\n\t['🆘', 'SOS'],\n\t['🅲', 'C'],\n\t['🅳', 'D'],\n\t['🅴', 'E'],\n\t['🅵', 'F'],\n\t['🅶', 'G'],\n\t['🅷', 'H'],\n\t['🅸', 'I'],\n\t['🅹', 'J'],\n\t['🅺', 'K'],\n\t['🅻', 'L'],\n\t['🅼', 'M'],\n\t['🅽', 'N'],\n\t['🆀', 'Q'],\n\t['🆁', 'R'],\n\t['🆂', 'S'],\n\t['🆃', 'T'],\n\t['🆄', 'U'],\n\t['🆅', 'V'],\n\t['🆆', 'W'],\n\t['🆇', 'X'],\n\t['🆈', 'Y'],\n\t['🆉', 'Z']\n];\n\nexport default replacements;\n", "import deburr from 'lodash.deburr';\nimport escapeStringRegexp from 'escape-string-regexp';\nimport builtinReplacements from './replacements.js';\n\nconst doCustomReplacements = (string, replacements) => {\n\tfor (const [key, value] of replacements) {\n\t\t// TODO: Use `String#replaceAll()` when targeting Node.js 16.\n\t\tstring = string.replace(new RegExp(escapeStringRegexp(key), 'g'), value);\n\t}\n\n\treturn string;\n};\n\nexport default function transliterate(string, options) {\n\tif (typeof string !== 'string') {\n\t\tthrow new TypeError(`Expected a string, got \\`${typeof string}\\``);\n\t}\n\n\toptions = {\n\t\tcustomReplacements: [],\n\t\t...options\n\t};\n\n\tconst customReplacements = new Map([\n\t\t...builtinReplacements,\n\t\t...options.customReplacements\n\t]);\n\n\tstring = string.normalize();\n\tstring = doCustomReplacements(string, customReplacements);\n\tstring = deburr(string);\n\n\treturn string;\n}\n", "// http://www.w3.org/TR/CSS21/grammar.html\n// https://github.com/visionmedia/css-parse/pull/49#issuecomment-30088027\nvar COMMENT_REGEX = /\\/\\*[^*]*\\*+([^/*][^*]*\\*+)*\\//g;\n\nvar NEWLINE_REGEX = /\\n/g;\nvar WHITESPACE_REGEX = /^\\s*/;\n\n// declaration\nvar PROPERTY_REGEX = /^(\\*?[-#/*\\\\\\w]+(\\[[0-9a-z_-]+\\])?)\\s*/;\nvar COLON_REGEX = /^:\\s*/;\nvar VALUE_REGEX = /^((?:'(?:\\\\'|.)*?'|\"(?:\\\\\"|.)*?\"|\\([^)]*?\\)|[^};])+)/;\nvar SEMICOLON_REGEX = /^[;\\s]*/;\n\n// https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String/Trim#Polyfill\nvar TRIM_REGEX = /^\\s+|\\s+$/g;\n\n// strings\nvar NEWLINE = '\\n';\nvar FORWARD_SLASH = '/';\nvar ASTERISK = '*';\nvar EMPTY_STRING = '';\n\n// types\nvar TYPE_COMMENT = 'comment';\nvar TYPE_DECLARATION = 'declaration';\n\n/**\n * @param {String} style\n * @param {Object} [options]\n * @return {Object[]}\n * @throws {TypeError}\n * @throws {Error}\n */\nmodule.exports = function (style, options) {\n  if (typeof style !== 'string') {\n    throw new TypeError('First argument must be a string');\n  }\n\n  if (!style) return [];\n\n  options = options || {};\n\n  /**\n   * Positional.\n   */\n  var lineno = 1;\n  var column = 1;\n\n  /**\n   * Update lineno and column based on `str`.\n   *\n   * @param {String} str\n   */\n  function updatePosition(str) {\n    var lines = str.match(NEWLINE_REGEX);\n    if (lines) lineno += lines.length;\n    var i = str.lastIndexOf(NEWLINE);\n    column = ~i ? str.length - i : column + str.length;\n  }\n\n  /**\n   * Mark position and patch `node.position`.\n   *\n   * @return {Function}\n   */\n  function position() {\n    var start = { line: lineno, column: column };\n    return function (node) {\n      node.position = new Position(start);\n      whitespace();\n      return node;\n    };\n  }\n\n  /**\n   * Store position information for a node.\n   *\n   * @constructor\n   * @property {Object} start\n   * @property {Object} end\n   * @property {undefined|String} source\n   */\n  function Position(start) {\n    this.start = start;\n    this.end = { line: lineno, column: column };\n    this.source = options.source;\n  }\n\n  /**\n   * Non-enumerable source string.\n   */\n  Position.prototype.content = style;\n\n  var errorsList = [];\n\n  /**\n   * Error `msg`.\n   *\n   * @param {String} msg\n   * @throws {Error}\n   */\n  function error(msg) {\n    var err = new Error(\n      options.source + ':' + lineno + ':' + column + ': ' + msg\n    );\n    err.reason = msg;\n    err.filename = options.source;\n    err.line = lineno;\n    err.column = column;\n    err.source = style;\n\n    if (options.silent) {\n      errorsList.push(err);\n    } else {\n      throw err;\n    }\n  }\n\n  /**\n   * Match `re` and return captures.\n   *\n   * @param {RegExp} re\n   * @return {undefined|Array}\n   */\n  function match(re) {\n    var m = re.exec(style);\n    if (!m) return;\n    var str = m[0];\n    updatePosition(str);\n    style = style.slice(str.length);\n    return m;\n  }\n\n  /**\n   * Parse whitespace.\n   */\n  function whitespace() {\n    match(WHITESPACE_REGEX);\n  }\n\n  /**\n   * Parse comments.\n   *\n   * @param {Object[]} [rules]\n   * @return {Object[]}\n   */\n  function comments(rules) {\n    var c;\n    rules = rules || [];\n    while ((c = comment())) {\n      if (c !== false) {\n        rules.push(c);\n      }\n    }\n    return rules;\n  }\n\n  /**\n   * Parse comment.\n   *\n   * @return {Object}\n   * @throws {Error}\n   */\n  function comment() {\n    var pos = position();\n    if (FORWARD_SLASH != style.charAt(0) || ASTERISK != style.charAt(1)) return;\n\n    var i = 2;\n    while (\n      EMPTY_STRING != style.charAt(i) &&\n      (ASTERISK != style.charAt(i) || FORWARD_SLASH != style.charAt(i + 1))\n    ) {\n      ++i;\n    }\n    i += 2;\n\n    if (EMPTY_STRING === style.charAt(i - 1)) {\n      return error('End of comment missing');\n    }\n\n    var str = style.slice(2, i - 2);\n    column += 2;\n    updatePosition(str);\n    style = style.slice(i);\n    column += 2;\n\n    return pos({\n      type: TYPE_COMMENT,\n      comment: str\n    });\n  }\n\n  /**\n   * Parse declaration.\n   *\n   * @return {Object}\n   * @throws {Error}\n   */\n  function declaration() {\n    var pos = position();\n\n    // prop\n    var prop = match(PROPERTY_REGEX);\n    if (!prop) return;\n    comment();\n\n    // :\n    if (!match(COLON_REGEX)) return error(\"property missing ':'\");\n\n    // val\n    var val = match(VALUE_REGEX);\n\n    var ret = pos({\n      type: TYPE_DECLARATION,\n      property: trim(prop[0].replace(COMMENT_REGEX, EMPTY_STRING)),\n      value: val\n        ? trim(val[0].replace(COMMENT_REGEX, EMPTY_STRING))\n        : EMPTY_STRING\n    });\n\n    // ;\n    match(SEMICOLON_REGEX);\n\n    return ret;\n  }\n\n  /**\n   * Parse declarations.\n   *\n   * @return {Object[]}\n   */\n  function declarations() {\n    var decls = [];\n\n    comments(decls);\n\n    // declarations\n    var decl;\n    while ((decl = declaration())) {\n      if (decl !== false) {\n        decls.push(decl);\n        comments(decls);\n      }\n    }\n\n    return decls;\n  }\n\n  whitespace();\n  return declarations();\n};\n\n/**\n * Trim `str`.\n *\n * @param {String} str\n * @return {String}\n */\nfunction trim(str) {\n  return str ? str.replace(TRIM_REGEX, EMPTY_STRING) : EMPTY_STRING;\n}\n", "import type { Declaration } from 'inline-style-parser';\nimport parse from 'inline-style-parser';\n\nexport { Declaration };\n\ninterface StyleObject {\n  [name: string]: string;\n}\n\ntype Iterator = (\n  property: string,\n  value: string,\n  declaration: Declaration,\n) => void;\n\n/**\n * Parses inline style to object.\n *\n * @param style - Inline style.\n * @param iterator - Iterator.\n * @returns - Style object or null.\n *\n * @example Parsing inline style to object:\n *\n * ```js\n * import parse from 'style-to-object';\n * parse('line-height: 42;'); // { 'line-height': '42' }\n * ```\n */\nexport default function StyleToObject(\n  style: string,\n  iterator?: Iterator,\n): StyleObject | null {\n  let styleObject: StyleObject | null = null;\n\n  if (!style || typeof style !== 'string') {\n    return styleObject;\n  }\n\n  const declarations = parse(style);\n  const hasIterator = typeof iterator === 'function';\n\n  declarations.forEach((declaration) => {\n    if (declaration.type !== 'declaration') {\n      return;\n    }\n\n    const { property, value } = declaration;\n\n    if (hasIterator) {\n      iterator(property, value, declaration);\n    } else if (value) {\n      styleObject = styleObject || {};\n      styleObject[property] = value;\n    }\n  });\n\n  return styleObject;\n}\n", "'use strict';\n\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar toStr = Object.prototype.toString;\nvar defineProperty = Object.defineProperty;\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nvar isArray = function isArray(arr) {\n\tif (typeof Array.isArray === 'function') {\n\t\treturn Array.isArray(arr);\n\t}\n\n\treturn toStr.call(arr) === '[object Array]';\n};\n\nvar isPlainObject = function isPlainObject(obj) {\n\tif (!obj || toStr.call(obj) !== '[object Object]') {\n\t\treturn false;\n\t}\n\n\tvar hasOwnConstructor = hasOwn.call(obj, 'constructor');\n\tvar hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf');\n\t// Not own constructor property must be Object\n\tif (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {\n\t\treturn false;\n\t}\n\n\t// Own properties are enumerated firstly, so to speed up,\n\t// if last one is own, then all properties are own.\n\tvar key;\n\tfor (key in obj) { /**/ }\n\n\treturn typeof key === 'undefined' || hasOwn.call(obj, key);\n};\n\n// If name is '__proto__', and Object.defineProperty is available, define __proto__ as an own property on target\nvar setProperty = function setProperty(target, options) {\n\tif (defineProperty && options.name === '__proto__') {\n\t\tdefineProperty(target, options.name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\t\t\tvalue: options.newValue,\n\t\t\twritable: true\n\t\t});\n\t} else {\n\t\ttarget[options.name] = options.newValue;\n\t}\n};\n\n// Return undefined instead of __proto__ if '__proto__' is not an own property\nvar getProperty = function getProperty(obj, name) {\n\tif (name === '__proto__') {\n\t\tif (!hasOwn.call(obj, name)) {\n\t\t\treturn void 0;\n\t\t} else if (gOPD) {\n\t\t\t// In early versions of node, obj['__proto__'] is buggy when obj has\n\t\t\t// __proto__ as an own property. Object.getOwnPropertyDescriptor() works.\n\t\t\treturn gOPD(obj, name).value;\n\t\t}\n\t}\n\n\treturn obj[name];\n};\n\nmodule.exports = function extend() {\n\tvar options, name, src, copy, copyIsArray, clone;\n\tvar target = arguments[0];\n\tvar i = 1;\n\tvar length = arguments.length;\n\tvar deep = false;\n\n\t// Handle a deep copy situation\n\tif (typeof target === 'boolean') {\n\t\tdeep = target;\n\t\ttarget = arguments[1] || {};\n\t\t// skip the boolean and the target\n\t\ti = 2;\n\t}\n\tif (target == null || (typeof target !== 'object' && typeof target !== 'function')) {\n\t\ttarget = {};\n\t}\n\n\tfor (; i < length; ++i) {\n\t\toptions = arguments[i];\n\t\t// Only deal with non-null/undefined values\n\t\tif (options != null) {\n\t\t\t// Extend the base object\n\t\t\tfor (name in options) {\n\t\t\t\tsrc = getProperty(target, name);\n\t\t\t\tcopy = getProperty(options, name);\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif (target !== copy) {\n\t\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\t\tif (deep && copy && (isPlainObject(copy) || (copyIsArray = isArray(copy)))) {\n\t\t\t\t\t\tif (copyIsArray) {\n\t\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\t\tclone = src && isArray(src) ? src : [];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tclone = src && isPlainObject(src) ? src : {};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\t\tsetProperty(target, { name: name, newValue: extend(deep, clone, copy) });\n\n\t\t\t\t\t// Don't bring in undefined values\n\t\t\t\t\t} else if (typeof copy !== 'undefined') {\n\t\t\t\t\t\tsetProperty(target, { name: name, newValue: copy });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n", "'use strict';\n\nconst emptyString = '';\n\n/**\n@private\n*/\nclass StringScanner {\n  /**\n  @param {string} string\n  */\n  constructor(string) {\n    /** @type {string[]} */\n    this.chars = [ ...string ];\n\n    /** @type {number} */\n    this.charCount = this.chars.length;\n\n    /** @type {number} */\n    this.charIndex = 0;\n\n    /** @type {number[]} */\n    this.charsToBytes = new Array(this.charCount);\n\n    /** @type {boolean} */\n    this.multiByteMode = false;\n\n    /** @type {string} */\n    this.string = string;\n\n    let { chars, charCount, charsToBytes } = this;\n\n    if (charCount === string.length) {\n      // There are no multibyte characters in the input string, so char indexes\n      // and byte indexes are the same.\n      for (let i = 0; i < charCount; ++i) {\n        charsToBytes[i] = i;\n      }\n    } else {\n      // Create a mapping of character indexes to byte indexes. When the string\n      // contains multibyte characters, a byte index may not necessarily align\n      // with a character index.\n      for (let byteIndex = 0, charIndex = 0; charIndex < charCount; ++charIndex) {\n        charsToBytes[charIndex] = byteIndex;\n        byteIndex += chars[charIndex].length;\n      }\n\n      this.multiByteMode = true;\n    }\n  }\n\n  /**\n  Whether the current character index is at the end of the input string.\n\n  @type {boolean}\n  */\n  get isEnd() {\n    return this.charIndex >= this.charCount;\n  }\n\n  // -- Protected Methods ------------------------------------------------------\n\n  /**\n  Returns the number of characters in the given _string_, which may differ from\n  the byte length if the string contains multibyte characters.\n\n  @param {string} string\n  @returns {number}\n  */\n  _charLength(string) {\n    let { length } = string;\n\n    if (length < 2 || !this.multiByteMode) {\n      return length;\n    }\n\n    // We could get the char length with `[ ...string ].length`, but that's\n    // actually slower than this approach, which replaces surrogate pairs with\n    // single-byte characters.\n    return string.replace(/[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g, '_').length;\n  }\n\n  // -- Public Methods ---------------------------------------------------------\n\n  /**\n  Advances the scanner by the given number of characters, stopping if the end of\n  the string is reached.\n\n  @param {number} [count]\n  */\n  advance(count = 1) {\n    this.charIndex = Math.min(this.charCount, this.charIndex + count);\n  }\n\n  /**\n  Consumes and returns the given number of characters if possible, advancing the\n  scanner and stopping if the end of the string is reached.\n\n  If no characters could be consumed, an empty string will be returned.\n\n  @param {number} [count]\n  @returns {string}\n  */\n  consume(count = 1) {\n    let chars = this.peek(count);\n    this.advance(count);\n    return chars;\n  }\n\n  /**\n  Consumes a match for the given sticky regex, advances the scanner, updates the\n  `lastIndex` property of the regex, and returns the matching string.\n\n  The regex must have a sticky flag (\"y\") so that its `lastIndex` prop can be\n  used to anchor the match at the current scanner position.\n\n  Returns the consumed string, or an empty string if nothing was consumed.\n\n  @param {RegExp} regex\n  @returns {string}\n  */\n  consumeMatch(regex) {\n    if (!regex.sticky) {\n      throw new Error('`regex` must have a sticky flag (\"y\")');\n    }\n\n    regex.lastIndex = this.charsToBytes[this.charIndex];\n\n    let result = regex.exec(this.string);\n\n    if (result === null) {\n      return emptyString;\n    }\n\n    let match = result[0];\n    this.advance(this._charLength(match));\n    return match;\n  }\n\n  /**\n  Consumes and returns all characters for which the given function returns a\n  truthy value, stopping on the first falsy return value or if the end of the\n  input is reached.\n\n  @param {(char: string) => boolean} fn\n  @returns {string}\n  */\n  consumeMatchFn(fn) {\n    let startIndex = this.charIndex;\n\n    while (!this.isEnd && fn(this.peek())) {\n      this.advance();\n    }\n\n    return this.charIndex > startIndex\n      ? this.string.slice(this.charsToBytes[startIndex], this.charsToBytes[this.charIndex])\n      : emptyString;\n  }\n\n  /**\n  Consumes the given string if it exists at the current character index, and\n  advances the scanner.\n\n  If the given string doesn't exist at the current character index, an empty\n  string will be returned and the scanner will not be advanced.\n\n  @param {string} stringToConsume\n  @returns {string}\n  */\n  consumeString(stringToConsume) {\n    if (this.consumeStringFast(stringToConsume)) {\n      return stringToConsume;\n    }\n\n    if (!this.multiByteMode) {\n      return emptyString;\n    }\n\n    let { length } = stringToConsume;\n    let charLengthToMatch = this._charLength(stringToConsume);\n\n    if (charLengthToMatch !== length\n        && stringToConsume === this.peek(charLengthToMatch)) {\n\n      this.advance(charLengthToMatch);\n      return stringToConsume;\n    }\n\n    return emptyString;\n  }\n\n  /**\n   * Does the same thing as `consumeString()`, but doesn't support consuming\n   * multibyte characters. This can be much faster if you only need to match\n   * single byte characters.\n   *\n   * @param {string} stringToConsume\n   * @returns {string}\n   */\n  consumeStringFast(stringToConsume) {\n    if (this.peek() === stringToConsume[0]) {\n      let { length } = stringToConsume;\n\n      if (length === 1) {\n        this.advance();\n        return stringToConsume;\n      }\n\n      if (this.peek(length) === stringToConsume) {\n        this.advance(length);\n        return stringToConsume;\n      }\n    }\n\n    return emptyString;\n  }\n\n  /**\n  Consumes characters until the given global regex is matched, advancing the\n  scanner up to (but not beyond) the beginning of the match and updating the\n  `lastIndex` property of the regex.\n\n  The regex must have a global flag (\"g\") so that its `lastIndex` prop can be\n  used to begin the search at the current scanner position.\n\n  Returns the consumed string, or an empty string if nothing was consumed.\n\n  @param {RegExp} regex\n  @returns {string}\n  */\n  consumeUntilMatch(regex) {\n    if (!regex.global) {\n      throw new Error('`regex` must have a global flag (\"g\")');\n    }\n\n    let byteIndex = this.charsToBytes[this.charIndex];\n    regex.lastIndex = byteIndex;\n\n    let match = regex.exec(this.string);\n\n    if (match === null || match.index === byteIndex) {\n      return emptyString;\n    }\n\n    let result = this.string.slice(byteIndex, match.index);\n    this.advance(this._charLength(result));\n    return result;\n  }\n\n  /**\n  Consumes characters until the given string is found, advancing the scanner up\n  to (but not beyond) that point.\n\n  Returns the consumed string, or an empty string if nothing was consumed.\n\n  @param {string} searchString\n  @returns {string}\n  */\n  consumeUntilString(searchString) {\n    let { charIndex, charsToBytes, string } = this;\n    let byteIndex = charsToBytes[charIndex];\n    let matchByteIndex = string.indexOf(searchString, byteIndex);\n\n    if (matchByteIndex <= 0) {\n      return emptyString;\n    }\n\n    let result = string.slice(byteIndex, matchByteIndex);\n    this.advance(this._charLength(result));\n    return result;\n  }\n\n  /**\n  Returns the given number of characters starting at the current character\n  index, without advancing the scanner and without exceeding the end of the\n  input string.\n\n  @param {number} [count]\n  @returns {string}\n  */\n  peek(count = 1) {\n    // Inlining this comparison instead of checking `this.isEnd` improves perf\n    // slightly since `peek()` is called so frequently.\n    if (this.charIndex >= this.charCount) {\n      return emptyString;\n    }\n\n    if (count === 1) {\n      return this.chars[this.charIndex];\n    }\n\n    let { charsToBytes, charIndex } = this;\n    return this.string.slice(charsToBytes[charIndex], charsToBytes[charIndex + count]);\n  }\n\n  /**\n  Resets the scanner position to the given character _index_, or to the start of\n  the input string if no index is given.\n\n  If _index_ is negative, the scanner position will be moved backward by that\n  many characters, stopping if the beginning of the string is reached.\n\n  @param {number} [index]\n  */\n  reset(index = 0) {\n    this.charIndex = index >= 0\n      ? Math.min(this.charCount, index)\n      : Math.max(0, this.charIndex + index);\n  }\n}\n\nmodule.exports = StringScanner;\n", "'use strict';\n\n// -- Exported Constants -------------------------------------------------------\n\n/**\nMapping of predefined entity names to their replacement values.\n\n@type {Readonly<{[name: string]: string}>}\n@see https://www.w3.org/TR/2008/REC-xml-20081126/#sec-predefined-ent\n*/\nconst predefinedEntities = Object.freeze(Object.assign(Object.create(null), {\n  amp: '&',\n  apos: \"'\",\n  gt: '>',\n  lt: '<',\n  quot: '\"'\n}));\n\nexports.predefinedEntities = predefinedEntities;\n\n// -- Exported Functions -------------------------------------------------------\n\n/**\nReturns `true` if _char_ is an XML `NameChar`, `false` if it isn't.\n\n@param {string} char\n@returns {boolean}\n@see https://www.w3.org/TR/2008/REC-xml-20081126/#NT-NameChar\n*/\nfunction isNameChar(char) {\n  if (isNameStartChar(char)) {\n    return true;\n  }\n\n  let cp = getCodePoint(char);\n\n  return cp === 0x2D // -\n    || cp === 0x2E // .\n    || (cp >= 0x30 && cp <= 0x39) // 0-9\n    || cp === 0xB7\n    || (cp >= 0x300 && cp <= 0x36F)\n    || (cp >= 0x203F && cp <= 0x2040);\n}\n\nexports.isNameChar = isNameChar;\n\n/**\nReturns `true` if _char_ is an XML `NameStartChar`, `false` if it isn't.\n\n@param {string} char\n@returns {boolean}\n@see https://www.w3.org/TR/2008/REC-xml-20081126/#NT-NameStartChar\n*/\nfunction isNameStartChar(char) {\n  let cp = getCodePoint(char);\n\n  return cp === 0x3A // :\n    || cp === 0x5F // _\n    || (cp >= 0x41 && cp <= 0x5A) // A-Z\n    || (cp >= 0x61 && cp <= 0x7A) // a-z\n    || (cp >= 0xC0 && cp <= 0xD6)\n    || (cp >= 0xD8 && cp <= 0xF6)\n    || (cp >= 0xF8 && cp <= 0x2FF)\n    || (cp >= 0x370 && cp <= 0x37D)\n    || (cp >= 0x37F && cp <= 0x1FFF)\n    || (cp >= 0x200C && cp <= 0x200D)\n    || (cp >= 0x2070 && cp <= 0x218F)\n    || (cp >= 0x2C00 && cp <= 0x2FEF)\n    || (cp >= 0x3001 && cp <= 0xD7FF)\n    || (cp >= 0xF900 && cp <= 0xFDCF)\n    || (cp >= 0xFDF0 && cp <= 0xFFFD)\n    || (cp >= 0x10000 && cp <= 0xEFFFF);\n}\n\nexports.isNameStartChar = isNameStartChar;\n\n/**\nReturns `true` if _char_ is not a valid XML `Char`, `false` otherwise.\n\n@param {string} char\n@returns {boolean}\n@see https://www.w3.org/TR/2008/REC-xml-20081126/#NT-Char\n*/\nfunction isNotXmlChar(char) {\n  return !isXmlChar(char);\n}\n\nexports.isNotXmlChar = isNotXmlChar;\n\n/**\nReturns `true` if _char_ is a valid reference character (which may appear\nbetween `&` and `;` in a reference), `false` otherwise.\n\n@param {string} char\n@returns {boolean}\n@see https://www.w3.org/TR/2008/REC-xml-20081126/#sec-references\n*/\nfunction isReferenceChar(char) {\n  return char === '#' || isNameChar(char);\n}\n\nexports.isReferenceChar = isReferenceChar;\n\n/**\nReturns `true` if _char_ is an XML whitespace character, `false` otherwise.\n\n@param {string} char\n@returns {boolean}\n@see https://www.w3.org/TR/2008/REC-xml-20081126/#white\n*/\nfunction isWhitespace(char) {\n  let cp = getCodePoint(char);\n\n  return cp === 0x20\n    || cp === 0x9\n    || cp === 0xA\n    || cp === 0xD;\n}\n\nexports.isWhitespace = isWhitespace;\n\n/**\nReturns `true` if _char_ is a valid XML `Char`, `false` otherwise.\n\n@param {string} char\n@returns {boolean}\n@see https://www.w3.org/TR/2008/REC-xml-20081126/#NT-Char\n*/\nfunction isXmlChar(char) {\n  let cp = getCodePoint(char);\n\n  return cp === 0x9\n    || cp === 0xA\n    || cp === 0xD\n    || (cp >= 0x20 && cp <= 0xD7FF)\n    || (cp >= 0xE000 && cp <= 0xFFFD)\n    || (cp >= 0x10000 && cp <= 0x10FFFF);\n}\n\nexports.isXmlChar = isXmlChar;\n\n// -- Private Functions --------------------------------------------------------\n\n/**\nReturns the Unicode code point value of the given character, or `-1` if _char_\nis empty.\n\n@param {string} char\n@returns {number}\n*/\nfunction getCodePoint(char) {\n  return char.codePointAt(0) || -1;\n}\n", "'use strict';\n\n/**\nBase interface for a node in an XML document.\n\n@public\n*/\nclass XmlNode {\n  constructor() {\n    /**\n    Parent node of this node, or `null` if this node has no parent.\n\n    @type {XmlDocument|XmlElement|null}\n    @public\n    */\n    this.parent = null;\n  }\n\n  /**\n  Document that contains this node, or `null` if this node is not associated\n  with a document.\n\n  @type {XmlDocument?}\n  @public\n  */\n  get document() {\n    return this.parent\n      ? this.parent.document\n      : null;\n  }\n\n  /**\n  Whether this node is the root node of the document.\n\n  @returns {boolean}\n  @public\n  */\n  get isRootNode() {\n    return this.parent\n      ? this.parent === this.document\n      : false;\n  }\n\n  /**\n  Whether whitespace should be preserved in the content of this element and\n  its children.\n\n  This is influenced by the value of the special `xml:space` attribute, and\n  will be `true` for any node whose `xml:space` attribute is set to\n  \"preserve\". If a node has no such attribute, it will inherit the value of\n  the nearest ancestor that does (if any).\n\n  @type {boolean}\n  @see https://www.w3.org/TR/2008/REC-xml-20081126/#sec-white-space\n  @public\n  */\n  get preserveWhitespace() {\n    return Boolean(this.parent && this.parent.preserveWhitespace);\n  }\n\n  /**\n  Type of this node.\n\n  The value of this property is a string that matches one of the static `TYPE_*`\n  properties on the `XmlNode` class (e.g. `TYPE_ELEMENT`, `TYPE_TEXT`, etc.).\n\n  The `XmlNode` class itself is a base class and doesn't have its own type name.\n\n  @type {string}\n  @public\n  */\n  get type() {\n    return '';\n  }\n\n  /**\n  Returns a JSON-serializable object representing this node, minus properties\n  that could result in circular references.\n\n  @returns {{[key: string]: any}}\n  @public\n  */\n  toJSON() {\n    /** @type {{[key: string]: any}} */\n    let json = {\n      type: this.type\n    };\n\n    if (this.isRootNode) {\n      json.isRootNode = true;\n    }\n\n    if (this.preserveWhitespace) {\n      json.preserveWhitespace = true;\n    }\n\n    return json;\n  }\n}\n\n/**\nType value for an `XmlCdata` node.\n\n@type {string}\n@public\n*/\nXmlNode.TYPE_CDATA = 'cdata';\n\n/**\nType value for an `XmlComment` node.\n\n@type {string}\n@public\n*/\nXmlNode.TYPE_COMMENT = 'comment';\n\n/**\nType value for an `XmlDocument` node.\n\n@type {string}\n@public\n*/\nXmlNode.TYPE_DOCUMENT = 'document';\n\n/**\nType value for an `XmlElement` node.\n\n@type {string}\n@public\n*/\nXmlNode.TYPE_ELEMENT = 'element';\n\n/**\nType value for an `XmlProcessingInstruction` node.\n\n@type {string}\n@public\n*/\nXmlNode.TYPE_PROCESSING_INSTRUCTION = 'pi';\n\n/**\nType value for an `XmlText` node.\n\n@type {string}\n@public\n*/\nXmlNode.TYPE_TEXT = 'text';\n\nmodule.exports = XmlNode;\n\n/** @typedef {import('./XmlDocument')} XmlDocument */\n/** @typedef {import('./XmlElement')} XmlElement */\n", "'use strict';\n\nconst XmlNode = require('./XmlNode');\n\n/**\nText content within an XML document.\n\n@public\n*/\nclass XmlText extends XmlNode {\n  /**\n  @param {string} [text]\n  */\n  constructor(text = '') {\n    super();\n\n    /**\n    Text content of this node.\n\n    @type {string}\n    @public\n    */\n    this.text = text;\n  }\n\n  get type() {\n    return XmlNode.TYPE_TEXT;\n  }\n\n  toJSON() {\n    return Object.assign(XmlNode.prototype.toJSON.call(this), {\n      text: this.text\n    });\n  }\n}\n\nmodule.exports = XmlText;\n", "'use strict';\n\nconst XmlNode = require('./XmlNode');\nconst XmlText = require('./XmlText');\n\n/**\nA CDATA section within an XML document.\n\n@public\n*/\nclass XmlCdata extends XmlText {\n  get type() {\n    return XmlNode.TYPE_CDATA;\n  }\n}\n\nmodule.exports = XmlCdata;\n", "'use strict';\n\nconst XmlNode = require('./XmlNode');\n\n/**\nA comment within an XML document.\n\n@public\n*/\nclass XmlComment extends XmlNode {\n  /**\n  @param {string} [content]\n  */\n  constructor(content = '') {\n    super();\n\n    /**\n    Content of this comment.\n\n    @type {string}\n    @public\n    */\n    this.content = content;\n  }\n\n  get type() {\n    return XmlNode.TYPE_COMMENT;\n  }\n\n  toJSON() {\n    return Object.assign(XmlNode.prototype.toJSON.call(this), {\n      content: this.content\n    });\n  }\n}\n\nmodule.exports = XmlComment;\n", "'use strict';\n\nconst XmlNode = require('./XmlNode');\n\n/**\nElement in an XML document.\n\n@public\n*/\nclass XmlElement extends XmlNode {\n  /**\n  @param {string} name\n  @param {{[attrName: string]: string}} [attributes]\n  @param {Array<XmlCdata|XmlComment|XmlElement|XmlProcessingInstruction|XmlText>} [children]\n  */\n  constructor(name, attributes = Object.create(null), children = []) {\n    super();\n\n    /**\n    Name of this element.\n\n    @type {string}\n    @public\n    */\n    this.name = name;\n\n    /**\n    Attributes on this element.\n\n    @type {{[attrName: string]: string}}\n    @public\n    */\n    this.attributes = attributes;\n\n    /**\n    Child nodes of this element.\n\n    @type {Array<XmlCdata|XmlComment|XmlElement|XmlProcessingInstruction|XmlText>}\n    @public\n    */\n    this.children = children;\n  }\n\n  /**\n  Whether this node is empty (meaning it has no children).\n\n  @type {boolean}\n  @public\n  */\n  get isEmpty() {\n    return this.children.length === 0;\n  }\n\n  /** @type {boolean} */\n  get preserveWhitespace() {\n    /** @type {XmlNode?} */\n    let node = this;\n\n    while (node instanceof XmlElement) {\n      if ('xml:space' in node.attributes) {\n        return node.attributes['xml:space'] === 'preserve';\n      }\n\n      node = node.parent;\n    }\n\n    return false;\n  }\n\n  /**\n  Text content of this element and all its descendants.\n\n  @type {string}\n  @public\n  */\n  get text() {\n    return this.children\n      .map(child => 'text' in child ? child.text : '')\n      .join('');\n  }\n\n  get type() {\n    return XmlNode.TYPE_ELEMENT;\n  }\n\n  /** @returns {{[key: string]: any}} */\n  toJSON() {\n    return Object.assign(XmlNode.prototype.toJSON.call(this), {\n      name: this.name,\n      attributes: this.attributes,\n      children: this.children.map(child => child.toJSON()),\n    });\n  }\n}\n\nmodule.exports = XmlElement;\n\n/** @typedef {import('./XmlCdata')} XmlCdata */\n/** @typedef {import('./XmlComment')} XmlComment */\n/** @typedef {import('./XmlProcessingInstruction')} XmlProcessingInstruction */\n/** @typedef {import('./XmlText')} XmlText */\n", "'use strict';\n\nconst XmlElement = require('./XmlElement');\nconst XmlNode = require('./XmlNode');\n\n/**\nRepresents an XML document. All elements within the document are descendants of\nthis node.\n\n@public\n*/\nclass XmlDocument extends XmlNode {\n  /**\n  @param {Array<XmlComment|XmlElement|XmlProcessingInstruction>} [children]\n  */\n  constructor(children = []) {\n    super();\n\n    /**\n    Child nodes of this document.\n\n    @type {Array<XmlComment|XmlElement|XmlProcessingInstruction>}\n    @public\n    */\n    this.children = children;\n  }\n\n  get document() {\n    return this;\n  }\n\n  /**\n  Root element of this document, or `null` if this document is empty.\n\n  @type {XmlElement?}\n  @public\n  */\n  get root() {\n    // @ts-ignore\n    return this.children.find((child) => child instanceof XmlElement) || null;\n  }\n\n  /**\n  Text content of this document and all its descendants.\n\n  @type {string}\n  @public\n  */\n  get text() {\n    return this.children\n      .map(child => 'text' in child ? child.text : '')\n      .join('');\n  }\n\n  get type() {\n    return XmlNode.TYPE_DOCUMENT;\n  }\n\n  toJSON() {\n    return Object.assign(XmlNode.prototype.toJSON.call(this), {\n      children: this.children.map(child => child.toJSON()),\n    });\n  }\n}\n\nmodule.exports = XmlDocument;\n\n/** @typedef {import('./XmlComment')} XmlComment */\n/** @typedef {import('./XmlProcessingInstruction')} XmlProcessingInstruction */\n", "'use strict';\n\nconst XmlNode = require('./XmlNode');\n\n/**\nA processing instruction within an XML document.\n\n@public\n*/\nclass XmlProcessingInstruction extends XmlNode {\n  /**\n  @param {string} name\n  @param {string} [content]\n  */\n  constructor(name, content = '') {\n    super();\n\n    /**\n    Name of this processing instruction. Also sometimes referred to as the\n    processing instruction \"target\".\n\n    @type {string}\n    @public\n    */\n    this.name = name;\n\n    /**\n    Content of this processing instruction.\n\n    @type {string}\n    @public\n    */\n    this.content = content;\n  }\n\n  get type() {\n    return XmlNode.TYPE_PROCESSING_INSTRUCTION;\n  }\n\n  toJSON() {\n    return Object.assign(XmlNode.prototype.toJSON.call(this), {\n      name: this.name,\n      content: this.content\n    });\n  }\n}\n\nmodule.exports = XmlProcessingInstruction;\n", "'use strict';\n\nconst StringScanner = require('./StringScanner');\nconst syntax = require('./syntax');\nconst XmlCdata = require('./XmlCdata');\nconst XmlComment = require('./XmlComment');\nconst XmlDocument = require('./XmlDocument');\nconst XmlElement = require('./XmlElement');\nconst XmlProcessingInstruction = require('./XmlProcessingInstruction');\nconst XmlText = require('./XmlText');\n\nconst emptyString = '';\n\n/**\nParses an XML string into an `XmlDocument`.\n\n@private\n*/\nclass Parser {\n  /**\n  @param {string} xml\n    XML string to parse.\n\n  @param {object} [options]\n    Parsing options.\n\n    @param {boolean} [options.ignoreUndefinedEntities=false]\n    @param {boolean} [options.preserveCdata=false]\n    @param {boolean} [options.preserveComments=false]\n    @param {(entity: string) => string?} [options.resolveUndefinedEntity]\n    @param {boolean} [options.sortAttributes=false]\n  */\n  constructor(xml, options = {}) {\n    /** @type {XmlDocument} */\n    this.document = new XmlDocument();\n\n    /** @type {XmlDocument|XmlElement} */\n    this.currentNode = this.document;\n\n    this.options = options;\n    this.scanner = new StringScanner(normalizeXmlString(xml));\n\n    this.consumeProlog();\n\n    if (!this.consumeElement()) {\n      this.error('Root element is missing or invalid');\n    }\n\n    while (this.consumeMisc()) {} // eslint-disable-line no-empty\n\n    if (!this.scanner.isEnd) {\n      this.error('Extra content at the end of the document');\n    }\n  }\n\n  /**\n  Adds the given `XmlNode` as a child of `this.currentNode`.\n\n  @param {XmlNode} node\n  */\n  addNode(node) {\n    node.parent = this.currentNode;\n\n    // @ts-ignore\n    this.currentNode.children.push(node);\n  }\n\n  /**\n  Adds the given _text_ to the document, either by appending it to a preceding\n  `XmlText` node (if possible) or by creating a new `XmlText` node.\n\n  @param {string} text\n  */\n  addText(text) {\n    let { children } = this.currentNode;\n\n    if (children.length > 0) {\n      let prevNode = children[children.length - 1];\n\n      if (prevNode instanceof XmlText) {\n        // The previous node is a text node, so we can append to it and avoid\n        // creating another node.\n        prevNode.text += text;\n        return;\n      }\n    }\n\n    this.addNode(new XmlText(text));\n  }\n\n  /**\n  Consumes an `AttValue` (attribute value) if possible.\n\n  @returns {string|false}\n    Contents of the `AttValue` minus quotes, or `false` if nothing was consumed.\n    An empty string indicates that an `AttValue` was consumed but was empty.\n\n  @see https://www.w3.org/TR/2008/REC-xml-20081126/#NT-AttValue\n  */\n  consumeAttributeValue() {\n    let { scanner } = this;\n    let quote = scanner.peek();\n\n    if (quote !== '\"' && quote !== \"'\") {\n      return false;\n    }\n\n    scanner.advance();\n\n    let chars;\n    let isClosed = false;\n    let value = emptyString;\n    let regex = quote === '\"'\n      ? /[^\"&<]+/y\n      : /[^'&<]+/y;\n\n    matchLoop: while (!scanner.isEnd) {\n      chars = scanner.consumeMatch(regex);\n\n      if (chars) {\n        this.validateChars(chars);\n        value += chars.replace(/[\\t\\r\\n]/g, ' ');\n      }\n\n      let nextChar = scanner.peek();\n\n      switch (nextChar) {\n        case quote:\n          isClosed = true;\n          break matchLoop;\n\n        case '&':\n          value += this.consumeReference();\n          continue;\n\n        case '<':\n          this.error('Unescaped `<` is not allowed in an attribute value'); /* istanbul ignore next */\n          break;\n\n        case emptyString:\n          this.error('Unclosed attribute'); /* istanbul ignore next */\n          break;\n\n      }\n    }\n\n    if (!isClosed) {\n      this.error('Unclosed attribute');\n    }\n\n    scanner.advance();\n    return value;\n  }\n\n  /**\n  Consumes a CDATA section if possible.\n\n  @returns {boolean}\n    Whether a CDATA section was consumed.\n\n  @see https://www.w3.org/TR/2008/REC-xml-20081126/#sec-cdata-sect\n  */\n  consumeCdataSection() {\n    let { scanner } = this;\n\n    if (!scanner.consumeStringFast('<![CDATA[')) {\n      return false;\n    }\n\n    let text = scanner.consumeUntilString(']]>');\n    this.validateChars(text);\n\n    if (!scanner.consumeStringFast(']]>')) {\n      this.error('Unclosed CDATA section');\n    }\n\n    if (this.options.preserveCdata) {\n      this.addNode(new XmlCdata(text));\n    } else {\n      this.addText(text);\n    }\n\n    return true;\n  }\n\n  /**\n  Consumes character data if possible.\n\n  @returns {boolean}\n    Whether character data was consumed.\n\n  @see https://www.w3.org/TR/2008/REC-xml-20081126/#dt-chardata\n  */\n  consumeCharData() {\n    let { scanner } = this;\n    let charData = scanner.consumeUntilMatch(/<|&|]]>/g);\n\n    if (!charData) {\n      return false;\n    }\n\n    this.validateChars(charData);\n\n    if (scanner.peek() === ']' && scanner.peek(3) === ']]>') {\n      this.error('Element content may not contain the CDATA section close delimiter `]]>`');\n    }\n\n    this.addText(charData);\n    return true;\n  }\n\n  /**\n  Consumes a comment if possible.\n\n  @returns {boolean}\n    Whether a comment was consumed.\n\n  @see https://www.w3.org/TR/2008/REC-xml-20081126/#NT-Comment\n  */\n  consumeComment() {\n    let { scanner } = this;\n\n    if (!scanner.consumeStringFast('<!--')) {\n      return false;\n    }\n\n    let content = scanner.consumeUntilString('--');\n    this.validateChars(content);\n\n    if (!scanner.consumeStringFast('-->')) {\n      if (scanner.peek(2) === '--') {\n        this.error(\"The string `--` isn't allowed inside a comment\");\n      } else {\n        this.error('Unclosed comment');\n      }\n    }\n\n    if (this.options.preserveComments) {\n      this.addNode(new XmlComment(content.trim()));\n    }\n\n    return true;\n  }\n\n  /**\n  Consumes a reference in a content context if possible.\n\n  This differs from `consumeReference()` in that a consumed reference will be\n  added to the document as a text node instead of returned.\n\n  @returns {boolean}\n    Whether a reference was consumed.\n\n  @see https://www.w3.org/TR/2008/REC-xml-20081126/#entproc\n  */\n  consumeContentReference() {\n    let ref = this.consumeReference();\n\n    if (ref) {\n      this.addText(ref);\n      return true;\n    }\n\n    return false;\n  }\n\n  /**\n  Consumes a doctype declaration if possible.\n\n  This is a loose implementation since doctype declarations are currently\n  discarded without further parsing.\n\n  @returns {boolean}\n    Whether a doctype declaration was consumed.\n\n  @see https://www.w3.org/TR/2008/REC-xml-20081126/#dtd\n  */\n  consumeDoctypeDeclaration() {\n    let { scanner } = this;\n\n    if (!scanner.consumeStringFast('<!DOCTYPE')\n        || !this.consumeWhitespace()) {\n\n      return false;\n    }\n\n    scanner.consumeMatch(/[^[>]+/y);\n\n    if (scanner.consumeMatch(/\\[[\\s\\S]+?\\][\\x20\\t\\r\\n]*>/y)) {\n      return true;\n    }\n\n    if (!scanner.consumeStringFast('>')) {\n      this.error('Unclosed doctype declaration');\n    }\n\n    return true;\n  }\n\n  /**\n  Consumes an element if possible.\n\n  @returns {boolean}\n    Whether an element was consumed.\n\n  @see https://www.w3.org/TR/2008/REC-xml-20081126/#NT-element\n  */\n  consumeElement() {\n    let { scanner } = this;\n    let mark = scanner.charIndex;\n\n    if (scanner.peek() !== '<') {\n      return false;\n    }\n\n    scanner.advance();\n    let name = this.consumeName();\n\n    if (!name) {\n      scanner.reset(mark);\n      return false;\n    }\n\n    let attributes = Object.create(null);\n\n    while (this.consumeWhitespace()) {\n      let attrName = this.consumeName();\n\n      if (!attrName) {\n        continue;\n      }\n\n      let attrValue = this.consumeEqual()\n        && this.consumeAttributeValue();\n\n      if (attrValue === false) {\n        this.error('Attribute value expected');\n      }\n\n      if (attrName in attributes) {\n        this.error(`Duplicate attribute: ${attrName}`);\n      }\n\n      if (attrName === 'xml:space'\n          && attrValue !== 'default'\n          && attrValue !== 'preserve') {\n\n        this.error('Value of the `xml:space` attribute must be \"default\" or \"preserve\"');\n      }\n\n      attributes[attrName] = attrValue;\n    }\n\n    if (this.options.sortAttributes) {\n      let attrNames = Object.keys(attributes).sort();\n      let sortedAttributes = Object.create(null);\n\n      for (let i = 0; i < attrNames.length; ++i) {\n        let attrName = attrNames[i];\n        sortedAttributes[attrName] = attributes[attrName];\n      }\n\n      attributes = sortedAttributes;\n    }\n\n    let isEmpty = Boolean(scanner.consumeStringFast('/>'));\n    let element = new XmlElement(name, attributes);\n\n    element.parent = this.currentNode;\n\n    if (!isEmpty) {\n      if (!scanner.consumeStringFast('>')) {\n        this.error(`Unclosed start tag for element \\`${name}\\``);\n      }\n\n      this.currentNode = element;\n      this.consumeCharData();\n\n      while (\n        this.consumeElement()\n          || this.consumeContentReference()\n          || this.consumeCdataSection()\n          || this.consumeProcessingInstruction()\n          || this.consumeComment()\n      ) {\n        this.consumeCharData();\n      }\n\n      let endTagMark = scanner.charIndex;\n      let endTagName;\n\n      if (!scanner.consumeStringFast('</')\n          || !(endTagName = this.consumeName())\n          || endTagName !== name) {\n\n        scanner.reset(endTagMark);\n        this.error(`Missing end tag for element ${name}`);\n      }\n\n      this.consumeWhitespace();\n\n      if (!scanner.consumeStringFast('>')) {\n        this.error(`Unclosed end tag for element ${name}`);\n      }\n\n      this.currentNode = element.parent;\n    }\n\n    this.addNode(element);\n    return true;\n  }\n\n  /**\n  Consumes an `Eq` production if possible.\n\n  @returns {boolean}\n    Whether an `Eq` production was consumed.\n\n  @see https://www.w3.org/TR/2008/REC-xml-20081126/#NT-Eq\n  */\n  consumeEqual() {\n    this.consumeWhitespace();\n\n    if (this.scanner.consumeStringFast('=')) {\n      this.consumeWhitespace();\n      return true;\n    }\n\n    return false;\n  }\n\n  /**\n  Consumes `Misc` content if possible.\n\n  @returns {boolean}\n    Whether anything was consumed.\n\n  @see https://www.w3.org/TR/2008/REC-xml-20081126/#NT-Misc\n  */\n  consumeMisc() {\n    return this.consumeComment()\n      || this.consumeProcessingInstruction()\n      || this.consumeWhitespace();\n  }\n\n  /**\n  Consumes one or more `Name` characters if possible.\n\n  @returns {string}\n    `Name` characters, or an empty string if none were consumed.\n\n  @see https://www.w3.org/TR/2008/REC-xml-20081126/#NT-Name\n  */\n  consumeName() {\n    return syntax.isNameStartChar(this.scanner.peek())\n      ? this.scanner.consumeMatchFn(syntax.isNameChar)\n      : emptyString;\n  }\n\n  /**\n  Consumes a processing instruction if possible.\n\n  @returns {boolean}\n    Whether a processing instruction was consumed.\n\n  @see https://www.w3.org/TR/2008/REC-xml-20081126/#sec-pi\n  */\n  consumeProcessingInstruction() {\n    let { scanner } = this;\n    let mark = scanner.charIndex;\n\n    if (!scanner.consumeStringFast('<?')) {\n      return false;\n    }\n\n    let name = this.consumeName();\n\n    if (name) {\n      if (name.toLowerCase() === 'xml') {\n        scanner.reset(mark);\n        this.error(\"XML declaration isn't allowed here\");\n      }\n    } else {\n      this.error('Invalid processing instruction');\n    }\n\n    if (!this.consumeWhitespace()) {\n      if (scanner.consumeStringFast('?>')) {\n        this.addNode(new XmlProcessingInstruction(name));\n        return true;\n      }\n\n      this.error('Whitespace is required after a processing instruction name');\n    }\n\n    let content = scanner.consumeUntilString('?>');\n    this.validateChars(content);\n\n    if (!scanner.consumeStringFast('?>')) {\n      this.error('Unterminated processing instruction');\n    }\n\n    this.addNode(new XmlProcessingInstruction(name, content));\n    return true;\n  }\n\n  /**\n  Consumes a prolog if possible.\n\n  @returns {boolean}\n    Whether a prolog was consumed.\n\n  @see https://www.w3.org/TR/2008/REC-xml-20081126/#sec-prolog-dtd\n  */\n  consumeProlog() {\n    let { scanner } = this;\n    let mark = scanner.charIndex;\n\n    this.consumeXmlDeclaration();\n\n    while (this.consumeMisc()) {} // eslint-disable-line no-empty\n\n    if (this.consumeDoctypeDeclaration()) {\n      while (this.consumeMisc()) {} // eslint-disable-line no-empty\n    }\n\n    return mark < scanner.charIndex;\n  }\n\n  /**\n  Consumes a reference if possible.\n\n  This differs from `consumeContentReference()` in that a consumed reference\n  will be returned rather than added to the document.\n\n  @returns {string|false}\n    Parsed reference value, or `false` if nothing was consumed (to distinguish\n    from a reference that resolves to an empty string).\n\n  @see https://www.w3.org/TR/2008/REC-xml-20081126/#NT-Reference\n  */\n  consumeReference() {\n    let { scanner } = this;\n\n    if (scanner.peek() !== '&') {\n      return false;\n    }\n\n    scanner.advance();\n\n    let ref = scanner.consumeMatchFn(syntax.isReferenceChar);\n\n    if (scanner.consume() !== ';') {\n      this.error('Unterminated reference (a reference must end with `;`)');\n    }\n\n    let parsedValue;\n\n    if (ref[0] === '#') {\n      // This is a character reference.\n      let codePoint = ref[1] === 'x'\n        ? parseInt(ref.slice(2), 16) // Hex codepoint.\n        : parseInt(ref.slice(1), 10); // Decimal codepoint.\n\n      if (isNaN(codePoint)) {\n        this.error('Invalid character reference');\n      }\n\n      parsedValue = String.fromCodePoint(codePoint);\n\n      if (!syntax.isXmlChar(parsedValue)) {\n        this.error('Character reference resolves to an invalid character');\n      }\n    } else {\n      // This is an entity reference.\n      parsedValue = syntax.predefinedEntities[ref];\n\n      if (parsedValue === undefined) {\n        let {\n          ignoreUndefinedEntities,\n          resolveUndefinedEntity\n        } = this.options;\n\n        let wrappedRef = `&${ref};`; // for backcompat with <= 2.x\n\n        if (resolveUndefinedEntity) {\n          let resolvedValue = resolveUndefinedEntity(wrappedRef);\n\n          if (resolvedValue !== null && resolvedValue !== undefined) {\n            let type = typeof resolvedValue;\n\n            if (type !== 'string') {\n              throw new TypeError(`\\`resolveUndefinedEntity()\\` must return a string, \\`null\\`, or \\`undefined\\`, but returned a value of type ${type}`);\n            }\n\n            return resolvedValue;\n          }\n        }\n\n        if (ignoreUndefinedEntities) {\n          return wrappedRef;\n        }\n\n        scanner.reset(-wrappedRef.length);\n        this.error(`Named entity isn't defined: ${wrappedRef}`);\n      }\n    }\n\n    return parsedValue;\n  }\n\n  /**\n  Consumes a `SystemLiteral` if possible.\n\n  A `SystemLiteral` is similar to an attribute value, but allows the characters\n  `<` and `&` and doesn't replace references.\n\n  @returns {string|false}\n    Value of the `SystemLiteral` minus quotes, or `false` if nothing was\n    consumed. An empty string indicates that a `SystemLiteral` was consumed but\n    was empty.\n\n  @see https://www.w3.org/TR/2008/REC-xml-20081126/#NT-SystemLiteral\n  */\n  consumeSystemLiteral() {\n    let { scanner } = this;\n    let quote = scanner.consumeStringFast('\"') || scanner.consumeStringFast(\"'\");\n\n    if (!quote) {\n      return false;\n    }\n\n    let value = scanner.consumeUntilString(quote);\n    this.validateChars(value);\n\n    if (!scanner.consumeStringFast(quote)) {\n      this.error('Missing end quote');\n    }\n\n    return value;\n  }\n\n  /**\n  Consumes one or more whitespace characters if possible.\n\n  @returns {boolean}\n    Whether any whitespace characters were consumed.\n\n  @see https://www.w3.org/TR/2008/REC-xml-20081126/#white\n  */\n  consumeWhitespace() {\n    return Boolean(this.scanner.consumeMatchFn(syntax.isWhitespace));\n  }\n\n  /**\n  Consumes an XML declaration if possible.\n\n  @returns {boolean}\n    Whether an XML declaration was consumed.\n\n  @see https://www.w3.org/TR/2008/REC-xml-20081126/#NT-XMLDecl\n  */\n  consumeXmlDeclaration() {\n    let { scanner } = this;\n\n    if (!scanner.consumeStringFast('<?xml')) {\n      return false;\n    }\n\n    if (!this.consumeWhitespace()) {\n      this.error('Invalid XML declaration');\n    }\n\n    let version = Boolean(scanner.consumeStringFast('version'))\n      && this.consumeEqual()\n      && this.consumeSystemLiteral();\n\n    if (version === false) {\n      this.error('XML version is missing or invalid');\n    } else if (!/^1\\.[0-9]+$/.test(version)) {\n      this.error('Invalid character in version number');\n    }\n\n    if (this.consumeWhitespace()) {\n      let encoding = Boolean(scanner.consumeStringFast('encoding'))\n        && this.consumeEqual()\n        && this.consumeSystemLiteral();\n\n      if (encoding) {\n        this.consumeWhitespace();\n      }\n\n      let standalone = Boolean(scanner.consumeStringFast('standalone'))\n        && this.consumeEqual()\n        && this.consumeSystemLiteral();\n\n      if (standalone) {\n        if (standalone !== 'yes' && standalone !== 'no') {\n          this.error('Only \"yes\" and \"no\" are permitted as values of `standalone`');\n        }\n\n        this.consumeWhitespace();\n      }\n    }\n\n    if (!scanner.consumeStringFast('?>')) {\n      this.error('Invalid or unclosed XML declaration');\n    }\n\n    return true;\n  }\n\n  /**\n  Throws an error at the current scanner position.\n\n  @param {string} message\n  */\n  error(message) {\n    let { charIndex, string: xml } = this.scanner;\n    let column = 1;\n    let excerpt = '';\n    let line = 1;\n\n    // Find the line and column where the error occurred.\n    for (let i = 0; i < charIndex; ++i) {\n      let char = xml[i];\n\n      if (char === '\\n') {\n        column = 1;\n        excerpt = '';\n        line += 1;\n      } else {\n        column += 1;\n        excerpt += char;\n      }\n    }\n\n    let eol = xml.indexOf('\\n', charIndex);\n\n    excerpt += eol === -1\n      ? xml.slice(charIndex)\n      : xml.slice(charIndex, eol);\n\n    let excerptStart = 0;\n\n    // Keep the excerpt below 50 chars, but always keep the error position in\n    // view.\n    if (excerpt.length > 50) {\n      if (column < 40) {\n        excerpt = excerpt.slice(0, 50);\n      } else {\n        excerptStart = column - 20;\n        excerpt = excerpt.slice(excerptStart, column + 30);\n      }\n    }\n\n    let err = new Error(\n      `${message} (line ${line}, column ${column})\\n`\n        + `  ${excerpt}\\n`\n        + ' '.repeat(column - excerptStart + 1) + '^\\n'\n    );\n\n    Object.assign(err, {\n      column,\n      excerpt,\n      line,\n      pos: charIndex\n    });\n\n    throw err;\n  }\n\n  /**\n  Throws an invalid character error if any character in the given _string_ isn't\n  a valid XML character.\n\n  @param {string} string\n  */\n  validateChars(string) {\n    let charIndex = 0;\n\n    for (let char of string) {\n      if (syntax.isNotXmlChar(char)) {\n        this.scanner.reset(-([ ...string ].length - charIndex));\n        this.error('Invalid character');\n      }\n\n      charIndex += 1;\n    }\n  }\n}\n\nmodule.exports = Parser;\n\n// -- Private Functions --------------------------------------------------------\n\n/**\nNormalizes the given XML string by stripping a byte order mark (if present) and\nreplacing CRLF sequences and lone CR characters with LF characters.\n\n@param {string} xml\n@returns {string}\n*/\nfunction normalizeXmlString(xml) {\n  if (xml[0] === '\\uFEFF') {\n    xml = xml.slice(1);\n  }\n\n  return xml.replace(/\\r\\n?/g, '\\n');\n}\n\n/** @typedef {import('./XmlNode')} XmlNode */\n", "'use strict';\n\nconst Parser = require('./lib/Parser');\nconst XmlCdata = require('./lib/XmlCdata');\nconst XmlComment = require('./lib/XmlComment');\nconst XmlDocument = require('./lib/XmlDocument');\nconst XmlElement = require('./lib/XmlElement');\nconst XmlNode = require('./lib/XmlNode');\nconst XmlProcessingInstruction = require('./lib/XmlProcessingInstruction');\nconst XmlText = require('./lib/XmlText');\n\n/**\nParses the given XML string and returns an `XmlDocument` instance representing\nthe document tree.\n\n@example\n\n  const parseXml = require('@rgrove/parse-xml');\n  let doc = parseXml('<kittens fuzzy=\"yes\">I like fuzzy kittens.</kittens>');\n\n@param {string} xml\n  XML string to parse.\n\n@param {object} [options]\n  Parsing options.\n\n  @param {boolean} [options.ignoreUndefinedEntities=false]\n    When `true`, an undefined named entity (like \"&bogus;\") will be left in the\n    output as is instead of causing a parse error.\n\n  @param {boolean} [options.preserveCdata=false]\n    When `true`, CDATA sections will be preserved in the document as `XmlCdata`\n    nodes. Otherwise CDATA sections will be represented as `XmlText` nodes,\n    which keeps the node tree simpler and easier to work with.\n\n  @param {boolean} [options.preserveComments=false]\n    When `true`, comments will be preserved in the document as `XmlComment`\n    nodes. Otherwise comments will not be included in the node tree.\n\n  @param {(entity: string) => string?} [options.resolveUndefinedEntity]\n    When an undefined named entity is encountered, this function will be called\n    with the entity as its only argument. It should return a string value with\n    which to replace the entity, or `null` or `undefined` to treat the entity as\n    undefined (which may result in a parse error depending on the value of\n    `ignoreUndefinedEntities`).\n\n  @param {boolean} [options.sortAttributes=false]\n    When `true`, attributes in an element's `attributes` object will be sorted\n    in alphanumeric order by name. Otherwise they'll retain their original order\n    as found in the XML.\n\n@returns {XmlDocument}\n@public\n*/\nfunction parseXml(xml, options) {\n  return (new Parser(xml, options)).document;\n}\n\nparseXml.XmlCdata = XmlCdata;\nparseXml.XmlComment = XmlComment;\nparseXml.XmlDocument = XmlDocument;\nparseXml.XmlElement = XmlElement;\nparseXml.XmlNode = XmlNode;\nparseXml.XmlProcessingInstruction = XmlProcessingInstruction;\nparseXml.XmlText = XmlText;\n\nmodule.exports = parseXml;\n", "module.exports = extend\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nfunction extend() {\n    var target = {}\n\n    for (var i = 0; i < arguments.length; i++) {\n        var source = arguments[i]\n\n        for (var key in source) {\n            if (hasOwnProperty.call(source, key)) {\n                target[key] = source[key]\n            }\n        }\n    }\n\n    return target\n}\n", "'use strict'\n\nmodule.exports = bail\n\nfunction bail(err) {\n  if (err) {\n    throw err\n  }\n}\n", "/*!\n * Determine if an object is a Buffer\n *\n * @author   Feross Aboukhadijeh <https://feross.org>\n * @license  MIT\n */\n\nmodule.exports = function isBuffer (obj) {\n  return obj != null && obj.constructor != null &&\n    typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)\n}\n", "'use strict';\n\nmodule.exports = value => {\n\tif (Object.prototype.toString.call(value) !== '[object Object]') {\n\t\treturn false;\n\t}\n\n\tconst prototype = Object.getPrototypeOf(value);\n\treturn prototype === null || prototype === Object.prototype;\n};\n", "'use strict'\n\nvar slice = [].slice\n\nmodule.exports = wrap\n\n// Wrap `fn`.\n// Can be sync or async; return a promise, receive a completion handler, return\n// new values and errors.\nfunction wrap(fn, callback) {\n  var invoked\n\n  return wrapped\n\n  function wrapped() {\n    var params = slice.call(arguments, 0)\n    var callback = fn.length > params.length\n    var result\n\n    if (callback) {\n      params.push(done)\n    }\n\n    try {\n      result = fn.apply(null, params)\n    } catch (error) {\n      // Well, this is quite the pickle.\n      // `fn` received a callback and invoked it (thus continuing the pipeline),\n      // but later also threw an error.\n      // We\u2019re not about to restart the pipeline again, so the only thing left\n      // to do is to throw the thing instead.\n      if (callback && invoked) {\n        throw error\n      }\n\n      return done(error)\n    }\n\n    if (!callback) {\n      if (result && typeof result.then === 'function') {\n        result.then(then, done)\n      } else if (result instanceof Error) {\n        done(result)\n      } else {\n        then(result)\n      }\n    }\n  }\n\n  // Invoke `next`, only once.\n  function done() {\n    if (!invoked) {\n      invoked = true\n\n      callback.apply(null, arguments)\n    }\n  }\n\n  // Invoke `done` with one value.\n  // Tracks if an error is passed, too.\n  function then(value) {\n    done(null, value)\n  }\n}\n", "'use strict'\n\nvar wrap = require('./wrap.js')\n\nmodule.exports = trough\n\ntrough.wrap = wrap\n\nvar slice = [].slice\n\n// Create new middleware.\nfunction trough() {\n  var fns = []\n  var middleware = {}\n\n  middleware.run = run\n  middleware.use = use\n\n  return middleware\n\n  // Run `fns`.  Last argument must be a completion handler.\n  function run() {\n    var index = -1\n    var input = slice.call(arguments, 0, -1)\n    var done = arguments[arguments.length - 1]\n\n    if (typeof done !== 'function') {\n      throw new Error('Expected function as last argument, not ' + done)\n    }\n\n    next.apply(null, [null].concat(input))\n\n    // Run the next `fn`, if any.\n    function next(err) {\n      var fn = fns[++index]\n      var params = slice.call(arguments, 0)\n      var values = params.slice(1)\n      var length = input.length\n      var pos = -1\n\n      if (err) {\n        done(err)\n        return\n      }\n\n      // Copy non-nully input into values.\n      while (++pos < length) {\n        if (values[pos] === null || values[pos] === undefined) {\n          values[pos] = input[pos]\n        }\n      }\n\n      input = values\n\n      // Next or done.\n      if (fn) {\n        wrap(fn, next).apply(null, input)\n      } else {\n        done.apply(null, [null].concat(input))\n      }\n    }\n  }\n\n  // Add `fn` to the list.\n  function use(fn) {\n    if (typeof fn !== 'function') {\n      throw new Error('Expected `fn` to be a function, not ' + fn)\n    }\n\n    fns.push(fn)\n\n    return middleware\n  }\n}\n", "'use strict'\n\nvar own = {}.hasOwnProperty\n\nmodule.exports = stringify\n\nfunction stringify(value) {\n  // Nothing.\n  if (!value || typeof value !== 'object') {\n    return ''\n  }\n\n  // Node.\n  if (own.call(value, 'position') || own.call(value, 'type')) {\n    return position(value.position)\n  }\n\n  // Position.\n  if (own.call(value, 'start') || own.call(value, 'end')) {\n    return position(value)\n  }\n\n  // Point.\n  if (own.call(value, 'line') || own.call(value, 'column')) {\n    return point(value)\n  }\n\n  // ?\n  return ''\n}\n\nfunction point(point) {\n  if (!point || typeof point !== 'object') {\n    point = {}\n  }\n\n  return index(point.line) + ':' + index(point.column)\n}\n\nfunction position(pos) {\n  if (!pos || typeof pos !== 'object') {\n    pos = {}\n  }\n\n  return point(pos.start) + '-' + point(pos.end)\n}\n\nfunction index(value) {\n  return value && typeof value === 'number' ? value : 1\n}\n", "'use strict'\n\nvar stringify = require('unist-util-stringify-position')\n\nmodule.exports = VMessage\n\n// Inherit from `Error#`.\nfunction VMessagePrototype() {}\nVMessagePrototype.prototype = Error.prototype\nVMessage.prototype = new VMessagePrototype()\n\n// Message properties.\nvar proto = VMessage.prototype\n\nproto.file = ''\nproto.name = ''\nproto.reason = ''\nproto.message = ''\nproto.stack = ''\nproto.fatal = null\nproto.column = null\nproto.line = null\n\n// Construct a new VMessage.\n//\n// Note: We cannot invoke `Error` on the created context, as that adds readonly\n// `line` and `column` attributes on Safari 9, thus throwing and failing the\n// data.\nfunction VMessage(reason, position, origin) {\n  var parts\n  var range\n  var location\n\n  if (typeof position === 'string') {\n    origin = position\n    position = null\n  }\n\n  parts = parseOrigin(origin)\n  range = stringify(position) || '1:1'\n\n  location = {\n    start: {line: null, column: null},\n    end: {line: null, column: null}\n  }\n\n  // Node.\n  if (position && position.position) {\n    position = position.position\n  }\n\n  if (position) {\n    // Position.\n    if (position.start) {\n      location = position\n      position = position.start\n    } else {\n      // Point.\n      location.start = position\n    }\n  }\n\n  if (reason.stack) {\n    this.stack = reason.stack\n    reason = reason.message\n  }\n\n  this.message = reason\n  this.name = range\n  this.reason = reason\n  this.line = position ? position.line : null\n  this.column = position ? position.column : null\n  this.location = location\n  this.source = parts[0]\n  this.ruleId = parts[1]\n}\n\nfunction parseOrigin(origin) {\n  var result = [null, null]\n  var index\n\n  if (typeof origin === 'string') {\n    index = origin.indexOf(':')\n\n    if (index === -1) {\n      result[1] = origin\n    } else {\n      result[0] = origin.slice(0, index)\n      result[1] = origin.slice(index + 1)\n    }\n  }\n\n  return result\n}\n", "'use strict'\n\nmodule.exports = require('path')\n", "'use strict'\n\nmodule.exports = process\n", "'use strict'\n\nvar p = require('./minpath')\nvar proc = require('./minproc')\nvar buffer = require('is-buffer')\n\nmodule.exports = VFile\n\nvar own = {}.hasOwnProperty\n\n// Order of setting (least specific to most), we need this because otherwise\n// `{stem: 'a', path: '~/b.js'}` would throw, as a path is needed before a\n// stem can be set.\nvar order = ['history', 'path', 'basename', 'stem', 'extname', 'dirname']\n\nVFile.prototype.toString = toString\n\n// Access full path (`~/index.min.js`).\nObject.defineProperty(VFile.prototype, 'path', {get: getPath, set: setPath})\n\n// Access parent path (`~`).\nObject.defineProperty(VFile.prototype, 'dirname', {\n  get: getDirname,\n  set: setDirname\n})\n\n// Access basename (`index.min.js`).\nObject.defineProperty(VFile.prototype, 'basename', {\n  get: getBasename,\n  set: setBasename\n})\n\n// Access extname (`.js`).\nObject.defineProperty(VFile.prototype, 'extname', {\n  get: getExtname,\n  set: setExtname\n})\n\n// Access stem (`index.min`).\nObject.defineProperty(VFile.prototype, 'stem', {get: getStem, set: setStem})\n\n// Construct a new file.\nfunction VFile(options) {\n  var prop\n  var index\n\n  if (!options) {\n    options = {}\n  } else if (typeof options === 'string' || buffer(options)) {\n    options = {contents: options}\n  } else if ('message' in options && 'messages' in options) {\n    return options\n  }\n\n  if (!(this instanceof VFile)) {\n    return new VFile(options)\n  }\n\n  this.data = {}\n  this.messages = []\n  this.history = []\n  this.cwd = proc.cwd()\n\n  // Set path related properties in the correct order.\n  index = -1\n\n  while (++index < order.length) {\n    prop = order[index]\n\n    if (own.call(options, prop)) {\n      this[prop] = options[prop]\n    }\n  }\n\n  // Set non-path related properties.\n  for (prop in options) {\n    if (order.indexOf(prop) < 0) {\n      this[prop] = options[prop]\n    }\n  }\n}\n\nfunction getPath() {\n  return this.history[this.history.length - 1]\n}\n\nfunction setPath(path) {\n  assertNonEmpty(path, 'path')\n\n  if (this.path !== path) {\n    this.history.push(path)\n  }\n}\n\nfunction getDirname() {\n  return typeof this.path === 'string' ? p.dirname(this.path) : undefined\n}\n\nfunction setDirname(dirname) {\n  assertPath(this.path, 'dirname')\n  this.path = p.join(dirname || '', this.basename)\n}\n\nfunction getBasename() {\n  return typeof this.path === 'string' ? p.basename(this.path) : undefined\n}\n\nfunction setBasename(basename) {\n  assertNonEmpty(basename, 'basename')\n  assertPart(basename, 'basename')\n  this.path = p.join(this.dirname || '', basename)\n}\n\nfunction getExtname() {\n  return typeof this.path === 'string' ? p.extname(this.path) : undefined\n}\n\nfunction setExtname(extname) {\n  assertPart(extname, 'extname')\n  assertPath(this.path, 'extname')\n\n  if (extname) {\n    if (extname.charCodeAt(0) !== 46 /* `.` */) {\n      throw new Error('`extname` must start with `.`')\n    }\n\n    if (extname.indexOf('.', 1) > -1) {\n      throw new Error('`extname` cannot contain multiple dots')\n    }\n  }\n\n  this.path = p.join(this.dirname, this.stem + (extname || ''))\n}\n\nfunction getStem() {\n  return typeof this.path === 'string'\n    ? p.basename(this.path, this.extname)\n    : undefined\n}\n\nfunction setStem(stem) {\n  assertNonEmpty(stem, 'stem')\n  assertPart(stem, 'stem')\n  this.path = p.join(this.dirname || '', stem + (this.extname || ''))\n}\n\n// Get the value of the file.\nfunction toString(encoding) {\n  return (this.contents || '').toString(encoding)\n}\n\n// Assert that `part` is not a path (i.e., does not contain `p.sep`).\nfunction assertPart(part, name) {\n  if (part && part.indexOf(p.sep) > -1) {\n    throw new Error(\n      '`' + name + '` cannot be a path: did not expect `' + p.sep + '`'\n    )\n  }\n}\n\n// Assert that `part` is not empty.\nfunction assertNonEmpty(part, name) {\n  if (!part) {\n    throw new Error('`' + name + '` cannot be empty')\n  }\n}\n\n// Assert `path` exists.\nfunction assertPath(path, name) {\n  if (!path) {\n    throw new Error('Setting `' + name + '` requires `path` to be set too')\n  }\n}\n", "'use strict'\n\nvar VMessage = require('vfile-message')\nvar VFile = require('./core.js')\n\nmodule.exports = VFile\n\nVFile.prototype.message = message\nVFile.prototype.info = info\nVFile.prototype.fail = fail\n\n// Create a message with `reason` at `position`.\n// When an error is passed in as `reason`, copies the stack.\nfunction message(reason, position, origin) {\n  var message = new VMessage(reason, position, origin)\n\n  if (this.path) {\n    message.name = this.path + ':' + message.name\n    message.file = this.path\n  }\n\n  message.fatal = false\n\n  this.messages.push(message)\n\n  return message\n}\n\n// Fail: creates a vmessage, associates it with the file, and throws it.\nfunction fail() {\n  var message = this.message.apply(this, arguments)\n\n  message.fatal = true\n\n  throw message\n}\n\n// Info: creates a vmessage, associates it with the file, and marks the fatality\n// as null.\nfunction info() {\n  var message = this.message.apply(this, arguments)\n\n  message.fatal = null\n\n  return message\n}\n", "'use strict'\n\nmodule.exports = require('./lib')\n", "'use strict'\n\nvar bail = require('bail')\nvar buffer = require('is-buffer')\nvar extend = require('extend')\nvar plain = require('is-plain-obj')\nvar trough = require('trough')\nvar vfile = require('vfile')\n\n// Expose a frozen processor.\nmodule.exports = unified().freeze()\n\nvar slice = [].slice\nvar own = {}.hasOwnProperty\n\n// Process pipeline.\nvar pipeline = trough()\n  .use(pipelineParse)\n  .use(pipelineRun)\n  .use(pipelineStringify)\n\nfunction pipelineParse(p, ctx) {\n  ctx.tree = p.parse(ctx.file)\n}\n\nfunction pipelineRun(p, ctx, next) {\n  p.run(ctx.tree, ctx.file, done)\n\n  function done(error, tree, file) {\n    if (error) {\n      next(error)\n    } else {\n      ctx.tree = tree\n      ctx.file = file\n      next()\n    }\n  }\n}\n\nfunction pipelineStringify(p, ctx) {\n  var result = p.stringify(ctx.tree, ctx.file)\n\n  if (result === undefined || result === null) {\n    // Empty.\n  } else if (typeof result === 'string' || buffer(result)) {\n    ctx.file.contents = result\n  } else {\n    ctx.file.result = result\n  }\n}\n\n// Function to create the first processor.\nfunction unified() {\n  var attachers = []\n  var transformers = trough()\n  var namespace = {}\n  var freezeIndex = -1\n  var frozen\n\n  // Data management.\n  processor.data = data\n\n  // Lock.\n  processor.freeze = freeze\n\n  // Plugins.\n  processor.attachers = attachers\n  processor.use = use\n\n  // API.\n  processor.parse = parse\n  processor.stringify = stringify\n  processor.run = run\n  processor.runSync = runSync\n  processor.process = process\n  processor.processSync = processSync\n\n  // Expose.\n  return processor\n\n  // Create a new processor based on the processor in the current scope.\n  function processor() {\n    var destination = unified()\n    var index = -1\n\n    while (++index < attachers.length) {\n      destination.use.apply(null, attachers[index])\n    }\n\n    destination.data(extend(true, {}, namespace))\n\n    return destination\n  }\n\n  // Freeze: used to signal a processor that has finished configuration.\n  //\n  // For example, take unified itself: it\u2019s frozen.\n  // Plugins should not be added to it.\n  // Rather, it should be extended, by invoking it, before modifying it.\n  //\n  // In essence, always invoke this when exporting a processor.\n  function freeze() {\n    var values\n    var transformer\n\n    if (frozen) {\n      return processor\n    }\n\n    while (++freezeIndex < attachers.length) {\n      values = attachers[freezeIndex]\n\n      if (values[1] === false) {\n        continue\n      }\n\n      if (values[1] === true) {\n        values[1] = undefined\n      }\n\n      transformer = values[0].apply(processor, values.slice(1))\n\n      if (typeof transformer === 'function') {\n        transformers.use(transformer)\n      }\n    }\n\n    frozen = true\n    freezeIndex = Infinity\n\n    return processor\n  }\n\n  // Data management.\n  // Getter / setter for processor-specific informtion.\n  function data(key, value) {\n    if (typeof key === 'string') {\n      // Set `key`.\n      if (arguments.length === 2) {\n        assertUnfrozen('data', frozen)\n        namespace[key] = value\n        return processor\n      }\n\n      // Get `key`.\n      return (own.call(namespace, key) && namespace[key]) || null\n    }\n\n    // Set space.\n    if (key) {\n      assertUnfrozen('data', frozen)\n      namespace = key\n      return processor\n    }\n\n    // Get space.\n    return namespace\n  }\n\n  // Plugin management.\n  //\n  // Pass it:\n  // *   an attacher and options,\n  // *   a preset,\n  // *   a list of presets, attachers, and arguments (list of attachers and\n  //     options).\n  function use(value) {\n    var settings\n\n    assertUnfrozen('use', frozen)\n\n    if (value === null || value === undefined) {\n      // Empty.\n    } else if (typeof value === 'function') {\n      addPlugin.apply(null, arguments)\n    } else if (typeof value === 'object') {\n      if ('length' in value) {\n        addList(value)\n      } else {\n        addPreset(value)\n      }\n    } else {\n      throw new Error('Expected usable value, not `' + value + '`')\n    }\n\n    if (settings) {\n      namespace.settings = extend(namespace.settings || {}, settings)\n    }\n\n    return processor\n\n    function addPreset(result) {\n      addList(result.plugins)\n\n      if (result.settings) {\n        settings = extend(settings || {}, result.settings)\n      }\n    }\n\n    function add(value) {\n      if (typeof value === 'function') {\n        addPlugin(value)\n      } else if (typeof value === 'object') {\n        if ('length' in value) {\n          addPlugin.apply(null, value)\n        } else {\n          addPreset(value)\n        }\n      } else {\n        throw new Error('Expected usable value, not `' + value + '`')\n      }\n    }\n\n    function addList(plugins) {\n      var index = -1\n\n      if (plugins === null || plugins === undefined) {\n        // Empty.\n      } else if (typeof plugins === 'object' && 'length' in plugins) {\n        while (++index < plugins.length) {\n          add(plugins[index])\n        }\n      } else {\n        throw new Error('Expected a list of plugins, not `' + plugins + '`')\n      }\n    }\n\n    function addPlugin(plugin, value) {\n      var entry = find(plugin)\n\n      if (entry) {\n        if (plain(entry[1]) && plain(value)) {\n          value = extend(true, entry[1], value)\n        }\n\n        entry[1] = value\n      } else {\n        attachers.push(slice.call(arguments))\n      }\n    }\n  }\n\n  function find(plugin) {\n    var index = -1\n\n    while (++index < attachers.length) {\n      if (attachers[index][0] === plugin) {\n        return attachers[index]\n      }\n    }\n  }\n\n  // Parse a file (in string or vfile representation) into a unist node using\n  // the `Parser` on the processor.\n  function parse(doc) {\n    var file = vfile(doc)\n    var Parser\n\n    freeze()\n    Parser = processor.Parser\n    assertParser('parse', Parser)\n\n    if (newable(Parser, 'parse')) {\n      return new Parser(String(file), file).parse()\n    }\n\n    return Parser(String(file), file) // eslint-disable-line new-cap\n  }\n\n  // Run transforms on a unist node representation of a file (in string or\n  // vfile representation), async.\n  function run(node, file, cb) {\n    assertNode(node)\n    freeze()\n\n    if (!cb && typeof file === 'function') {\n      cb = file\n      file = null\n    }\n\n    if (!cb) {\n      return new Promise(executor)\n    }\n\n    executor(null, cb)\n\n    function executor(resolve, reject) {\n      transformers.run(node, vfile(file), done)\n\n      function done(error, tree, file) {\n        tree = tree || node\n        if (error) {\n          reject(error)\n        } else if (resolve) {\n          resolve(tree)\n        } else {\n          cb(null, tree, file)\n        }\n      }\n    }\n  }\n\n  // Run transforms on a unist node representation of a file (in string or\n  // vfile representation), sync.\n  function runSync(node, file) {\n    var result\n    var complete\n\n    run(node, file, done)\n\n    assertDone('runSync', 'run', complete)\n\n    return result\n\n    function done(error, tree) {\n      complete = true\n      result = tree\n      bail(error)\n    }\n  }\n\n  // Stringify a unist node representation of a file (in string or vfile\n  // representation) into a string using the `Compiler` on the processor.\n  function stringify(node, doc) {\n    var file = vfile(doc)\n    var Compiler\n\n    freeze()\n    Compiler = processor.Compiler\n    assertCompiler('stringify', Compiler)\n    assertNode(node)\n\n    if (newable(Compiler, 'compile')) {\n      return new Compiler(node, file).compile()\n    }\n\n    return Compiler(node, file) // eslint-disable-line new-cap\n  }\n\n  // Parse a file (in string or vfile representation) into a unist node using\n  // the `Parser` on the processor, then run transforms on that node, and\n  // compile the resulting node using the `Compiler` on the processor, and\n  // store that result on the vfile.\n  function process(doc, cb) {\n    freeze()\n    assertParser('process', processor.Parser)\n    assertCompiler('process', processor.Compiler)\n\n    if (!cb) {\n      return new Promise(executor)\n    }\n\n    executor(null, cb)\n\n    function executor(resolve, reject) {\n      var file = vfile(doc)\n\n      pipeline.run(processor, {file: file}, done)\n\n      function done(error) {\n        if (error) {\n          reject(error)\n        } else if (resolve) {\n          resolve(file)\n        } else {\n          cb(null, file)\n        }\n      }\n    }\n  }\n\n  // Process the given document (in string or vfile representation), sync.\n  function processSync(doc) {\n    var file\n    var complete\n\n    freeze()\n    assertParser('processSync', processor.Parser)\n    assertCompiler('processSync', processor.Compiler)\n    file = vfile(doc)\n\n    process(file, done)\n\n    assertDone('processSync', 'process', complete)\n\n    return file\n\n    function done(error) {\n      complete = true\n      bail(error)\n    }\n  }\n}\n\n// Check if `value` is a constructor.\nfunction newable(value, name) {\n  return (\n    typeof value === 'function' &&\n    value.prototype &&\n    // A function with keys in its prototype is probably a constructor.\n    // Classes\u2019 prototype methods are not enumerable, so we check if some value\n    // exists in the prototype.\n    (keys(value.prototype) || name in value.prototype)\n  )\n}\n\n// Check if `value` is an object with keys.\nfunction keys(value) {\n  var key\n  for (key in value) {\n    return true\n  }\n\n  return false\n}\n\n// Assert a parser is available.\nfunction assertParser(name, Parser) {\n  if (typeof Parser !== 'function') {\n    throw new Error('Cannot `' + name + '` without `Parser`')\n  }\n}\n\n// Assert a compiler is available.\nfunction assertCompiler(name, Compiler) {\n  if (typeof Compiler !== 'function') {\n    throw new Error('Cannot `' + name + '` without `Compiler`')\n  }\n}\n\n// Assert the processor is not frozen.\nfunction assertUnfrozen(name, frozen) {\n  if (frozen) {\n    throw new Error(\n      'Cannot invoke `' +\n        name +\n        '` on a frozen processor.\\nCreate a new processor first, by invoking it: use `processor()` instead of `processor`.'\n    )\n  }\n}\n\n// Assert `node` is a unist node.\nfunction assertNode(node) {\n  if (!node || typeof node.type !== 'string') {\n    throw new Error('Expected node, got `' + node + '`')\n  }\n}\n\n// Assert that `complete` is `true`.\nfunction assertDone(name, asyncName, complete) {\n  if (!complete) {\n    throw new Error(\n      '`' + name + '` finished async. Use `' + asyncName + '` instead'\n    )\n  }\n}\n", "'use strict'\n\nmodule.exports = toString\n\n// Get the text content of a node.\n// Prefer the node\u2019s plain-text fields, otherwise serialize its children,\n// and if the given value is an array, serialize the nodes in it.\nfunction toString(node) {\n  return (\n    (node &&\n      (node.value ||\n        node.alt ||\n        node.title ||\n        ('children' in node && all(node.children)) ||\n        ('length' in node && all(node)))) ||\n    ''\n  )\n}\n\nfunction all(values) {\n  var result = []\n  var index = -1\n\n  while (++index < values.length) {\n    result[index] = toString(values[index])\n  }\n\n  return result.join('')\n}\n", "'use strict'\n\nvar assign = Object.assign\n\nmodule.exports = assign\n", "'use strict'\n\nvar own = {}.hasOwnProperty\n\nmodule.exports = own\n", "'use strict'\n\nfunction normalizeIdentifier(value) {\n  return (\n    value // Collapse Markdown whitespace.\n      .replace(/[\\t\\n\\r ]+/g, ' ') // Trim.\n      .replace(/^ | $/g, '') // Some characters are considered \u201Cuppercase\u201D, but if their lowercase\n      // counterpart is uppercased will result in a different uppercase\n      // character.\n      // Hence, to get that form, we perform both lower- and uppercase.\n      // Upper case makes sure keys will not interact with default prototypal\n      // methods: no object method is uppercase.\n      .toLowerCase()\n      .toUpperCase()\n  )\n}\n\nmodule.exports = normalizeIdentifier\n", "'use strict'\n\nvar fromCharCode = String.fromCharCode\n\nmodule.exports = fromCharCode\n", "'use strict'\n\nvar fromCharCode = require('../constant/from-char-code.js')\n\nfunction safeFromInt(value, base) {\n  var code = parseInt(value, base)\n\n  if (\n    // C0 except for HT, LF, FF, CR, space\n    code < 9 ||\n    code === 11 ||\n    (code > 13 && code < 32) || // Control character (DEL) of the basic block and C1 controls.\n    (code > 126 && code < 160) || // Lone high surrogates and low surrogates.\n    (code > 55295 && code < 57344) || // Noncharacters.\n    (code > 64975 && code < 65008) ||\n    (code & 65535) === 65535 ||\n    (code & 65535) === 65534 || // Out of range\n    code > 1114111\n  ) {\n    return '\\uFFFD'\n  }\n\n  return fromCharCode(code)\n}\n\nmodule.exports = safeFromInt\n", "'use strict'\n\nfunction markdownLineEnding(code) {\n  return code < -2\n}\n\nmodule.exports = markdownLineEnding\n", "'use strict'\n\nfunction markdownSpace(code) {\n  return code === -2 || code === -1 || code === 32\n}\n\nmodule.exports = markdownSpace\n", "'use strict'\n\nvar markdownSpace = require('../character/markdown-space.js')\n\nfunction spaceFactory(effects, ok, type, max) {\n  var limit = max ? max - 1 : Infinity\n  var size = 0\n  return start\n\n  function start(code) {\n    if (markdownSpace(code)) {\n      effects.enter(type)\n      return prefix(code)\n    }\n\n    return ok(code)\n  }\n\n  function prefix(code) {\n    if (markdownSpace(code) && size++ < limit) {\n      effects.consume(code)\n      return prefix\n    }\n\n    effects.exit(type)\n    return ok(code)\n  }\n}\n\nmodule.exports = spaceFactory\n", "'use strict'\n\nObject.defineProperty(exports, '__esModule', {value: true})\n\nvar markdownLineEnding = require('../character/markdown-line-ending.js')\nvar factorySpace = require('../tokenize/factory-space.js')\n\nvar tokenize = initializeContent\n\nfunction initializeContent(effects) {\n  var contentStart = effects.attempt(\n    this.parser.constructs.contentInitial,\n    afterContentStartConstruct,\n    paragraphInitial\n  )\n  var previous\n  return contentStart\n\n  function afterContentStartConstruct(code) {\n    if (code === null) {\n      effects.consume(code)\n      return\n    }\n\n    effects.enter('lineEnding')\n    effects.consume(code)\n    effects.exit('lineEnding')\n    return factorySpace(effects, contentStart, 'linePrefix')\n  }\n\n  function paragraphInitial(code) {\n    effects.enter('paragraph')\n    return lineStart(code)\n  }\n\n  function lineStart(code) {\n    var token = effects.enter('chunkText', {\n      contentType: 'text',\n      previous: previous\n    })\n\n    if (previous) {\n      previous.next = token\n    }\n\n    previous = token\n    return data(code)\n  }\n\n  function data(code) {\n    if (code === null) {\n      effects.exit('chunkText')\n      effects.exit('paragraph')\n      effects.consume(code)\n      return\n    }\n\n    if (markdownLineEnding(code)) {\n      effects.consume(code)\n      effects.exit('chunkText')\n      return lineStart\n    } // Data.\n\n    effects.consume(code)\n    return data\n  }\n}\n\nexports.tokenize = tokenize\n", "'use strict'\n\nvar markdownLineEnding = require('../character/markdown-line-ending.js')\nvar factorySpace = require('./factory-space.js')\n\nvar partialBlankLine = {\n  tokenize: tokenizePartialBlankLine,\n  partial: true\n}\n\nfunction tokenizePartialBlankLine(effects, ok, nok) {\n  return factorySpace(effects, afterWhitespace, 'linePrefix')\n\n  function afterWhitespace(code) {\n    return code === null || markdownLineEnding(code) ? ok(code) : nok(code)\n  }\n}\n\nmodule.exports = partialBlankLine\n", "'use strict'\n\nObject.defineProperty(exports, '__esModule', {value: true})\n\nvar markdownLineEnding = require('../character/markdown-line-ending.js')\nvar factorySpace = require('../tokenize/factory-space.js')\nvar partialBlankLine = require('../tokenize/partial-blank-line.js')\n\nvar tokenize = initializeDocument\nvar containerConstruct = {\n  tokenize: tokenizeContainer\n}\nvar lazyFlowConstruct = {\n  tokenize: tokenizeLazyFlow\n}\n\nfunction initializeDocument(effects) {\n  var self = this\n  var stack = []\n  var continued = 0\n  var inspectConstruct = {\n    tokenize: tokenizeInspect,\n    partial: true\n  }\n  var inspectResult\n  var childFlow\n  var childToken\n  return start\n\n  function start(code) {\n    if (continued < stack.length) {\n      self.containerState = stack[continued][1]\n      return effects.attempt(\n        stack[continued][0].continuation,\n        documentContinue,\n        documentContinued\n      )(code)\n    }\n\n    return documentContinued(code)\n  }\n\n  function documentContinue(code) {\n    continued++\n    return start(code)\n  }\n\n  function documentContinued(code) {\n    // If we\u2019re in a concrete construct (such as when expecting another line of\n    // HTML, or we resulted in lazy content), we can immediately start flow.\n    if (inspectResult && inspectResult.flowContinue) {\n      return flowStart(code)\n    }\n\n    self.interrupt =\n      childFlow &&\n      childFlow.currentConstruct &&\n      childFlow.currentConstruct.interruptible\n    self.containerState = {}\n    return effects.attempt(\n      containerConstruct,\n      containerContinue,\n      flowStart\n    )(code)\n  }\n\n  function containerContinue(code) {\n    stack.push([self.currentConstruct, self.containerState])\n    self.containerState = undefined\n    return documentContinued(code)\n  }\n\n  function flowStart(code) {\n    if (code === null) {\n      exitContainers(0, true)\n      effects.consume(code)\n      return\n    }\n\n    childFlow = childFlow || self.parser.flow(self.now())\n    effects.enter('chunkFlow', {\n      contentType: 'flow',\n      previous: childToken,\n      _tokenizer: childFlow\n    })\n    return flowContinue(code)\n  }\n\n  function flowContinue(code) {\n    if (code === null) {\n      continueFlow(effects.exit('chunkFlow'))\n      return flowStart(code)\n    }\n\n    if (markdownLineEnding(code)) {\n      effects.consume(code)\n      continueFlow(effects.exit('chunkFlow'))\n      return effects.check(inspectConstruct, documentAfterPeek)\n    }\n\n    effects.consume(code)\n    return flowContinue\n  }\n\n  function documentAfterPeek(code) {\n    exitContainers(\n      inspectResult.continued,\n      inspectResult && inspectResult.flowEnd\n    )\n    continued = 0\n    return start(code)\n  }\n\n  function continueFlow(token) {\n    if (childToken) childToken.next = token\n    childToken = token\n    childFlow.lazy = inspectResult && inspectResult.lazy\n    childFlow.defineSkip(token.start)\n    childFlow.write(self.sliceStream(token))\n  }\n\n  function exitContainers(size, end) {\n    var index = stack.length // Close the flow.\n\n    if (childFlow && end) {\n      childFlow.write([null])\n      childToken = childFlow = undefined\n    } // Exit open containers.\n\n    while (index-- > size) {\n      self.containerState = stack[index][1]\n      stack[index][0].exit.call(self, effects)\n    }\n\n    stack.length = size\n  }\n\n  function tokenizeInspect(effects, ok) {\n    var subcontinued = 0\n    inspectResult = {}\n    return inspectStart\n\n    function inspectStart(code) {\n      if (subcontinued < stack.length) {\n        self.containerState = stack[subcontinued][1]\n        return effects.attempt(\n          stack[subcontinued][0].continuation,\n          inspectContinue,\n          inspectLess\n        )(code)\n      } // If we\u2019re continued but in a concrete flow, we can\u2019t have more\n      // containers.\n\n      if (childFlow.currentConstruct && childFlow.currentConstruct.concrete) {\n        inspectResult.flowContinue = true\n        return inspectDone(code)\n      }\n\n      self.interrupt =\n        childFlow.currentConstruct && childFlow.currentConstruct.interruptible\n      self.containerState = {}\n      return effects.attempt(\n        containerConstruct,\n        inspectFlowEnd,\n        inspectDone\n      )(code)\n    }\n\n    function inspectContinue(code) {\n      subcontinued++\n      return self.containerState._closeFlow\n        ? inspectFlowEnd(code)\n        : inspectStart(code)\n    }\n\n    function inspectLess(code) {\n      if (childFlow.currentConstruct && childFlow.currentConstruct.lazy) {\n        // Maybe another container?\n        self.containerState = {}\n        return effects.attempt(\n          containerConstruct,\n          inspectFlowEnd, // Maybe flow, or a blank line?\n          effects.attempt(\n            lazyFlowConstruct,\n            inspectFlowEnd,\n            effects.check(partialBlankLine, inspectFlowEnd, inspectLazy)\n          )\n        )(code)\n      } // Otherwise we\u2019re interrupting.\n\n      return inspectFlowEnd(code)\n    }\n\n    function inspectLazy(code) {\n      // Act as if all containers are continued.\n      subcontinued = stack.length\n      inspectResult.lazy = true\n      inspectResult.flowContinue = true\n      return inspectDone(code)\n    } // We\u2019re done with flow if we have more containers, or an interruption.\n\n    function inspectFlowEnd(code) {\n      inspectResult.flowEnd = true\n      return inspectDone(code)\n    }\n\n    function inspectDone(code) {\n      inspectResult.continued = subcontinued\n      self.interrupt = self.containerState = undefined\n      return ok(code)\n    }\n  }\n}\n\nfunction tokenizeContainer(effects, ok, nok) {\n  return factorySpace(\n    effects,\n    effects.attempt(this.parser.constructs.document, ok, nok),\n    'linePrefix',\n    this.parser.constructs.disable.null.indexOf('codeIndented') > -1\n      ? undefined\n      : 4\n  )\n}\n\nfunction tokenizeLazyFlow(effects, ok, nok) {\n  return factorySpace(\n    effects,\n    effects.lazy(this.parser.constructs.flow, ok, nok),\n    'linePrefix',\n    this.parser.constructs.disable.null.indexOf('codeIndented') > -1\n      ? undefined\n      : 4\n  )\n}\n\nexports.tokenize = tokenize\n", "'use strict'\n\n// Counts tabs based on their expanded size, and CR+LF as one character.\n\nfunction sizeChunks(chunks) {\n  var index = -1\n  var size = 0\n\n  while (++index < chunks.length) {\n    size += typeof chunks[index] === 'string' ? chunks[index].length : 1\n  }\n\n  return size\n}\n\nmodule.exports = sizeChunks\n", "'use strict'\n\nvar sizeChunks = require('./size-chunks.js')\n\nfunction prefixSize(events, type) {\n  var tail = events[events.length - 1]\n  if (!tail || tail[1].type !== type) return 0\n  return sizeChunks(tail[2].sliceStream(tail[1]))\n}\n\nmodule.exports = prefixSize\n", "'use strict'\n\nvar splice = [].splice\n\nmodule.exports = splice\n", "'use strict'\n\nvar splice = require('../constant/splice.js')\n\n// causes a stack overflow in V8 when trying to insert 100k items for instance.\n\nfunction chunkedSplice(list, start, remove, items) {\n  var end = list.length\n  var chunkStart = 0\n  var parameters // Make start between zero and `end` (included).\n\n  if (start < 0) {\n    start = -start > end ? 0 : end + start\n  } else {\n    start = start > end ? end : start\n  }\n\n  remove = remove > 0 ? remove : 0 // No need to chunk the items if there\u2019s only a couple (10k) items.\n\n  if (items.length < 10000) {\n    parameters = Array.from(items)\n    parameters.unshift(start, remove)\n    splice.apply(list, parameters)\n  } else {\n    // Delete `remove` items starting from `start`\n    if (remove) splice.apply(list, [start, remove]) // Insert the items in chunks to not cause stack overflows.\n\n    while (chunkStart < items.length) {\n      parameters = items.slice(chunkStart, chunkStart + 10000)\n      parameters.unshift(start, 0)\n      splice.apply(list, parameters)\n      chunkStart += 10000\n      start += 10000\n    }\n  }\n}\n\nmodule.exports = chunkedSplice\n", "'use strict'\n\nvar assign = require('../constant/assign.js')\n\nfunction shallow(object) {\n  return assign({}, object)\n}\n\nmodule.exports = shallow\n", "'use strict'\n\nvar assign = require('../constant/assign.js')\nvar chunkedSplice = require('./chunked-splice.js')\nvar shallow = require('./shallow.js')\n\nfunction subtokenize(events) {\n  var jumps = {}\n  var index = -1\n  var event\n  var lineIndex\n  var otherIndex\n  var otherEvent\n  var parameters\n  var subevents\n  var more\n\n  while (++index < events.length) {\n    while (index in jumps) {\n      index = jumps[index]\n    }\n\n    event = events[index] // Add a hook for the GFM tasklist extension, which needs to know if text\n    // is in the first content of a list item.\n\n    if (\n      index &&\n      event[1].type === 'chunkFlow' &&\n      events[index - 1][1].type === 'listItemPrefix'\n    ) {\n      subevents = event[1]._tokenizer.events\n      otherIndex = 0\n\n      if (\n        otherIndex < subevents.length &&\n        subevents[otherIndex][1].type === 'lineEndingBlank'\n      ) {\n        otherIndex += 2\n      }\n\n      if (\n        otherIndex < subevents.length &&\n        subevents[otherIndex][1].type === 'content'\n      ) {\n        while (++otherIndex < subevents.length) {\n          if (subevents[otherIndex][1].type === 'content') {\n            break\n          }\n\n          if (subevents[otherIndex][1].type === 'chunkText') {\n            subevents[otherIndex][1].isInFirstContentOfListItem = true\n            otherIndex++\n          }\n        }\n      }\n    } // Enter.\n\n    if (event[0] === 'enter') {\n      if (event[1].contentType) {\n        assign(jumps, subcontent(events, index))\n        index = jumps[index]\n        more = true\n      }\n    } // Exit.\n    else if (event[1]._container || event[1]._movePreviousLineEndings) {\n      otherIndex = index\n      lineIndex = undefined\n\n      while (otherIndex--) {\n        otherEvent = events[otherIndex]\n\n        if (\n          otherEvent[1].type === 'lineEnding' ||\n          otherEvent[1].type === 'lineEndingBlank'\n        ) {\n          if (otherEvent[0] === 'enter') {\n            if (lineIndex) {\n              events[lineIndex][1].type = 'lineEndingBlank'\n            }\n\n            otherEvent[1].type = 'lineEnding'\n            lineIndex = otherIndex\n          }\n        } else {\n          break\n        }\n      }\n\n      if (lineIndex) {\n        // Fix position.\n        event[1].end = shallow(events[lineIndex][1].start) // Switch container exit w/ line endings.\n\n        parameters = events.slice(lineIndex, index)\n        parameters.unshift(event)\n        chunkedSplice(events, lineIndex, index - lineIndex + 1, parameters)\n      }\n    }\n  }\n\n  return !more\n}\n\nfunction subcontent(events, eventIndex) {\n  var token = events[eventIndex][1]\n  var context = events[eventIndex][2]\n  var startPosition = eventIndex - 1\n  var startPositions = []\n  var tokenizer =\n    token._tokenizer || context.parser[token.contentType](token.start)\n  var childEvents = tokenizer.events\n  var jumps = []\n  var gaps = {}\n  var stream\n  var previous\n  var index\n  var entered\n  var end\n  var adjust // Loop forward through the linked tokens to pass them in order to the\n  // subtokenizer.\n\n  while (token) {\n    // Find the position of the event for this token.\n    while (events[++startPosition][1] !== token) {\n      // Empty.\n    }\n\n    startPositions.push(startPosition)\n\n    if (!token._tokenizer) {\n      stream = context.sliceStream(token)\n\n      if (!token.next) {\n        stream.push(null)\n      }\n\n      if (previous) {\n        tokenizer.defineSkip(token.start)\n      }\n\n      if (token.isInFirstContentOfListItem) {\n        tokenizer._gfmTasklistFirstContentOfListItem = true\n      }\n\n      tokenizer.write(stream)\n\n      if (token.isInFirstContentOfListItem) {\n        tokenizer._gfmTasklistFirstContentOfListItem = undefined\n      }\n    } // Unravel the next token.\n\n    previous = token\n    token = token.next\n  } // Now, loop back through all events (and linked tokens), to figure out which\n  // parts belong where.\n\n  token = previous\n  index = childEvents.length\n\n  while (index--) {\n    // Make sure we\u2019ve at least seen something (final eol is part of the last\n    // token).\n    if (childEvents[index][0] === 'enter') {\n      entered = true\n    } else if (\n      // Find a void token that includes a break.\n      entered &&\n      childEvents[index][1].type === childEvents[index - 1][1].type &&\n      childEvents[index][1].start.line !== childEvents[index][1].end.line\n    ) {\n      add(childEvents.slice(index + 1, end))\n      // Help GC.\n      token._tokenizer = token.next = undefined\n      token = token.previous\n      end = index + 1\n    }\n  }\n\n  // Help GC.\n  tokenizer.events = token._tokenizer = token.next = undefined // Do head:\n\n  add(childEvents.slice(0, end))\n  index = -1\n  adjust = 0\n\n  while (++index < jumps.length) {\n    gaps[adjust + jumps[index][0]] = adjust + jumps[index][1]\n    adjust += jumps[index][1] - jumps[index][0] - 1\n  }\n\n  return gaps\n\n  function add(slice) {\n    var start = startPositions.pop()\n    jumps.unshift([start, start + slice.length - 1])\n    chunkedSplice(events, start, 2, slice)\n  }\n}\n\nmodule.exports = subtokenize\n", "'use strict'\n\nvar markdownLineEnding = require('../character/markdown-line-ending.js')\nvar prefixSize = require('../util/prefix-size.js')\nvar subtokenize = require('../util/subtokenize.js')\nvar factorySpace = require('./factory-space.js')\n\n// No name because it must not be turned off.\nvar content = {\n  tokenize: tokenizeContent,\n  resolve: resolveContent,\n  interruptible: true,\n  lazy: true\n}\nvar continuationConstruct = {\n  tokenize: tokenizeContinuation,\n  partial: true\n} // Content is transparent: it\u2019s parsed right now. That way, definitions are also\n// parsed right now: before text in paragraphs (specifically, media) are parsed.\n\nfunction resolveContent(events) {\n  subtokenize(events)\n  return events\n}\n\nfunction tokenizeContent(effects, ok) {\n  var previous\n  return start\n\n  function start(code) {\n    effects.enter('content')\n    previous = effects.enter('chunkContent', {\n      contentType: 'content'\n    })\n    return data(code)\n  }\n\n  function data(code) {\n    if (code === null) {\n      return contentEnd(code)\n    }\n\n    if (markdownLineEnding(code)) {\n      return effects.check(\n        continuationConstruct,\n        contentContinue,\n        contentEnd\n      )(code)\n    } // Data.\n\n    effects.consume(code)\n    return data\n  }\n\n  function contentEnd(code) {\n    effects.exit('chunkContent')\n    effects.exit('content')\n    return ok(code)\n  }\n\n  function contentContinue(code) {\n    effects.consume(code)\n    effects.exit('chunkContent')\n    previous = previous.next = effects.enter('chunkContent', {\n      contentType: 'content',\n      previous: previous\n    })\n    return data\n  }\n}\n\nfunction tokenizeContinuation(effects, ok, nok) {\n  var self = this\n  return startLookahead\n\n  function startLookahead(code) {\n    effects.enter('lineEnding')\n    effects.consume(code)\n    effects.exit('lineEnding')\n    return factorySpace(effects, prefixed, 'linePrefix')\n  }\n\n  function prefixed(code) {\n    if (code === null || markdownLineEnding(code)) {\n      return nok(code)\n    }\n\n    if (\n      self.parser.constructs.disable.null.indexOf('codeIndented') > -1 ||\n      prefixSize(self.events, 'linePrefix') < 4\n    ) {\n      return effects.interrupt(self.parser.constructs.flow, nok, ok)(code)\n    }\n\n    return ok(code)\n  }\n}\n\nmodule.exports = content\n", "'use strict'\n\nObject.defineProperty(exports, '__esModule', {value: true})\n\nvar content = require('../tokenize/content.js')\nvar factorySpace = require('../tokenize/factory-space.js')\nvar partialBlankLine = require('../tokenize/partial-blank-line.js')\n\nvar tokenize = initializeFlow\n\nfunction initializeFlow(effects) {\n  var self = this\n  var initial = effects.attempt(\n    // Try to parse a blank line.\n    partialBlankLine,\n    atBlankEnding, // Try to parse initial flow (essentially, only code).\n    effects.attempt(\n      this.parser.constructs.flowInitial,\n      afterConstruct,\n      factorySpace(\n        effects,\n        effects.attempt(\n          this.parser.constructs.flow,\n          afterConstruct,\n          effects.attempt(content, afterConstruct)\n        ),\n        'linePrefix'\n      )\n    )\n  )\n  return initial\n\n  function atBlankEnding(code) {\n    if (code === null) {\n      effects.consume(code)\n      return\n    }\n\n    effects.enter('lineEndingBlank')\n    effects.consume(code)\n    effects.exit('lineEndingBlank')\n    self.currentConstruct = undefined\n    return initial\n  }\n\n  function afterConstruct(code) {\n    if (code === null) {\n      effects.consume(code)\n      return\n    }\n\n    effects.enter('lineEnding')\n    effects.consume(code)\n    effects.exit('lineEnding')\n    self.currentConstruct = undefined\n    return initial\n  }\n}\n\nexports.tokenize = tokenize\n", "'use strict'\n\nObject.defineProperty(exports, '__esModule', {value: true})\n\nvar assign = require('../constant/assign.js')\nvar shallow = require('../util/shallow.js')\n\nvar text = initializeFactory('text')\nvar string = initializeFactory('string')\nvar resolver = {\n  resolveAll: createResolver()\n}\n\nfunction initializeFactory(field) {\n  return {\n    tokenize: initializeText,\n    resolveAll: createResolver(\n      field === 'text' ? resolveAllLineSuffixes : undefined\n    )\n  }\n\n  function initializeText(effects) {\n    var self = this\n    var constructs = this.parser.constructs[field]\n    var text = effects.attempt(constructs, start, notText)\n    return start\n\n    function start(code) {\n      return atBreak(code) ? text(code) : notText(code)\n    }\n\n    function notText(code) {\n      if (code === null) {\n        effects.consume(code)\n        return\n      }\n\n      effects.enter('data')\n      effects.consume(code)\n      return data\n    }\n\n    function data(code) {\n      if (atBreak(code)) {\n        effects.exit('data')\n        return text(code)\n      } // Data.\n\n      effects.consume(code)\n      return data\n    }\n\n    function atBreak(code) {\n      var list = constructs[code]\n      var index = -1\n\n      if (code === null) {\n        return true\n      }\n\n      if (list) {\n        while (++index < list.length) {\n          if (\n            !list[index].previous ||\n            list[index].previous.call(self, self.previous)\n          ) {\n            return true\n          }\n        }\n      }\n    }\n  }\n}\n\nfunction createResolver(extraResolver) {\n  return resolveAllText\n\n  function resolveAllText(events, context) {\n    var index = -1\n    var enter // A rather boring computation (to merge adjacent `data` events) which\n    // improves mm performance by 29%.\n\n    while (++index <= events.length) {\n      if (enter === undefined) {\n        if (events[index] && events[index][1].type === 'data') {\n          enter = index\n          index++\n        }\n      } else if (!events[index] || events[index][1].type !== 'data') {\n        // Don\u2019t do anything if there is one data token.\n        if (index !== enter + 2) {\n          events[enter][1].end = events[index - 1][1].end\n          events.splice(enter + 2, index - enter - 2)\n          index = enter + 2\n        }\n\n        enter = undefined\n      }\n    }\n\n    return extraResolver ? extraResolver(events, context) : events\n  }\n} // A rather ugly set of instructions which again looks at chunks in the input\n// stream.\n// The reason to do this here is that it is *much* faster to parse in reverse.\n// And that we can\u2019t hook into `null` to split the line suffix before an EOF.\n// To do: figure out if we can make this into a clean utility, or even in core.\n// As it will be useful for GFMs literal autolink extension (and maybe even\n// tables?)\n\nfunction resolveAllLineSuffixes(events, context) {\n  var eventIndex = -1\n  var chunks\n  var data\n  var chunk\n  var index\n  var bufferIndex\n  var size\n  var tabs\n  var token\n\n  while (++eventIndex <= events.length) {\n    if (\n      (eventIndex === events.length ||\n        events[eventIndex][1].type === 'lineEnding') &&\n      events[eventIndex - 1][1].type === 'data'\n    ) {\n      data = events[eventIndex - 1][1]\n      chunks = context.sliceStream(data)\n      index = chunks.length\n      bufferIndex = -1\n      size = 0\n      tabs = undefined\n\n      while (index--) {\n        chunk = chunks[index]\n\n        if (typeof chunk === 'string') {\n          bufferIndex = chunk.length\n\n          while (chunk.charCodeAt(bufferIndex - 1) === 32) {\n            size++\n            bufferIndex--\n          }\n\n          if (bufferIndex) break\n          bufferIndex = -1\n        } // Number\n        else if (chunk === -2) {\n          tabs = true\n          size++\n        } else if (chunk === -1);\n        else {\n          // Replacement character, exit.\n          index++\n          break\n        }\n      }\n\n      if (size) {\n        token = {\n          type:\n            eventIndex === events.length || tabs || size < 2\n              ? 'lineSuffix'\n              : 'hardBreakTrailing',\n          start: {\n            line: data.end.line,\n            column: data.end.column - size,\n            offset: data.end.offset - size,\n            _index: data.start._index + index,\n            _bufferIndex: index\n              ? bufferIndex\n              : data.start._bufferIndex + bufferIndex\n          },\n          end: shallow(data.end)\n        }\n        data.end = shallow(token.start)\n\n        if (data.start.offset === data.end.offset) {\n          assign(data, token)\n        } else {\n          events.splice(\n            eventIndex,\n            0,\n            ['enter', token, context],\n            ['exit', token, context]\n          )\n          eventIndex += 2\n        }\n      }\n\n      eventIndex++\n    }\n  }\n\n  return events\n}\n\nexports.resolver = resolver\nexports.string = string\nexports.text = text\n", "'use strict'\n\nfunction miniflat(value) {\n  return value === null || value === undefined\n    ? []\n    : 'length' in value\n    ? value\n    : [value]\n}\n\nmodule.exports = miniflat\n", "'use strict'\n\nvar hasOwnProperty = require('../constant/has-own-property.js')\nvar chunkedSplice = require('./chunked-splice.js')\nvar miniflat = require('./miniflat.js')\n\nfunction combineExtensions(extensions) {\n  var all = {}\n  var index = -1\n\n  while (++index < extensions.length) {\n    extension(all, extensions[index])\n  }\n\n  return all\n}\n\nfunction extension(all, extension) {\n  var hook\n  var left\n  var right\n  var code\n\n  for (hook in extension) {\n    left = hasOwnProperty.call(all, hook) ? all[hook] : (all[hook] = {})\n    right = extension[hook]\n\n    for (code in right) {\n      left[code] = constructs(\n        miniflat(right[code]),\n        hasOwnProperty.call(left, code) ? left[code] : []\n      )\n    }\n  }\n}\n\nfunction constructs(list, existing) {\n  var index = -1\n  var before = []\n\n  while (++index < list.length) {\n    ;(list[index].add === 'after' ? existing : before).push(list[index])\n  }\n\n  chunkedSplice(existing, 0, 0, before)\n  return existing\n}\n\nmodule.exports = combineExtensions\n", "'use strict'\n\nvar chunkedSplice = require('./chunked-splice.js')\n\nfunction chunkedPush(list, items) {\n  if (list.length) {\n    chunkedSplice(list, list.length, 0, items)\n    return list\n  }\n\n  return items\n}\n\nmodule.exports = chunkedPush\n", "'use strict'\n\nfunction resolveAll(constructs, events, context) {\n  var called = []\n  var index = -1\n  var resolve\n\n  while (++index < constructs.length) {\n    resolve = constructs[index].resolveAll\n\n    if (resolve && called.indexOf(resolve) < 0) {\n      events = resolve(events, context)\n      called.push(resolve)\n    }\n  }\n\n  return events\n}\n\nmodule.exports = resolveAll\n", "'use strict'\n\nvar fromCharCode = require('../constant/from-char-code.js')\n\nfunction serializeChunks(chunks) {\n  var index = -1\n  var result = []\n  var chunk\n  var value\n  var atTab\n\n  while (++index < chunks.length) {\n    chunk = chunks[index]\n\n    if (typeof chunk === 'string') {\n      value = chunk\n    } else if (chunk === -5) {\n      value = '\\r'\n    } else if (chunk === -4) {\n      value = '\\n'\n    } else if (chunk === -3) {\n      value = '\\r' + '\\n'\n    } else if (chunk === -2) {\n      value = '\\t'\n    } else if (chunk === -1) {\n      if (atTab) continue\n      value = ' '\n    } else {\n      // Currently only replacement character.\n      value = fromCharCode(chunk)\n    }\n\n    atTab = chunk === -2\n    result.push(value)\n  }\n\n  return result.join('')\n}\n\nmodule.exports = serializeChunks\n", "'use strict'\n\nfunction sliceChunks(chunks, token) {\n  var startIndex = token.start._index\n  var startBufferIndex = token.start._bufferIndex\n  var endIndex = token.end._index\n  var endBufferIndex = token.end._bufferIndex\n  var view\n\n  if (startIndex === endIndex) {\n    view = [chunks[startIndex].slice(startBufferIndex, endBufferIndex)]\n  } else {\n    view = chunks.slice(startIndex, endIndex)\n\n    if (startBufferIndex > -1) {\n      view[0] = view[0].slice(startBufferIndex)\n    }\n\n    if (endBufferIndex > 0) {\n      view.push(chunks[endIndex].slice(0, endBufferIndex))\n    }\n  }\n\n  return view\n}\n\nmodule.exports = sliceChunks\n", "'use strict'\n\nvar assign = require('../constant/assign.js')\nvar markdownLineEnding = require('../character/markdown-line-ending.js')\nvar chunkedPush = require('./chunked-push.js')\nvar chunkedSplice = require('./chunked-splice.js')\nvar miniflat = require('./miniflat.js')\nvar resolveAll = require('./resolve-all.js')\nvar serializeChunks = require('./serialize-chunks.js')\nvar shallow = require('./shallow.js')\nvar sliceChunks = require('./slice-chunks.js')\n\n// Create a tokenizer.\n// Tokenizers deal with one type of data (e.g., containers, flow, text).\n// The parser is the object dealing with it all.\n// `initialize` works like other constructs, except that only its `tokenize`\n// function is used, in which case it doesn\u2019t receive an `ok` or `nok`.\n// `from` can be given to set the point before the first character, although\n// when further lines are indented, they must be set with `defineSkip`.\nfunction createTokenizer(parser, initialize, from) {\n  var point = from\n    ? shallow(from)\n    : {\n        line: 1,\n        column: 1,\n        offset: 0\n      }\n  var columnStart = {}\n  var resolveAllConstructs = []\n  var chunks = []\n  var stack = []\n\n  var effects = {\n    consume: consume,\n    enter: enter,\n    exit: exit,\n    attempt: constructFactory(onsuccessfulconstruct),\n    check: constructFactory(onsuccessfulcheck),\n    interrupt: constructFactory(onsuccessfulcheck, {\n      interrupt: true\n    }),\n    lazy: constructFactory(onsuccessfulcheck, {\n      lazy: true\n    })\n  } // State and tools for resolving and serializing.\n\n  var context = {\n    previous: null,\n    events: [],\n    parser: parser,\n    sliceStream: sliceStream,\n    sliceSerialize: sliceSerialize,\n    now: now,\n    defineSkip: skip,\n    write: write\n  } // The state function.\n\n  var state = initialize.tokenize.call(context, effects) // Track which character we expect to be consumed, to catch bugs.\n\n  if (initialize.resolveAll) {\n    resolveAllConstructs.push(initialize)\n  } // Store where we are in the input stream.\n\n  point._index = 0\n  point._bufferIndex = -1\n  return context\n\n  function write(slice) {\n    chunks = chunkedPush(chunks, slice)\n    main() // Exit if we\u2019re not done, resolve might change stuff.\n\n    if (chunks[chunks.length - 1] !== null) {\n      return []\n    }\n\n    addResult(initialize, 0) // Otherwise, resolve, and exit.\n\n    context.events = resolveAll(resolveAllConstructs, context.events, context)\n    return context.events\n  } //\n  // Tools.\n  //\n\n  function sliceSerialize(token) {\n    return serializeChunks(sliceStream(token))\n  }\n\n  function sliceStream(token) {\n    return sliceChunks(chunks, token)\n  }\n\n  function now() {\n    return shallow(point)\n  }\n\n  function skip(value) {\n    columnStart[value.line] = value.column\n    accountForPotentialSkip()\n  } //\n  // State management.\n  //\n  // Main loop (note that `_index` and `_bufferIndex` in `point` are modified by\n  // `consume`).\n  // Here is where we walk through the chunks, which either include strings of\n  // several characters, or numerical character codes.\n  // The reason to do this in a loop instead of a call is so the stack can\n  // drain.\n\n  function main() {\n    var chunkIndex\n    var chunk\n\n    while (point._index < chunks.length) {\n      chunk = chunks[point._index] // If we\u2019re in a buffer chunk, loop through it.\n\n      if (typeof chunk === 'string') {\n        chunkIndex = point._index\n\n        if (point._bufferIndex < 0) {\n          point._bufferIndex = 0\n        }\n\n        while (\n          point._index === chunkIndex &&\n          point._bufferIndex < chunk.length\n        ) {\n          go(chunk.charCodeAt(point._bufferIndex))\n        }\n      } else {\n        go(chunk)\n      }\n    }\n  } // Deal with one code.\n\n  function go(code) {\n    state = state(code)\n  } // Move a character forward.\n\n  function consume(code) {\n    if (markdownLineEnding(code)) {\n      point.line++\n      point.column = 1\n      point.offset += code === -3 ? 2 : 1\n      accountForPotentialSkip()\n    } else if (code !== -1) {\n      point.column++\n      point.offset++\n    } // Not in a string chunk.\n\n    if (point._bufferIndex < 0) {\n      point._index++\n    } else {\n      point._bufferIndex++ // At end of string chunk.\n\n      if (point._bufferIndex === chunks[point._index].length) {\n        point._bufferIndex = -1\n        point._index++\n      }\n    } // Expose the previous character.\n\n    context.previous = code // Mark as consumed.\n  } // Start a token.\n\n  function enter(type, fields) {\n    var token = fields || {}\n    token.type = type\n    token.start = now()\n    context.events.push(['enter', token, context])\n    stack.push(token)\n    return token\n  } // Stop a token.\n\n  function exit(type) {\n    var token = stack.pop()\n    token.end = now()\n    context.events.push(['exit', token, context])\n    return token\n  } // Use results.\n\n  function onsuccessfulconstruct(construct, info) {\n    addResult(construct, info.from)\n  } // Discard results.\n\n  function onsuccessfulcheck(construct, info) {\n    info.restore()\n  } // Factory to attempt/check/interrupt.\n\n  function constructFactory(onreturn, fields) {\n    return hook // Handle either an object mapping codes to constructs, a list of\n    // constructs, or a single construct.\n\n    function hook(constructs, returnState, bogusState) {\n      var listOfConstructs\n      var constructIndex\n      var currentConstruct\n      var info\n      return constructs.tokenize || 'length' in constructs\n        ? handleListOfConstructs(miniflat(constructs))\n        : handleMapOfConstructs\n\n      function handleMapOfConstructs(code) {\n        if (code in constructs || null in constructs) {\n          return handleListOfConstructs(\n            constructs.null\n              ? /* c8 ignore next */\n                miniflat(constructs[code]).concat(miniflat(constructs.null))\n              : constructs[code]\n          )(code)\n        }\n\n        return bogusState(code)\n      }\n\n      function handleListOfConstructs(list) {\n        listOfConstructs = list\n        constructIndex = 0\n        return handleConstruct(list[constructIndex])\n      }\n\n      function handleConstruct(construct) {\n        return start\n\n        function start(code) {\n          // To do: not nede to store if there is no bogus state, probably?\n          // Currently doesn\u2019t work because `inspect` in document does a check\n          // w/o a bogus, which doesn\u2019t make sense. But it does seem to help perf\n          // by not storing.\n          info = store()\n          currentConstruct = construct\n\n          if (!construct.partial) {\n            context.currentConstruct = construct\n          }\n\n          if (\n            construct.name &&\n            context.parser.constructs.disable.null.indexOf(construct.name) > -1\n          ) {\n            return nok()\n          }\n\n          return construct.tokenize.call(\n            fields ? assign({}, context, fields) : context,\n            effects,\n            ok,\n            nok\n          )(code)\n        }\n      }\n\n      function ok(code) {\n        onreturn(currentConstruct, info)\n        return returnState\n      }\n\n      function nok(code) {\n        info.restore()\n\n        if (++constructIndex < listOfConstructs.length) {\n          return handleConstruct(listOfConstructs[constructIndex])\n        }\n\n        return bogusState\n      }\n    }\n  }\n\n  function addResult(construct, from) {\n    if (construct.resolveAll && resolveAllConstructs.indexOf(construct) < 0) {\n      resolveAllConstructs.push(construct)\n    }\n\n    if (construct.resolve) {\n      chunkedSplice(\n        context.events,\n        from,\n        context.events.length - from,\n        construct.resolve(context.events.slice(from), context)\n      )\n    }\n\n    if (construct.resolveTo) {\n      context.events = construct.resolveTo(context.events, context)\n    }\n  }\n\n  function store() {\n    var startPoint = now()\n    var startPrevious = context.previous\n    var startCurrentConstruct = context.currentConstruct\n    var startEventsIndex = context.events.length\n    var startStack = Array.from(stack)\n    return {\n      restore: restore,\n      from: startEventsIndex\n    }\n\n    function restore() {\n      point = startPoint\n      context.previous = startPrevious\n      context.currentConstruct = startCurrentConstruct\n      context.events.length = startEventsIndex\n      stack = startStack\n      accountForPotentialSkip()\n    }\n  }\n\n  function accountForPotentialSkip() {\n    if (point.line in columnStart && point.column < 2) {\n      point.column = columnStart[point.line]\n      point.offset += columnStart[point.line] - 1\n    }\n  }\n}\n\nmodule.exports = createTokenizer\n", "'use strict'\n\nfunction markdownLineEndingOrSpace(code) {\n  return code < 0 || code === 32\n}\n\nmodule.exports = markdownLineEndingOrSpace\n", "'use strict'\n\n// This module is generated by `script/`.\n//\n// CommonMark handles attention (emphasis, strong) markers based on what comes\n// before or after them.\n// One such difference is if those characters are Unicode punctuation.\n// This script is generated from the Unicode data.\nvar unicodePunctuation = /[!-\\/:-@\\[-`\\{-~\\xA1\\xA7\\xAB\\xB6\\xB7\\xBB\\xBF\\u037E\\u0387\\u055A-\\u055F\\u0589\\u058A\\u05BE\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061E\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u09FD\\u0A76\\u0AF0\\u0C77\\u0C84\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F14\\u0F3A-\\u0F3D\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1360-\\u1368\\u1400\\u166E\\u169B\\u169C\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B5A-\\u1B60\\u1BFC-\\u1BFF\\u1C3B-\\u1C3F\\u1C7E\\u1C7F\\u1CC0-\\u1CC7\\u1CD3\\u2010-\\u2027\\u2030-\\u2043\\u2045-\\u2051\\u2053-\\u205E\\u207D\\u207E\\u208D\\u208E\\u2308-\\u230B\\u2329\\u232A\\u2768-\\u2775\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2CF9-\\u2CFC\\u2CFE\\u2CFF\\u2D70\\u2E00-\\u2E2E\\u2E30-\\u2E4F\\u2E52\\u3001-\\u3003\\u3008-\\u3011\\u3014-\\u301F\\u3030\\u303D\\u30A0\\u30FB\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA673\\uA67E\\uA6F2-\\uA6F7\\uA874-\\uA877\\uA8CE\\uA8CF\\uA8F8-\\uA8FA\\uA8FC\\uA92E\\uA92F\\uA95F\\uA9C1-\\uA9CD\\uA9DE\\uA9DF\\uAA5C-\\uAA5F\\uAADE\\uAADF\\uAAF0\\uAAF1\\uABEB\\uFD3E\\uFD3F\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE61\\uFE63\\uFE68\\uFE6A\\uFE6B\\uFF01-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF0F\\uFF1A\\uFF1B\\uFF1F\\uFF20\\uFF3B-\\uFF3D\\uFF3F\\uFF5B\\uFF5D\\uFF5F-\\uFF65]/\n\nmodule.exports = unicodePunctuation\n", "'use strict'\n\nvar fromCharCode = require('../constant/from-char-code.js')\n\nfunction regexCheck(regex) {\n  return check\n\n  function check(code) {\n    return regex.test(fromCharCode(code))\n  }\n}\n\nmodule.exports = regexCheck\n", "'use strict'\n\nvar unicodePunctuationRegex = require('../constant/unicode-punctuation-regex.js')\nvar regexCheck = require('../util/regex-check.js')\n\n// In fact adds to the bundle size.\n\nvar unicodePunctuation = regexCheck(unicodePunctuationRegex)\n\nmodule.exports = unicodePunctuation\n", "'use strict'\n\nvar regexCheck = require('../util/regex-check.js')\n\nvar unicodeWhitespace = regexCheck(/\\s/)\n\nmodule.exports = unicodeWhitespace\n", "'use strict'\n\nvar markdownLineEndingOrSpace = require('../character/markdown-line-ending-or-space.js')\nvar unicodePunctuation = require('../character/unicode-punctuation.js')\nvar unicodeWhitespace = require('../character/unicode-whitespace.js')\n\n// Classify whether a character is unicode whitespace, unicode punctuation, or\n// anything else.\n// Used for attention (emphasis, strong), whose sequences can open or close\n// based on the class of surrounding characters.\nfunction classifyCharacter(code) {\n  if (\n    code === null ||\n    markdownLineEndingOrSpace(code) ||\n    unicodeWhitespace(code)\n  ) {\n    return 1\n  }\n\n  if (unicodePunctuation(code)) {\n    return 2\n  }\n}\n\nmodule.exports = classifyCharacter\n", "'use strict'\n\n// chunks (replacement characters, tabs, or line endings).\n\nfunction movePoint(point, offset) {\n  point.column += offset\n  point.offset += offset\n  point._bufferIndex += offset\n  return point\n}\n\nmodule.exports = movePoint\n", "'use strict'\n\nvar chunkedPush = require('../util/chunked-push.js')\nvar chunkedSplice = require('../util/chunked-splice.js')\nvar classifyCharacter = require('../util/classify-character.js')\nvar movePoint = require('../util/move-point.js')\nvar resolveAll = require('../util/resolve-all.js')\nvar shallow = require('../util/shallow.js')\n\nvar attention = {\n  name: 'attention',\n  tokenize: tokenizeAttention,\n  resolveAll: resolveAllAttention\n}\n\nfunction resolveAllAttention(events, context) {\n  var index = -1\n  var open\n  var group\n  var text\n  var openingSequence\n  var closingSequence\n  var use\n  var nextEvents\n  var offset // Walk through all events.\n  //\n  // Note: performance of this is fine on an mb of normal markdown, but it\u2019s\n  // a bottleneck for malicious stuff.\n\n  while (++index < events.length) {\n    // Find a token that can close.\n    if (\n      events[index][0] === 'enter' &&\n      events[index][1].type === 'attentionSequence' &&\n      events[index][1]._close\n    ) {\n      open = index // Now walk back to find an opener.\n\n      while (open--) {\n        // Find a token that can open the closer.\n        if (\n          events[open][0] === 'exit' &&\n          events[open][1].type === 'attentionSequence' &&\n          events[open][1]._open && // If the markers are the same:\n          context.sliceSerialize(events[open][1]).charCodeAt(0) ===\n            context.sliceSerialize(events[index][1]).charCodeAt(0)\n        ) {\n          // If the opening can close or the closing can open,\n          // and the close size *is not* a multiple of three,\n          // but the sum of the opening and closing size *is* multiple of three,\n          // then don\u2019t match.\n          if (\n            (events[open][1]._close || events[index][1]._open) &&\n            (events[index][1].end.offset - events[index][1].start.offset) % 3 &&\n            !(\n              (events[open][1].end.offset -\n                events[open][1].start.offset +\n                events[index][1].end.offset -\n                events[index][1].start.offset) %\n              3\n            )\n          ) {\n            continue\n          } // Number of markers to use from the sequence.\n\n          use =\n            events[open][1].end.offset - events[open][1].start.offset > 1 &&\n            events[index][1].end.offset - events[index][1].start.offset > 1\n              ? 2\n              : 1\n          openingSequence = {\n            type: use > 1 ? 'strongSequence' : 'emphasisSequence',\n            start: movePoint(shallow(events[open][1].end), -use),\n            end: shallow(events[open][1].end)\n          }\n          closingSequence = {\n            type: use > 1 ? 'strongSequence' : 'emphasisSequence',\n            start: shallow(events[index][1].start),\n            end: movePoint(shallow(events[index][1].start), use)\n          }\n          text = {\n            type: use > 1 ? 'strongText' : 'emphasisText',\n            start: shallow(events[open][1].end),\n            end: shallow(events[index][1].start)\n          }\n          group = {\n            type: use > 1 ? 'strong' : 'emphasis',\n            start: shallow(openingSequence.start),\n            end: shallow(closingSequence.end)\n          }\n          events[open][1].end = shallow(openingSequence.start)\n          events[index][1].start = shallow(closingSequence.end)\n          nextEvents = [] // If there are more markers in the opening, add them before.\n\n          if (events[open][1].end.offset - events[open][1].start.offset) {\n            nextEvents = chunkedPush(nextEvents, [\n              ['enter', events[open][1], context],\n              ['exit', events[open][1], context]\n            ])\n          } // Opening.\n\n          nextEvents = chunkedPush(nextEvents, [\n            ['enter', group, context],\n            ['enter', openingSequence, context],\n            ['exit', openingSequence, context],\n            ['enter', text, context]\n          ]) // Between.\n\n          nextEvents = chunkedPush(\n            nextEvents,\n            resolveAll(\n              context.parser.constructs.insideSpan.null,\n              events.slice(open + 1, index),\n              context\n            )\n          ) // Closing.\n\n          nextEvents = chunkedPush(nextEvents, [\n            ['exit', text, context],\n            ['enter', closingSequence, context],\n            ['exit', closingSequence, context],\n            ['exit', group, context]\n          ]) // If there are more markers in the closing, add them after.\n\n          if (events[index][1].end.offset - events[index][1].start.offset) {\n            offset = 2\n            nextEvents = chunkedPush(nextEvents, [\n              ['enter', events[index][1], context],\n              ['exit', events[index][1], context]\n            ])\n          } else {\n            offset = 0\n          }\n\n          chunkedSplice(events, open - 1, index - open + 3, nextEvents)\n          index = open + nextEvents.length - offset - 2\n          break\n        }\n      }\n    }\n  } // Remove remaining sequences.\n\n  index = -1\n\n  while (++index < events.length) {\n    if (events[index][1].type === 'attentionSequence') {\n      events[index][1].type = 'data'\n    }\n  }\n\n  return events\n}\n\nfunction tokenizeAttention(effects, ok) {\n  var before = classifyCharacter(this.previous)\n  var marker\n  return start\n\n  function start(code) {\n    effects.enter('attentionSequence')\n    marker = code\n    return sequence(code)\n  }\n\n  function sequence(code) {\n    var token\n    var after\n    var open\n    var close\n\n    if (code === marker) {\n      effects.consume(code)\n      return sequence\n    }\n\n    token = effects.exit('attentionSequence')\n    after = classifyCharacter(code)\n    open = !after || (after === 2 && before)\n    close = !before || (before === 2 && after)\n    token._open = marker === 42 ? open : open && (before || !close)\n    token._close = marker === 42 ? close : close && (after || !open)\n    return ok(code)\n  }\n}\n\nmodule.exports = attention\n", "'use strict'\n\nvar regexCheck = require('../util/regex-check.js')\n\nvar asciiAlpha = regexCheck(/[A-Za-z]/)\n\nmodule.exports = asciiAlpha\n", "'use strict'\n\nvar regexCheck = require('../util/regex-check.js')\n\nvar asciiAlphanumeric = regexCheck(/[\\dA-Za-z]/)\n\nmodule.exports = asciiAlphanumeric\n", "'use strict'\n\nvar regexCheck = require('../util/regex-check.js')\n\nvar asciiAtext = regexCheck(/[#-'*+\\--9=?A-Z^-~]/)\n\nmodule.exports = asciiAtext\n", "'use strict'\n\n// Note: EOF is seen as ASCII control here, because `null < 32 == true`.\nfunction asciiControl(code) {\n  return (\n    // Special whitespace codes (which have negative values), C0 and Control\n    // character DEL\n    code < 32 || code === 127\n  )\n}\n\nmodule.exports = asciiControl\n", "'use strict'\n\nvar asciiAlpha = require('../character/ascii-alpha.js')\nvar asciiAlphanumeric = require('../character/ascii-alphanumeric.js')\nvar asciiAtext = require('../character/ascii-atext.js')\nvar asciiControl = require('../character/ascii-control.js')\n\nvar autolink = {\n  name: 'autolink',\n  tokenize: tokenizeAutolink\n}\n\nfunction tokenizeAutolink(effects, ok, nok) {\n  var size = 1\n  return start\n\n  function start(code) {\n    effects.enter('autolink')\n    effects.enter('autolinkMarker')\n    effects.consume(code)\n    effects.exit('autolinkMarker')\n    effects.enter('autolinkProtocol')\n    return open\n  }\n\n  function open(code) {\n    if (asciiAlpha(code)) {\n      effects.consume(code)\n      return schemeOrEmailAtext\n    }\n\n    return asciiAtext(code) ? emailAtext(code) : nok(code)\n  }\n\n  function schemeOrEmailAtext(code) {\n    return code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)\n      ? schemeInsideOrEmailAtext(code)\n      : emailAtext(code)\n  }\n\n  function schemeInsideOrEmailAtext(code) {\n    if (code === 58) {\n      effects.consume(code)\n      return urlInside\n    }\n\n    if (\n      (code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) &&\n      size++ < 32\n    ) {\n      effects.consume(code)\n      return schemeInsideOrEmailAtext\n    }\n\n    return emailAtext(code)\n  }\n\n  function urlInside(code) {\n    if (code === 62) {\n      effects.exit('autolinkProtocol')\n      return end(code)\n    }\n\n    if (code === 32 || code === 60 || asciiControl(code)) {\n      return nok(code)\n    }\n\n    effects.consume(code)\n    return urlInside\n  }\n\n  function emailAtext(code) {\n    if (code === 64) {\n      effects.consume(code)\n      size = 0\n      return emailAtSignOrDot\n    }\n\n    if (asciiAtext(code)) {\n      effects.consume(code)\n      return emailAtext\n    }\n\n    return nok(code)\n  }\n\n  function emailAtSignOrDot(code) {\n    return asciiAlphanumeric(code) ? emailLabel(code) : nok(code)\n  }\n\n  function emailLabel(code) {\n    if (code === 46) {\n      effects.consume(code)\n      size = 0\n      return emailAtSignOrDot\n    }\n\n    if (code === 62) {\n      // Exit, then change the type.\n      effects.exit('autolinkProtocol').type = 'autolinkEmail'\n      return end(code)\n    }\n\n    return emailValue(code)\n  }\n\n  function emailValue(code) {\n    if ((code === 45 || asciiAlphanumeric(code)) && size++ < 63) {\n      effects.consume(code)\n      return code === 45 ? emailValue : emailLabel\n    }\n\n    return nok(code)\n  }\n\n  function end(code) {\n    effects.enter('autolinkMarker')\n    effects.consume(code)\n    effects.exit('autolinkMarker')\n    effects.exit('autolink')\n    return ok\n  }\n}\n\nmodule.exports = autolink\n", "'use strict'\n\nvar markdownSpace = require('../character/markdown-space.js')\nvar factorySpace = require('./factory-space.js')\n\nvar blockQuote = {\n  name: 'blockQuote',\n  tokenize: tokenizeBlockQuoteStart,\n  continuation: {\n    tokenize: tokenizeBlockQuoteContinuation\n  },\n  exit: exit\n}\n\nfunction tokenizeBlockQuoteStart(effects, ok, nok) {\n  var self = this\n  return start\n\n  function start(code) {\n    if (code === 62) {\n      if (!self.containerState.open) {\n        effects.enter('blockQuote', {\n          _container: true\n        })\n        self.containerState.open = true\n      }\n\n      effects.enter('blockQuotePrefix')\n      effects.enter('blockQuoteMarker')\n      effects.consume(code)\n      effects.exit('blockQuoteMarker')\n      return after\n    }\n\n    return nok(code)\n  }\n\n  function after(code) {\n    if (markdownSpace(code)) {\n      effects.enter('blockQuotePrefixWhitespace')\n      effects.consume(code)\n      effects.exit('blockQuotePrefixWhitespace')\n      effects.exit('blockQuotePrefix')\n      return ok\n    }\n\n    effects.exit('blockQuotePrefix')\n    return ok(code)\n  }\n}\n\nfunction tokenizeBlockQuoteContinuation(effects, ok, nok) {\n  return factorySpace(\n    effects,\n    effects.attempt(blockQuote, ok, nok),\n    'linePrefix',\n    this.parser.constructs.disable.null.indexOf('codeIndented') > -1\n      ? undefined\n      : 4\n  )\n}\n\nfunction exit(effects) {\n  effects.exit('blockQuote')\n}\n\nmodule.exports = blockQuote\n", "'use strict'\n\nvar regexCheck = require('../util/regex-check.js')\n\nvar asciiPunctuation = regexCheck(/[!-/:-@[-`{-~]/)\n\nmodule.exports = asciiPunctuation\n", "'use strict'\n\nvar asciiPunctuation = require('../character/ascii-punctuation.js')\n\nvar characterEscape = {\n  name: 'characterEscape',\n  tokenize: tokenizeCharacterEscape\n}\n\nfunction tokenizeCharacterEscape(effects, ok, nok) {\n  return start\n\n  function start(code) {\n    effects.enter('characterEscape')\n    effects.enter('escapeMarker')\n    effects.consume(code)\n    effects.exit('escapeMarker')\n    return open\n  }\n\n  function open(code) {\n    if (asciiPunctuation(code)) {\n      effects.enter('characterEscapeValue')\n      effects.consume(code)\n      effects.exit('characterEscapeValue')\n      effects.exit('characterEscape')\n      return ok\n    }\n\n    return nok(code)\n  }\n}\n\nmodule.exports = characterEscape\n", "{\n  \"AEli\": \"\u00C6\",\n  \"AElig\": \"\u00C6\",\n  \"AM\": \"&\",\n  \"AMP\": \"&\",\n  \"Aacut\": \"\u00C1\",\n  \"Aacute\": \"\u00C1\",\n  \"Abreve\": \"\u0102\",\n  \"Acir\": \"\u00C2\",\n  \"Acirc\": \"\u00C2\",\n  \"Acy\": \"\u0410\",\n  \"Afr\": \"\uD835\uDD04\",\n  \"Agrav\": \"\u00C0\",\n  \"Agrave\": \"\u00C0\",\n  \"Alpha\": \"\u0391\",\n  \"Amacr\": \"\u0100\",\n  \"And\": \"\u2A53\",\n  \"Aogon\": \"\u0104\",\n  \"Aopf\": \"\uD835\uDD38\",\n  \"ApplyFunction\": \"\u2061\",\n  \"Arin\": \"\u00C5\",\n  \"Aring\": \"\u00C5\",\n  \"Ascr\": \"\uD835\uDC9C\",\n  \"Assign\": \"\u2254\",\n  \"Atild\": \"\u00C3\",\n  \"Atilde\": \"\u00C3\",\n  \"Aum\": \"\u00C4\",\n  \"Auml\": \"\u00C4\",\n  \"Backslash\": \"\u2216\",\n  \"Barv\": \"\u2AE7\",\n  \"Barwed\": \"\u2306\",\n  \"Bcy\": \"\u0411\",\n  \"Because\": \"\u2235\",\n  \"Bernoullis\": \"\u212C\",\n  \"Beta\": \"\u0392\",\n  \"Bfr\": \"\uD835\uDD05\",\n  \"Bopf\": \"\uD835\uDD39\",\n  \"Breve\": \"\u02D8\",\n  \"Bscr\": \"\u212C\",\n  \"Bumpeq\": \"\u224E\",\n  \"CHcy\": \"\u0427\",\n  \"COP\": \"\u00A9\",\n  \"COPY\": \"\u00A9\",\n  \"Cacute\": \"\u0106\",\n  \"Cap\": \"\u22D2\",\n  \"CapitalDifferentialD\": \"\u2145\",\n  \"Cayleys\": \"\u212D\",\n  \"Ccaron\": \"\u010C\",\n  \"Ccedi\": \"\u00C7\",\n  \"Ccedil\": \"\u00C7\",\n  \"Ccirc\": \"\u0108\",\n  \"Cconint\": \"\u2230\",\n  \"Cdot\": \"\u010A\",\n  \"Cedilla\": \"\u00B8\",\n  \"CenterDot\": \"\u00B7\",\n  \"Cfr\": \"\u212D\",\n  \"Chi\": \"\u03A7\",\n  \"CircleDot\": \"\u2299\",\n  \"CircleMinus\": \"\u2296\",\n  \"CirclePlus\": \"\u2295\",\n  \"CircleTimes\": \"\u2297\",\n  \"ClockwiseContourIntegral\": \"\u2232\",\n  \"CloseCurlyDoubleQuote\": \"\u201D\",\n  \"CloseCurlyQuote\": \"\u2019\",\n  \"Colon\": \"\u2237\",\n  \"Colone\": \"\u2A74\",\n  \"Congruent\": \"\u2261\",\n  \"Conint\": \"\u222F\",\n  \"ContourIntegral\": \"\u222E\",\n  \"Copf\": \"\u2102\",\n  \"Coproduct\": \"\u2210\",\n  \"CounterClockwiseContourIntegral\": \"\u2233\",\n  \"Cross\": \"\u2A2F\",\n  \"Cscr\": \"\uD835\uDC9E\",\n  \"Cup\": \"\u22D3\",\n  \"CupCap\": \"\u224D\",\n  \"DD\": \"\u2145\",\n  \"DDotrahd\": \"\u2911\",\n  \"DJcy\": \"\u0402\",\n  \"DScy\": \"\u0405\",\n  \"DZcy\": \"\u040F\",\n  \"Dagger\": \"\u2021\",\n  \"Darr\": \"\u21A1\",\n  \"Dashv\": \"\u2AE4\",\n  \"Dcaron\": \"\u010E\",\n  \"Dcy\": \"\u0414\",\n  \"Del\": \"\u2207\",\n  \"Delta\": \"\u0394\",\n  \"Dfr\": \"\uD835\uDD07\",\n  \"DiacriticalAcute\": \"\u00B4\",\n  \"DiacriticalDot\": \"\u02D9\",\n  \"DiacriticalDoubleAcute\": \"\u02DD\",\n  \"DiacriticalGrave\": \"`\",\n  \"DiacriticalTilde\": \"\u02DC\",\n  \"Diamond\": \"\u22C4\",\n  \"DifferentialD\": \"\u2146\",\n  \"Dopf\": \"\uD835\uDD3B\",\n  \"Dot\": \"\u00A8\",\n  \"DotDot\": \"\u20DC\",\n  \"DotEqual\": \"\u2250\",\n  \"DoubleContourIntegral\": \"\u222F\",\n  \"DoubleDot\": \"\u00A8\",\n  \"DoubleDownArrow\": \"\u21D3\",\n  \"DoubleLeftArrow\": \"\u21D0\",\n  \"DoubleLeftRightArrow\": \"\u21D4\",\n  \"DoubleLeftTee\": \"\u2AE4\",\n  \"DoubleLongLeftArrow\": \"\u27F8\",\n  \"DoubleLongLeftRightArrow\": \"\u27FA\",\n  \"DoubleLongRightArrow\": \"\u27F9\",\n  \"DoubleRightArrow\": \"\u21D2\",\n  \"DoubleRightTee\": \"\u22A8\",\n  \"DoubleUpArrow\": \"\u21D1\",\n  \"DoubleUpDownArrow\": \"\u21D5\",\n  \"DoubleVerticalBar\": \"\u2225\",\n  \"DownArrow\": \"\u2193\",\n  \"DownArrowBar\": \"\u2913\",\n  \"DownArrowUpArrow\": \"\u21F5\",\n  \"DownBreve\": \"\u0311\",\n  \"DownLeftRightVector\": \"\u2950\",\n  \"DownLeftTeeVector\": \"\u295E\",\n  \"DownLeftVector\": \"\u21BD\",\n  \"DownLeftVectorBar\": \"\u2956\",\n  \"DownRightTeeVector\": \"\u295F\",\n  \"DownRightVector\": \"\u21C1\",\n  \"DownRightVectorBar\": \"\u2957\",\n  \"DownTee\": \"\u22A4\",\n  \"DownTeeArrow\": \"\u21A7\",\n  \"Downarrow\": \"\u21D3\",\n  \"Dscr\": \"\uD835\uDC9F\",\n  \"Dstrok\": \"\u0110\",\n  \"ENG\": \"\u014A\",\n  \"ET\": \"\u00D0\",\n  \"ETH\": \"\u00D0\",\n  \"Eacut\": \"\u00C9\",\n  \"Eacute\": \"\u00C9\",\n  \"Ecaron\": \"\u011A\",\n  \"Ecir\": \"\u00CA\",\n  \"Ecirc\": \"\u00CA\",\n  \"Ecy\": \"\u042D\",\n  \"Edot\": \"\u0116\",\n  \"Efr\": \"\uD835\uDD08\",\n  \"Egrav\": \"\u00C8\",\n  \"Egrave\": \"\u00C8\",\n  \"Element\": \"\u2208\",\n  \"Emacr\": \"\u0112\",\n  \"EmptySmallSquare\": \"\u25FB\",\n  \"EmptyVerySmallSquare\": \"\u25AB\",\n  \"Eogon\": \"\u0118\",\n  \"Eopf\": \"\uD835\uDD3C\",\n  \"Epsilon\": \"\u0395\",\n  \"Equal\": \"\u2A75\",\n  \"EqualTilde\": \"\u2242\",\n  \"Equilibrium\": \"\u21CC\",\n  \"Escr\": \"\u2130\",\n  \"Esim\": \"\u2A73\",\n  \"Eta\": \"\u0397\",\n  \"Eum\": \"\u00CB\",\n  \"Euml\": \"\u00CB\",\n  \"Exists\": \"\u2203\",\n  \"ExponentialE\": \"\u2147\",\n  \"Fcy\": \"\u0424\",\n  \"Ffr\": \"\uD835\uDD09\",\n  \"FilledSmallSquare\": \"\u25FC\",\n  \"FilledVerySmallSquare\": \"\u25AA\",\n  \"Fopf\": \"\uD835\uDD3D\",\n  \"ForAll\": \"\u2200\",\n  \"Fouriertrf\": \"\u2131\",\n  \"Fscr\": \"\u2131\",\n  \"GJcy\": \"\u0403\",\n  \"G\": \">\",\n  \"GT\": \">\",\n  \"Gamma\": \"\u0393\",\n  \"Gammad\": \"\u03DC\",\n  \"Gbreve\": \"\u011E\",\n  \"Gcedil\": \"\u0122\",\n  \"Gcirc\": \"\u011C\",\n  \"Gcy\": \"\u0413\",\n  \"Gdot\": \"\u0120\",\n  \"Gfr\": \"\uD835\uDD0A\",\n  \"Gg\": \"\u22D9\",\n  \"Gopf\": \"\uD835\uDD3E\",\n  \"GreaterEqual\": \"\u2265\",\n  \"GreaterEqualLess\": \"\u22DB\",\n  \"GreaterFullEqual\": \"\u2267\",\n  \"GreaterGreater\": \"\u2AA2\",\n  \"GreaterLess\": \"\u2277\",\n  \"GreaterSlantEqual\": \"\u2A7E\",\n  \"GreaterTilde\": \"\u2273\",\n  \"Gscr\": \"\uD835\uDCA2\",\n  \"Gt\": \"\u226B\",\n  \"HARDcy\": \"\u042A\",\n  \"Hacek\": \"\u02C7\",\n  \"Hat\": \"^\",\n  \"Hcirc\": \"\u0124\",\n  \"Hfr\": \"\u210C\",\n  \"HilbertSpace\": \"\u210B\",\n  \"Hopf\": \"\u210D\",\n  \"HorizontalLine\": \"\u2500\",\n  \"Hscr\": \"\u210B\",\n  \"Hstrok\": \"\u0126\",\n  \"HumpDownHump\": \"\u224E\",\n  \"HumpEqual\": \"\u224F\",\n  \"IEcy\": \"\u0415\",\n  \"IJlig\": \"\u0132\",\n  \"IOcy\": \"\u0401\",\n  \"Iacut\": \"\u00CD\",\n  \"Iacute\": \"\u00CD\",\n  \"Icir\": \"\u00CE\",\n  \"Icirc\": \"\u00CE\",\n  \"Icy\": \"\u0418\",\n  \"Idot\": \"\u0130\",\n  \"Ifr\": \"\u2111\",\n  \"Igrav\": \"\u00CC\",\n  \"Igrave\": \"\u00CC\",\n  \"Im\": \"\u2111\",\n  \"Imacr\": \"\u012A\",\n  \"ImaginaryI\": \"\u2148\",\n  \"Implies\": \"\u21D2\",\n  \"Int\": \"\u222C\",\n  \"Integral\": \"\u222B\",\n  \"Intersection\": \"\u22C2\",\n  \"InvisibleComma\": \"\u2063\",\n  \"InvisibleTimes\": \"\u2062\",\n  \"Iogon\": \"\u012E\",\n  \"Iopf\": \"\uD835\uDD40\",\n  \"Iota\": \"\u0399\",\n  \"Iscr\": \"\u2110\",\n  \"Itilde\": \"\u0128\",\n  \"Iukcy\": \"\u0406\",\n  \"Ium\": \"\u00CF\",\n  \"Iuml\": \"\u00CF\",\n  \"Jcirc\": \"\u0134\",\n  \"Jcy\": \"\u0419\",\n  \"Jfr\": \"\uD835\uDD0D\",\n  \"Jopf\": \"\uD835\uDD41\",\n  \"Jscr\": \"\uD835\uDCA5\",\n  \"Jsercy\": \"\u0408\",\n  \"Jukcy\": \"\u0404\",\n  \"KHcy\": \"\u0425\",\n  \"KJcy\": \"\u040C\",\n  \"Kappa\": \"\u039A\",\n  \"Kcedil\": \"\u0136\",\n  \"Kcy\": \"\u041A\",\n  \"Kfr\": \"\uD835\uDD0E\",\n  \"Kopf\": \"\uD835\uDD42\",\n  \"Kscr\": \"\uD835\uDCA6\",\n  \"LJcy\": \"\u0409\",\n  \"L\": \"<\",\n  \"LT\": \"<\",\n  \"Lacute\": \"\u0139\",\n  \"Lambda\": \"\u039B\",\n  \"Lang\": \"\u27EA\",\n  \"Laplacetrf\": \"\u2112\",\n  \"Larr\": \"\u219E\",\n  \"Lcaron\": \"\u013D\",\n  \"Lcedil\": \"\u013B\",\n  \"Lcy\": \"\u041B\",\n  \"LeftAngleBracket\": \"\u27E8\",\n  \"LeftArrow\": \"\u2190\",\n  \"LeftArrowBar\": \"\u21E4\",\n  \"LeftArrowRightArrow\": \"\u21C6\",\n  \"LeftCeiling\": \"\u2308\",\n  \"LeftDoubleBracket\": \"\u27E6\",\n  \"LeftDownTeeVector\": \"\u2961\",\n  \"LeftDownVector\": \"\u21C3\",\n  \"LeftDownVectorBar\": \"\u2959\",\n  \"LeftFloor\": \"\u230A\",\n  \"LeftRightArrow\": \"\u2194\",\n  \"LeftRightVector\": \"\u294E\",\n  \"LeftTee\": \"\u22A3\",\n  \"LeftTeeArrow\": \"\u21A4\",\n  \"LeftTeeVector\": \"\u295A\",\n  \"LeftTriangle\": \"\u22B2\",\n  \"LeftTriangleBar\": \"\u29CF\",\n  \"LeftTriangleEqual\": \"\u22B4\",\n  \"LeftUpDownVector\": \"\u2951\",\n  \"LeftUpTeeVector\": \"\u2960\",\n  \"LeftUpVector\": \"\u21BF\",\n  \"LeftUpVectorBar\": \"\u2958\",\n  \"LeftVector\": \"\u21BC\",\n  \"LeftVectorBar\": \"\u2952\",\n  \"Leftarrow\": \"\u21D0\",\n  \"Leftrightarrow\": \"\u21D4\",\n  \"LessEqualGreater\": \"\u22DA\",\n  \"LessFullEqual\": \"\u2266\",\n  \"LessGreater\": \"\u2276\",\n  \"LessLess\": \"\u2AA1\",\n  \"LessSlantEqual\": \"\u2A7D\",\n  \"LessTilde\": \"\u2272\",\n  \"Lfr\": \"\uD835\uDD0F\",\n  \"Ll\": \"\u22D8\",\n  \"Lleftarrow\": \"\u21DA\",\n  \"Lmidot\": \"\u013F\",\n  \"LongLeftArrow\": \"\u27F5\",\n  \"LongLeftRightArrow\": \"\u27F7\",\n  \"LongRightArrow\": \"\u27F6\",\n  \"Longleftarrow\": \"\u27F8\",\n  \"Longleftrightarrow\": \"\u27FA\",\n  \"Longrightarrow\": \"\u27F9\",\n  \"Lopf\": \"\uD835\uDD43\",\n  \"LowerLeftArrow\": \"\u2199\",\n  \"LowerRightArrow\": \"\u2198\",\n  \"Lscr\": \"\u2112\",\n  \"Lsh\": \"\u21B0\",\n  \"Lstrok\": \"\u0141\",\n  \"Lt\": \"\u226A\",\n  \"Map\": \"\u2905\",\n  \"Mcy\": \"\u041C\",\n  \"MediumSpace\": \"\u205F\",\n  \"Mellintrf\": \"\u2133\",\n  \"Mfr\": \"\uD835\uDD10\",\n  \"MinusPlus\": \"\u2213\",\n  \"Mopf\": \"\uD835\uDD44\",\n  \"Mscr\": \"\u2133\",\n  \"Mu\": \"\u039C\",\n  \"NJcy\": \"\u040A\",\n  \"Nacute\": \"\u0143\",\n  \"Ncaron\": \"\u0147\",\n  \"Ncedil\": \"\u0145\",\n  \"Ncy\": \"\u041D\",\n  \"NegativeMediumSpace\": \"\u200B\",\n  \"NegativeThickSpace\": \"\u200B\",\n  \"NegativeThinSpace\": \"\u200B\",\n  \"NegativeVeryThinSpace\": \"\u200B\",\n  \"NestedGreaterGreater\": \"\u226B\",\n  \"NestedLessLess\": \"\u226A\",\n  \"NewLine\": \"\\n\",\n  \"Nfr\": \"\uD835\uDD11\",\n  \"NoBreak\": \"\u2060\",\n  \"NonBreakingSpace\": \"\u00A0\",\n  \"Nopf\": \"\u2115\",\n  \"Not\": \"\u2AEC\",\n  \"NotCongruent\": \"\u2262\",\n  \"NotCupCap\": \"\u226D\",\n  \"NotDoubleVerticalBar\": \"\u2226\",\n  \"NotElement\": \"\u2209\",\n  \"NotEqual\": \"\u2260\",\n  \"NotEqualTilde\": \"\u2242\u0338\",\n  \"NotExists\": \"\u2204\",\n  \"NotGreater\": \"\u226F\",\n  \"NotGreaterEqual\": \"\u2271\",\n  \"NotGreaterFullEqual\": \"\u2267\u0338\",\n  \"NotGreaterGreater\": \"\u226B\u0338\",\n  \"NotGreaterLess\": \"\u2279\",\n  \"NotGreaterSlantEqual\": \"\u2A7E\u0338\",\n  \"NotGreaterTilde\": \"\u2275\",\n  \"NotHumpDownHump\": \"\u224E\u0338\",\n  \"NotHumpEqual\": \"\u224F\u0338\",\n  \"NotLeftTriangle\": \"\u22EA\",\n  \"NotLeftTriangleBar\": \"\u29CF\u0338\",\n  \"NotLeftTriangleEqual\": \"\u22EC\",\n  \"NotLess\": \"\u226E\",\n  \"NotLessEqual\": \"\u2270\",\n  \"NotLessGreater\": \"\u2278\",\n  \"NotLessLess\": \"\u226A\u0338\",\n  \"NotLessSlantEqual\": \"\u2A7D\u0338\",\n  \"NotLessTilde\": \"\u2274\",\n  \"NotNestedGreaterGreater\": \"\u2AA2\u0338\",\n  \"NotNestedLessLess\": \"\u2AA1\u0338\",\n  \"NotPrecedes\": \"\u2280\",\n  \"NotPrecedesEqual\": \"\u2AAF\u0338\",\n  \"NotPrecedesSlantEqual\": \"\u22E0\",\n  \"NotReverseElement\": \"\u220C\",\n  \"NotRightTriangle\": \"\u22EB\",\n  \"NotRightTriangleBar\": \"\u29D0\u0338\",\n  \"NotRightTriangleEqual\": \"\u22ED\",\n  \"NotSquareSubset\": \"\u228F\u0338\",\n  \"NotSquareSubsetEqual\": \"\u22E2\",\n  \"NotSquareSuperset\": \"\u2290\u0338\",\n  \"NotSquareSupersetEqual\": \"\u22E3\",\n  \"NotSubset\": \"\u2282\u20D2\",\n  \"NotSubsetEqual\": \"\u2288\",\n  \"NotSucceeds\": \"\u2281\",\n  \"NotSucceedsEqual\": \"\u2AB0\u0338\",\n  \"NotSucceedsSlantEqual\": \"\u22E1\",\n  \"NotSucceedsTilde\": \"\u227F\u0338\",\n  \"NotSuperset\": \"\u2283\u20D2\",\n  \"NotSupersetEqual\": \"\u2289\",\n  \"NotTilde\": \"\u2241\",\n  \"NotTildeEqual\": \"\u2244\",\n  \"NotTildeFullEqual\": \"\u2247\",\n  \"NotTildeTilde\": \"\u2249\",\n  \"NotVerticalBar\": \"\u2224\",\n  \"Nscr\": \"\uD835\uDCA9\",\n  \"Ntild\": \"\u00D1\",\n  \"Ntilde\": \"\u00D1\",\n  \"Nu\": \"\u039D\",\n  \"OElig\": \"\u0152\",\n  \"Oacut\": \"\u00D3\",\n  \"Oacute\": \"\u00D3\",\n  \"Ocir\": \"\u00D4\",\n  \"Ocirc\": \"\u00D4\",\n  \"Ocy\": \"\u041E\",\n  \"Odblac\": \"\u0150\",\n  \"Ofr\": \"\uD835\uDD12\",\n  \"Ograv\": \"\u00D2\",\n  \"Ograve\": \"\u00D2\",\n  \"Omacr\": \"\u014C\",\n  \"Omega\": \"\u03A9\",\n  \"Omicron\": \"\u039F\",\n  \"Oopf\": \"\uD835\uDD46\",\n  \"OpenCurlyDoubleQuote\": \"\u201C\",\n  \"OpenCurlyQuote\": \"\u2018\",\n  \"Or\": \"\u2A54\",\n  \"Oscr\": \"\uD835\uDCAA\",\n  \"Oslas\": \"\u00D8\",\n  \"Oslash\": \"\u00D8\",\n  \"Otild\": \"\u00D5\",\n  \"Otilde\": \"\u00D5\",\n  \"Otimes\": \"\u2A37\",\n  \"Oum\": \"\u00D6\",\n  \"Ouml\": \"\u00D6\",\n  \"OverBar\": \"\u203E\",\n  \"OverBrace\": \"\u23DE\",\n  \"OverBracket\": \"\u23B4\",\n  \"OverParenthesis\": \"\u23DC\",\n  \"PartialD\": \"\u2202\",\n  \"Pcy\": \"\u041F\",\n  \"Pfr\": \"\uD835\uDD13\",\n  \"Phi\": \"\u03A6\",\n  \"Pi\": \"\u03A0\",\n  \"PlusMinus\": \"\u00B1\",\n  \"Poincareplane\": \"\u210C\",\n  \"Popf\": \"\u2119\",\n  \"Pr\": \"\u2ABB\",\n  \"Precedes\": \"\u227A\",\n  \"PrecedesEqual\": \"\u2AAF\",\n  \"PrecedesSlantEqual\": \"\u227C\",\n  \"PrecedesTilde\": \"\u227E\",\n  \"Prime\": \"\u2033\",\n  \"Product\": \"\u220F\",\n  \"Proportion\": \"\u2237\",\n  \"Proportional\": \"\u221D\",\n  \"Pscr\": \"\uD835\uDCAB\",\n  \"Psi\": \"\u03A8\",\n  \"QUO\": \"\\\"\",\n  \"QUOT\": \"\\\"\",\n  \"Qfr\": \"\uD835\uDD14\",\n  \"Qopf\": \"\u211A\",\n  \"Qscr\": \"\uD835\uDCAC\",\n  \"RBarr\": \"\u2910\",\n  \"RE\": \"\u00AE\",\n  \"REG\": \"\u00AE\",\n  \"Racute\": \"\u0154\",\n  \"Rang\": \"\u27EB\",\n  \"Rarr\": \"\u21A0\",\n  \"Rarrtl\": \"\u2916\",\n  \"Rcaron\": \"\u0158\",\n  \"Rcedil\": \"\u0156\",\n  \"Rcy\": \"\u0420\",\n  \"Re\": \"\u211C\",\n  \"ReverseElement\": \"\u220B\",\n  \"ReverseEquilibrium\": \"\u21CB\",\n  \"ReverseUpEquilibrium\": \"\u296F\",\n  \"Rfr\": \"\u211C\",\n  \"Rho\": \"\u03A1\",\n  \"RightAngleBracket\": \"\u27E9\",\n  \"RightArrow\": \"\u2192\",\n  \"RightArrowBar\": \"\u21E5\",\n  \"RightArrowLeftArrow\": \"\u21C4\",\n  \"RightCeiling\": \"\u2309\",\n  \"RightDoubleBracket\": \"\u27E7\",\n  \"RightDownTeeVector\": \"\u295D\",\n  \"RightDownVector\": \"\u21C2\",\n  \"RightDownVectorBar\": \"\u2955\",\n  \"RightFloor\": \"\u230B\",\n  \"RightTee\": \"\u22A2\",\n  \"RightTeeArrow\": \"\u21A6\",\n  \"RightTeeVector\": \"\u295B\",\n  \"RightTriangle\": \"\u22B3\",\n  \"RightTriangleBar\": \"\u29D0\",\n  \"RightTriangleEqual\": \"\u22B5\",\n  \"RightUpDownVector\": \"\u294F\",\n  \"RightUpTeeVector\": \"\u295C\",\n  \"RightUpVector\": \"\u21BE\",\n  \"RightUpVectorBar\": \"\u2954\",\n  \"RightVector\": \"\u21C0\",\n  \"RightVectorBar\": \"\u2953\",\n  \"Rightarrow\": \"\u21D2\",\n  \"Ropf\": \"\u211D\",\n  \"RoundImplies\": \"\u2970\",\n  \"Rrightarrow\": \"\u21DB\",\n  \"Rscr\": \"\u211B\",\n  \"Rsh\": \"\u21B1\",\n  \"RuleDelayed\": \"\u29F4\",\n  \"SHCHcy\": \"\u0429\",\n  \"SHcy\": \"\u0428\",\n  \"SOFTcy\": \"\u042C\",\n  \"Sacute\": \"\u015A\",\n  \"Sc\": \"\u2ABC\",\n  \"Scaron\": \"\u0160\",\n  \"Scedil\": \"\u015E\",\n  \"Scirc\": \"\u015C\",\n  \"Scy\": \"\u0421\",\n  \"Sfr\": \"\uD835\uDD16\",\n  \"ShortDownArrow\": \"\u2193\",\n  \"ShortLeftArrow\": \"\u2190\",\n  \"ShortRightArrow\": \"\u2192\",\n  \"ShortUpArrow\": \"\u2191\",\n  \"Sigma\": \"\u03A3\",\n  \"SmallCircle\": \"\u2218\",\n  \"Sopf\": \"\uD835\uDD4A\",\n  \"Sqrt\": \"\u221A\",\n  \"Square\": \"\u25A1\",\n  \"SquareIntersection\": \"\u2293\",\n  \"SquareSubset\": \"\u228F\",\n  \"SquareSubsetEqual\": \"\u2291\",\n  \"SquareSuperset\": \"\u2290\",\n  \"SquareSupersetEqual\": \"\u2292\",\n  \"SquareUnion\": \"\u2294\",\n  \"Sscr\": \"\uD835\uDCAE\",\n  \"Star\": \"\u22C6\",\n  \"Sub\": \"\u22D0\",\n  \"Subset\": \"\u22D0\",\n  \"SubsetEqual\": \"\u2286\",\n  \"Succeeds\": \"\u227B\",\n  \"SucceedsEqual\": \"\u2AB0\",\n  \"SucceedsSlantEqual\": \"\u227D\",\n  \"SucceedsTilde\": \"\u227F\",\n  \"SuchThat\": \"\u220B\",\n  \"Sum\": \"\u2211\",\n  \"Sup\": \"\u22D1\",\n  \"Superset\": \"\u2283\",\n  \"SupersetEqual\": \"\u2287\",\n  \"Supset\": \"\u22D1\",\n  \"THOR\": \"\u00DE\",\n  \"THORN\": \"\u00DE\",\n  \"TRADE\": \"\u2122\",\n  \"TSHcy\": \"\u040B\",\n  \"TScy\": \"\u0426\",\n  \"Tab\": \"\\t\",\n  \"Tau\": \"\u03A4\",\n  \"Tcaron\": \"\u0164\",\n  \"Tcedil\": \"\u0162\",\n  \"Tcy\": \"\u0422\",\n  \"Tfr\": \"\uD835\uDD17\",\n  \"Therefore\": \"\u2234\",\n  \"Theta\": \"\u0398\",\n  \"ThickSpace\": \"\u205F\u200A\",\n  \"ThinSpace\": \"\u2009\",\n  \"Tilde\": \"\u223C\",\n  \"TildeEqual\": \"\u2243\",\n  \"TildeFullEqual\": \"\u2245\",\n  \"TildeTilde\": \"\u2248\",\n  \"Topf\": \"\uD835\uDD4B\",\n  \"TripleDot\": \"\u20DB\",\n  \"Tscr\": \"\uD835\uDCAF\",\n  \"Tstrok\": \"\u0166\",\n  \"Uacut\": \"\u00DA\",\n  \"Uacute\": \"\u00DA\",\n  \"Uarr\": \"\u219F\",\n  \"Uarrocir\": \"\u2949\",\n  \"Ubrcy\": \"\u040E\",\n  \"Ubreve\": \"\u016C\",\n  \"Ucir\": \"\u00DB\",\n  \"Ucirc\": \"\u00DB\",\n  \"Ucy\": \"\u0423\",\n  \"Udblac\": \"\u0170\",\n  \"Ufr\": \"\uD835\uDD18\",\n  \"Ugrav\": \"\u00D9\",\n  \"Ugrave\": \"\u00D9\",\n  \"Umacr\": \"\u016A\",\n  \"UnderBar\": \"_\",\n  \"UnderBrace\": \"\u23DF\",\n  \"UnderBracket\": \"\u23B5\",\n  \"UnderParenthesis\": \"\u23DD\",\n  \"Union\": \"\u22C3\",\n  \"UnionPlus\": \"\u228E\",\n  \"Uogon\": \"\u0172\",\n  \"Uopf\": \"\uD835\uDD4C\",\n  \"UpArrow\": \"\u2191\",\n  \"UpArrowBar\": \"\u2912\",\n  \"UpArrowDownArrow\": \"\u21C5\",\n  \"UpDownArrow\": \"\u2195\",\n  \"UpEquilibrium\": \"\u296E\",\n  \"UpTee\": \"\u22A5\",\n  \"UpTeeArrow\": \"\u21A5\",\n  \"Uparrow\": \"\u21D1\",\n  \"Updownarrow\": \"\u21D5\",\n  \"UpperLeftArrow\": \"\u2196\",\n  \"UpperRightArrow\": \"\u2197\",\n  \"Upsi\": \"\u03D2\",\n  \"Upsilon\": \"\u03A5\",\n  \"Uring\": \"\u016E\",\n  \"Uscr\": \"\uD835\uDCB0\",\n  \"Utilde\": \"\u0168\",\n  \"Uum\": \"\u00DC\",\n  \"Uuml\": \"\u00DC\",\n  \"VDash\": \"\u22AB\",\n  \"Vbar\": \"\u2AEB\",\n  \"Vcy\": \"\u0412\",\n  \"Vdash\": \"\u22A9\",\n  \"Vdashl\": \"\u2AE6\",\n  \"Vee\": \"\u22C1\",\n  \"Verbar\": \"\u2016\",\n  \"Vert\": \"\u2016\",\n  \"VerticalBar\": \"\u2223\",\n  \"VerticalLine\": \"|\",\n  \"VerticalSeparator\": \"\u2758\",\n  \"VerticalTilde\": \"\u2240\",\n  \"VeryThinSpace\": \"\u200A\",\n  \"Vfr\": \"\uD835\uDD19\",\n  \"Vopf\": \"\uD835\uDD4D\",\n  \"Vscr\": \"\uD835\uDCB1\",\n  \"Vvdash\": \"\u22AA\",\n  \"Wcirc\": \"\u0174\",\n  \"Wedge\": \"\u22C0\",\n  \"Wfr\": \"\uD835\uDD1A\",\n  \"Wopf\": \"\uD835\uDD4E\",\n  \"Wscr\": \"\uD835\uDCB2\",\n  \"Xfr\": \"\uD835\uDD1B\",\n  \"Xi\": \"\u039E\",\n  \"Xopf\": \"\uD835\uDD4F\",\n  \"Xscr\": \"\uD835\uDCB3\",\n  \"YAcy\": \"\u042F\",\n  \"YIcy\": \"\u0407\",\n  \"YUcy\": \"\u042E\",\n  \"Yacut\": \"\u00DD\",\n  \"Yacute\": \"\u00DD\",\n  \"Ycirc\": \"\u0176\",\n  \"Ycy\": \"\u042B\",\n  \"Yfr\": \"\uD835\uDD1C\",\n  \"Yopf\": \"\uD835\uDD50\",\n  \"Yscr\": \"\uD835\uDCB4\",\n  \"Yuml\": \"\u0178\",\n  \"ZHcy\": \"\u0416\",\n  \"Zacute\": \"\u0179\",\n  \"Zcaron\": \"\u017D\",\n  \"Zcy\": \"\u0417\",\n  \"Zdot\": \"\u017B\",\n  \"ZeroWidthSpace\": \"\u200B\",\n  \"Zeta\": \"\u0396\",\n  \"Zfr\": \"\u2128\",\n  \"Zopf\": \"\u2124\",\n  \"Zscr\": \"\uD835\uDCB5\",\n  \"aacut\": \"\u00E1\",\n  \"aacute\": \"\u00E1\",\n  \"abreve\": \"\u0103\",\n  \"ac\": \"\u223E\",\n  \"acE\": \"\u223E\u0333\",\n  \"acd\": \"\u223F\",\n  \"acir\": \"\u00E2\",\n  \"acirc\": \"\u00E2\",\n  \"acut\": \"\u00B4\",\n  \"acute\": \"\u00B4\",\n  \"acy\": \"\u0430\",\n  \"aeli\": \"\u00E6\",\n  \"aelig\": \"\u00E6\",\n  \"af\": \"\u2061\",\n  \"afr\": \"\uD835\uDD1E\",\n  \"agrav\": \"\u00E0\",\n  \"agrave\": \"\u00E0\",\n  \"alefsym\": \"\u2135\",\n  \"aleph\": \"\u2135\",\n  \"alpha\": \"\u03B1\",\n  \"amacr\": \"\u0101\",\n  \"amalg\": \"\u2A3F\",\n  \"am\": \"&\",\n  \"amp\": \"&\",\n  \"and\": \"\u2227\",\n  \"andand\": \"\u2A55\",\n  \"andd\": \"\u2A5C\",\n  \"andslope\": \"\u2A58\",\n  \"andv\": \"\u2A5A\",\n  \"ang\": \"\u2220\",\n  \"ange\": \"\u29A4\",\n  \"angle\": \"\u2220\",\n  \"angmsd\": \"\u2221\",\n  \"angmsdaa\": \"\u29A8\",\n  \"angmsdab\": \"\u29A9\",\n  \"angmsdac\": \"\u29AA\",\n  \"angmsdad\": \"\u29AB\",\n  \"angmsdae\": \"\u29AC\",\n  \"angmsdaf\": \"\u29AD\",\n  \"angmsdag\": \"\u29AE\",\n  \"angmsdah\": \"\u29AF\",\n  \"angrt\": \"\u221F\",\n  \"angrtvb\": \"\u22BE\",\n  \"angrtvbd\": \"\u299D\",\n  \"angsph\": \"\u2222\",\n  \"angst\": \"\u00C5\",\n  \"angzarr\": \"\u237C\",\n  \"aogon\": \"\u0105\",\n  \"aopf\": \"\uD835\uDD52\",\n  \"ap\": \"\u2248\",\n  \"apE\": \"\u2A70\",\n  \"apacir\": \"\u2A6F\",\n  \"ape\": \"\u224A\",\n  \"apid\": \"\u224B\",\n  \"apos\": \"'\",\n  \"approx\": \"\u2248\",\n  \"approxeq\": \"\u224A\",\n  \"arin\": \"\u00E5\",\n  \"aring\": \"\u00E5\",\n  \"ascr\": \"\uD835\uDCB6\",\n  \"ast\": \"*\",\n  \"asymp\": \"\u2248\",\n  \"asympeq\": \"\u224D\",\n  \"atild\": \"\u00E3\",\n  \"atilde\": \"\u00E3\",\n  \"aum\": \"\u00E4\",\n  \"auml\": \"\u00E4\",\n  \"awconint\": \"\u2233\",\n  \"awint\": \"\u2A11\",\n  \"bNot\": \"\u2AED\",\n  \"backcong\": \"\u224C\",\n  \"backepsilon\": \"\u03F6\",\n  \"backprime\": \"\u2035\",\n  \"backsim\": \"\u223D\",\n  \"backsimeq\": \"\u22CD\",\n  \"barvee\": \"\u22BD\",\n  \"barwed\": \"\u2305\",\n  \"barwedge\": \"\u2305\",\n  \"bbrk\": \"\u23B5\",\n  \"bbrktbrk\": \"\u23B6\",\n  \"bcong\": \"\u224C\",\n  \"bcy\": \"\u0431\",\n  \"bdquo\": \"\u201E\",\n  \"becaus\": \"\u2235\",\n  \"because\": \"\u2235\",\n  \"bemptyv\": \"\u29B0\",\n  \"bepsi\": \"\u03F6\",\n  \"bernou\": \"\u212C\",\n  \"beta\": \"\u03B2\",\n  \"beth\": \"\u2136\",\n  \"between\": \"\u226C\",\n  \"bfr\": \"\uD835\uDD1F\",\n  \"bigcap\": \"\u22C2\",\n  \"bigcirc\": \"\u25EF\",\n  \"bigcup\": \"\u22C3\",\n  \"bigodot\": \"\u2A00\",\n  \"bigoplus\": \"\u2A01\",\n  \"bigotimes\": \"\u2A02\",\n  \"bigsqcup\": \"\u2A06\",\n  \"bigstar\": \"\u2605\",\n  \"bigtriangledown\": \"\u25BD\",\n  \"bigtriangleup\": \"\u25B3\",\n  \"biguplus\": \"\u2A04\",\n  \"bigvee\": \"\u22C1\",\n  \"bigwedge\": \"\u22C0\",\n  \"bkarow\": \"\u290D\",\n  \"blacklozenge\": \"\u29EB\",\n  \"blacksquare\": \"\u25AA\",\n  \"blacktriangle\": \"\u25B4\",\n  \"blacktriangledown\": \"\u25BE\",\n  \"blacktriangleleft\": \"\u25C2\",\n  \"blacktriangleright\": \"\u25B8\",\n  \"blank\": \"\u2423\",\n  \"blk12\": \"\u2592\",\n  \"blk14\": \"\u2591\",\n  \"blk34\": \"\u2593\",\n  \"block\": \"\u2588\",\n  \"bne\": \"=\u20E5\",\n  \"bnequiv\": \"\u2261\u20E5\",\n  \"bnot\": \"\u2310\",\n  \"bopf\": \"\uD835\uDD53\",\n  \"bot\": \"\u22A5\",\n  \"bottom\": \"\u22A5\",\n  \"bowtie\": \"\u22C8\",\n  \"boxDL\": \"\u2557\",\n  \"boxDR\": \"\u2554\",\n  \"boxDl\": \"\u2556\",\n  \"boxDr\": \"\u2553\",\n  \"boxH\": \"\u2550\",\n  \"boxHD\": \"\u2566\",\n  \"boxHU\": \"\u2569\",\n  \"boxHd\": \"\u2564\",\n  \"boxHu\": \"\u2567\",\n  \"boxUL\": \"\u255D\",\n  \"boxUR\": \"\u255A\",\n  \"boxUl\": \"\u255C\",\n  \"boxUr\": \"\u2559\",\n  \"boxV\": \"\u2551\",\n  \"boxVH\": \"\u256C\",\n  \"boxVL\": \"\u2563\",\n  \"boxVR\": \"\u2560\",\n  \"boxVh\": \"\u256B\",\n  \"boxVl\": \"\u2562\",\n  \"boxVr\": \"\u255F\",\n  \"boxbox\": \"\u29C9\",\n  \"boxdL\": \"\u2555\",\n  \"boxdR\": \"\u2552\",\n  \"boxdl\": \"\u2510\",\n  \"boxdr\": \"\u250C\",\n  \"boxh\": \"\u2500\",\n  \"boxhD\": \"\u2565\",\n  \"boxhU\": \"\u2568\",\n  \"boxhd\": \"\u252C\",\n  \"boxhu\": \"\u2534\",\n  \"boxminus\": \"\u229F\",\n  \"boxplus\": \"\u229E\",\n  \"boxtimes\": \"\u22A0\",\n  \"boxuL\": \"\u255B\",\n  \"boxuR\": \"\u2558\",\n  \"boxul\": \"\u2518\",\n  \"boxur\": \"\u2514\",\n  \"boxv\": \"\u2502\",\n  \"boxvH\": \"\u256A\",\n  \"boxvL\": \"\u2561\",\n  \"boxvR\": \"\u255E\",\n  \"boxvh\": \"\u253C\",\n  \"boxvl\": \"\u2524\",\n  \"boxvr\": \"\u251C\",\n  \"bprime\": \"\u2035\",\n  \"breve\": \"\u02D8\",\n  \"brvba\": \"\u00A6\",\n  \"brvbar\": \"\u00A6\",\n  \"bscr\": \"\uD835\uDCB7\",\n  \"bsemi\": \"\u204F\",\n  \"bsim\": \"\u223D\",\n  \"bsime\": \"\u22CD\",\n  \"bsol\": \"\\\\\",\n  \"bsolb\": \"\u29C5\",\n  \"bsolhsub\": \"\u27C8\",\n  \"bull\": \"\u2022\",\n  \"bullet\": \"\u2022\",\n  \"bump\": \"\u224E\",\n  \"bumpE\": \"\u2AAE\",\n  \"bumpe\": \"\u224F\",\n  \"bumpeq\": \"\u224F\",\n  \"cacute\": \"\u0107\",\n  \"cap\": \"\u2229\",\n  \"capand\": \"\u2A44\",\n  \"capbrcup\": \"\u2A49\",\n  \"capcap\": \"\u2A4B\",\n  \"capcup\": \"\u2A47\",\n  \"capdot\": \"\u2A40\",\n  \"caps\": \"\u2229\uFE00\",\n  \"caret\": \"\u2041\",\n  \"caron\": \"\u02C7\",\n  \"ccaps\": \"\u2A4D\",\n  \"ccaron\": \"\u010D\",\n  \"ccedi\": \"\u00E7\",\n  \"ccedil\": \"\u00E7\",\n  \"ccirc\": \"\u0109\",\n  \"ccups\": \"\u2A4C\",\n  \"ccupssm\": \"\u2A50\",\n  \"cdot\": \"\u010B\",\n  \"cedi\": \"\u00B8\",\n  \"cedil\": \"\u00B8\",\n  \"cemptyv\": \"\u29B2\",\n  \"cen\": \"\u00A2\",\n  \"cent\": \"\u00A2\",\n  \"centerdot\": \"\u00B7\",\n  \"cfr\": \"\uD835\uDD20\",\n  \"chcy\": \"\u0447\",\n  \"check\": \"\u2713\",\n  \"checkmark\": \"\u2713\",\n  \"chi\": \"\u03C7\",\n  \"cir\": \"\u25CB\",\n  \"cirE\": \"\u29C3\",\n  \"circ\": \"\u02C6\",\n  \"circeq\": \"\u2257\",\n  \"circlearrowleft\": \"\u21BA\",\n  \"circlearrowright\": \"\u21BB\",\n  \"circledR\": \"\u00AE\",\n  \"circledS\": \"\u24C8\",\n  \"circledast\": \"\u229B\",\n  \"circledcirc\": \"\u229A\",\n  \"circleddash\": \"\u229D\",\n  \"cire\": \"\u2257\",\n  \"cirfnint\": \"\u2A10\",\n  \"cirmid\": \"\u2AEF\",\n  \"cirscir\": \"\u29C2\",\n  \"clubs\": \"\u2663\",\n  \"clubsuit\": \"\u2663\",\n  \"colon\": \":\",\n  \"colone\": \"\u2254\",\n  \"coloneq\": \"\u2254\",\n  \"comma\": \",\",\n  \"commat\": \"@\",\n  \"comp\": \"\u2201\",\n  \"compfn\": \"\u2218\",\n  \"complement\": \"\u2201\",\n  \"complexes\": \"\u2102\",\n  \"cong\": \"\u2245\",\n  \"congdot\": \"\u2A6D\",\n  \"conint\": \"\u222E\",\n  \"copf\": \"\uD835\uDD54\",\n  \"coprod\": \"\u2210\",\n  \"cop\": \"\u00A9\",\n  \"copy\": \"\u00A9\",\n  \"copysr\": \"\u2117\",\n  \"crarr\": \"\u21B5\",\n  \"cross\": \"\u2717\",\n  \"cscr\": \"\uD835\uDCB8\",\n  \"csub\": \"\u2ACF\",\n  \"csube\": \"\u2AD1\",\n  \"csup\": \"\u2AD0\",\n  \"csupe\": \"\u2AD2\",\n  \"ctdot\": \"\u22EF\",\n  \"cudarrl\": \"\u2938\",\n  \"cudarrr\": \"\u2935\",\n  \"cuepr\": \"\u22DE\",\n  \"cuesc\": \"\u22DF\",\n  \"cularr\": \"\u21B6\",\n  \"cularrp\": \"\u293D\",\n  \"cup\": \"\u222A\",\n  \"cupbrcap\": \"\u2A48\",\n  \"cupcap\": \"\u2A46\",\n  \"cupcup\": \"\u2A4A\",\n  \"cupdot\": \"\u228D\",\n  \"cupor\": \"\u2A45\",\n  \"cups\": \"\u222A\uFE00\",\n  \"curarr\": \"\u21B7\",\n  \"curarrm\": \"\u293C\",\n  \"curlyeqprec\": \"\u22DE\",\n  \"curlyeqsucc\": \"\u22DF\",\n  \"curlyvee\": \"\u22CE\",\n  \"curlywedge\": \"\u22CF\",\n  \"curre\": \"\u00A4\",\n  \"curren\": \"\u00A4\",\n  \"curvearrowleft\": \"\u21B6\",\n  \"curvearrowright\": \"\u21B7\",\n  \"cuvee\": \"\u22CE\",\n  \"cuwed\": \"\u22CF\",\n  \"cwconint\": \"\u2232\",\n  \"cwint\": \"\u2231\",\n  \"cylcty\": \"\u232D\",\n  \"dArr\": \"\u21D3\",\n  \"dHar\": \"\u2965\",\n  \"dagger\": \"\u2020\",\n  \"daleth\": \"\u2138\",\n  \"darr\": \"\u2193\",\n  \"dash\": \"\u2010\",\n  \"dashv\": \"\u22A3\",\n  \"dbkarow\": \"\u290F\",\n  \"dblac\": \"\u02DD\",\n  \"dcaron\": \"\u010F\",\n  \"dcy\": \"\u0434\",\n  \"dd\": \"\u2146\",\n  \"ddagger\": \"\u2021\",\n  \"ddarr\": \"\u21CA\",\n  \"ddotseq\": \"\u2A77\",\n  \"de\": \"\u00B0\",\n  \"deg\": \"\u00B0\",\n  \"delta\": \"\u03B4\",\n  \"demptyv\": \"\u29B1\",\n  \"dfisht\": \"\u297F\",\n  \"dfr\": \"\uD835\uDD21\",\n  \"dharl\": \"\u21C3\",\n  \"dharr\": \"\u21C2\",\n  \"diam\": \"\u22C4\",\n  \"diamond\": \"\u22C4\",\n  \"diamondsuit\": \"\u2666\",\n  \"diams\": \"\u2666\",\n  \"die\": \"\u00A8\",\n  \"digamma\": \"\u03DD\",\n  \"disin\": \"\u22F2\",\n  \"div\": \"\u00F7\",\n  \"divid\": \"\u00F7\",\n  \"divide\": \"\u00F7\",\n  \"divideontimes\": \"\u22C7\",\n  \"divonx\": \"\u22C7\",\n  \"djcy\": \"\u0452\",\n  \"dlcorn\": \"\u231E\",\n  \"dlcrop\": \"\u230D\",\n  \"dollar\": \"$\",\n  \"dopf\": \"\uD835\uDD55\",\n  \"dot\": \"\u02D9\",\n  \"doteq\": \"\u2250\",\n  \"doteqdot\": \"\u2251\",\n  \"dotminus\": \"\u2238\",\n  \"dotplus\": \"\u2214\",\n  \"dotsquare\": \"\u22A1\",\n  \"doublebarwedge\": \"\u2306\",\n  \"downarrow\": \"\u2193\",\n  \"downdownarrows\": \"\u21CA\",\n  \"downharpoonleft\": \"\u21C3\",\n  \"downharpoonright\": \"\u21C2\",\n  \"drbkarow\": \"\u2910\",\n  \"drcorn\": \"\u231F\",\n  \"drcrop\": \"\u230C\",\n  \"dscr\": \"\uD835\uDCB9\",\n  \"dscy\": \"\u0455\",\n  \"dsol\": \"\u29F6\",\n  \"dstrok\": \"\u0111\",\n  \"dtdot\": \"\u22F1\",\n  \"dtri\": \"\u25BF\",\n  \"dtrif\": \"\u25BE\",\n  \"duarr\": \"\u21F5\",\n  \"duhar\": \"\u296F\",\n  \"dwangle\": \"\u29A6\",\n  \"dzcy\": \"\u045F\",\n  \"dzigrarr\": \"\u27FF\",\n  \"eDDot\": \"\u2A77\",\n  \"eDot\": \"\u2251\",\n  \"eacut\": \"\u00E9\",\n  \"eacute\": \"\u00E9\",\n  \"easter\": \"\u2A6E\",\n  \"ecaron\": \"\u011B\",\n  \"ecir\": \"\u00EA\",\n  \"ecirc\": \"\u00EA\",\n  \"ecolon\": \"\u2255\",\n  \"ecy\": \"\u044D\",\n  \"edot\": \"\u0117\",\n  \"ee\": \"\u2147\",\n  \"efDot\": \"\u2252\",\n  \"efr\": \"\uD835\uDD22\",\n  \"eg\": \"\u2A9A\",\n  \"egrav\": \"\u00E8\",\n  \"egrave\": \"\u00E8\",\n  \"egs\": \"\u2A96\",\n  \"egsdot\": \"\u2A98\",\n  \"el\": \"\u2A99\",\n  \"elinters\": \"\u23E7\",\n  \"ell\": \"\u2113\",\n  \"els\": \"\u2A95\",\n  \"elsdot\": \"\u2A97\",\n  \"emacr\": \"\u0113\",\n  \"empty\": \"\u2205\",\n  \"emptyset\": \"\u2205\",\n  \"emptyv\": \"\u2205\",\n  \"emsp13\": \"\u2004\",\n  \"emsp14\": \"\u2005\",\n  \"emsp\": \"\u2003\",\n  \"eng\": \"\u014B\",\n  \"ensp\": \"\u2002\",\n  \"eogon\": \"\u0119\",\n  \"eopf\": \"\uD835\uDD56\",\n  \"epar\": \"\u22D5\",\n  \"eparsl\": \"\u29E3\",\n  \"eplus\": \"\u2A71\",\n  \"epsi\": \"\u03B5\",\n  \"epsilon\": \"\u03B5\",\n  \"epsiv\": \"\u03F5\",\n  \"eqcirc\": \"\u2256\",\n  \"eqcolon\": \"\u2255\",\n  \"eqsim\": \"\u2242\",\n  \"eqslantgtr\": \"\u2A96\",\n  \"eqslantless\": \"\u2A95\",\n  \"equals\": \"=\",\n  \"equest\": \"\u225F\",\n  \"equiv\": \"\u2261\",\n  \"equivDD\": \"\u2A78\",\n  \"eqvparsl\": \"\u29E5\",\n  \"erDot\": \"\u2253\",\n  \"erarr\": \"\u2971\",\n  \"escr\": \"\u212F\",\n  \"esdot\": \"\u2250\",\n  \"esim\": \"\u2242\",\n  \"eta\": \"\u03B7\",\n  \"et\": \"\u00F0\",\n  \"eth\": \"\u00F0\",\n  \"eum\": \"\u00EB\",\n  \"euml\": \"\u00EB\",\n  \"euro\": \"\u20AC\",\n  \"excl\": \"!\",\n  \"exist\": \"\u2203\",\n  \"expectation\": \"\u2130\",\n  \"exponentiale\": \"\u2147\",\n  \"fallingdotseq\": \"\u2252\",\n  \"fcy\": \"\u0444\",\n  \"female\": \"\u2640\",\n  \"ffilig\": \"\uFB03\",\n  \"fflig\": \"\uFB00\",\n  \"ffllig\": \"\uFB04\",\n  \"ffr\": \"\uD835\uDD23\",\n  \"filig\": \"\uFB01\",\n  \"fjlig\": \"fj\",\n  \"flat\": \"\u266D\",\n  \"fllig\": \"\uFB02\",\n  \"fltns\": \"\u25B1\",\n  \"fnof\": \"\u0192\",\n  \"fopf\": \"\uD835\uDD57\",\n  \"forall\": \"\u2200\",\n  \"fork\": \"\u22D4\",\n  \"forkv\": \"\u2AD9\",\n  \"fpartint\": \"\u2A0D\",\n  \"frac1\": \"\u00BC\",\n  \"frac12\": \"\u00BD\",\n  \"frac13\": \"\u2153\",\n  \"frac14\": \"\u00BC\",\n  \"frac15\": \"\u2155\",\n  \"frac16\": \"\u2159\",\n  \"frac18\": \"\u215B\",\n  \"frac23\": \"\u2154\",\n  \"frac25\": \"\u2156\",\n  \"frac3\": \"\u00BE\",\n  \"frac34\": \"\u00BE\",\n  \"frac35\": \"\u2157\",\n  \"frac38\": \"\u215C\",\n  \"frac45\": \"\u2158\",\n  \"frac56\": \"\u215A\",\n  \"frac58\": \"\u215D\",\n  \"frac78\": \"\u215E\",\n  \"frasl\": \"\u2044\",\n  \"frown\": \"\u2322\",\n  \"fscr\": \"\uD835\uDCBB\",\n  \"gE\": \"\u2267\",\n  \"gEl\": \"\u2A8C\",\n  \"gacute\": \"\u01F5\",\n  \"gamma\": \"\u03B3\",\n  \"gammad\": \"\u03DD\",\n  \"gap\": \"\u2A86\",\n  \"gbreve\": \"\u011F\",\n  \"gcirc\": \"\u011D\",\n  \"gcy\": \"\u0433\",\n  \"gdot\": \"\u0121\",\n  \"ge\": \"\u2265\",\n  \"gel\": \"\u22DB\",\n  \"geq\": \"\u2265\",\n  \"geqq\": \"\u2267\",\n  \"geqslant\": \"\u2A7E\",\n  \"ges\": \"\u2A7E\",\n  \"gescc\": \"\u2AA9\",\n  \"gesdot\": \"\u2A80\",\n  \"gesdoto\": \"\u2A82\",\n  \"gesdotol\": \"\u2A84\",\n  \"gesl\": \"\u22DB\uFE00\",\n  \"gesles\": \"\u2A94\",\n  \"gfr\": \"\uD835\uDD24\",\n  \"gg\": \"\u226B\",\n  \"ggg\": \"\u22D9\",\n  \"gimel\": \"\u2137\",\n  \"gjcy\": \"\u0453\",\n  \"gl\": \"\u2277\",\n  \"glE\": \"\u2A92\",\n  \"gla\": \"\u2AA5\",\n  \"glj\": \"\u2AA4\",\n  \"gnE\": \"\u2269\",\n  \"gnap\": \"\u2A8A\",\n  \"gnapprox\": \"\u2A8A\",\n  \"gne\": \"\u2A88\",\n  \"gneq\": \"\u2A88\",\n  \"gneqq\": \"\u2269\",\n  \"gnsim\": \"\u22E7\",\n  \"gopf\": \"\uD835\uDD58\",\n  \"grave\": \"`\",\n  \"gscr\": \"\u210A\",\n  \"gsim\": \"\u2273\",\n  \"gsime\": \"\u2A8E\",\n  \"gsiml\": \"\u2A90\",\n  \"g\": \">\",\n  \"gt\": \">\",\n  \"gtcc\": \"\u2AA7\",\n  \"gtcir\": \"\u2A7A\",\n  \"gtdot\": \"\u22D7\",\n  \"gtlPar\": \"\u2995\",\n  \"gtquest\": \"\u2A7C\",\n  \"gtrapprox\": \"\u2A86\",\n  \"gtrarr\": \"\u2978\",\n  \"gtrdot\": \"\u22D7\",\n  \"gtreqless\": \"\u22DB\",\n  \"gtreqqless\": \"\u2A8C\",\n  \"gtrless\": \"\u2277\",\n  \"gtrsim\": \"\u2273\",\n  \"gvertneqq\": \"\u2269\uFE00\",\n  \"gvnE\": \"\u2269\uFE00\",\n  \"hArr\": \"\u21D4\",\n  \"hairsp\": \"\u200A\",\n  \"half\": \"\u00BD\",\n  \"hamilt\": \"\u210B\",\n  \"hardcy\": \"\u044A\",\n  \"harr\": \"\u2194\",\n  \"harrcir\": \"\u2948\",\n  \"harrw\": \"\u21AD\",\n  \"hbar\": \"\u210F\",\n  \"hcirc\": \"\u0125\",\n  \"hearts\": \"\u2665\",\n  \"heartsuit\": \"\u2665\",\n  \"hellip\": \"\u2026\",\n  \"hercon\": \"\u22B9\",\n  \"hfr\": \"\uD835\uDD25\",\n  \"hksearow\": \"\u2925\",\n  \"hkswarow\": \"\u2926\",\n  \"hoarr\": \"\u21FF\",\n  \"homtht\": \"\u223B\",\n  \"hookleftarrow\": \"\u21A9\",\n  \"hookrightarrow\": \"\u21AA\",\n  \"hopf\": \"\uD835\uDD59\",\n  \"horbar\": \"\u2015\",\n  \"hscr\": \"\uD835\uDCBD\",\n  \"hslash\": \"\u210F\",\n  \"hstrok\": \"\u0127\",\n  \"hybull\": \"\u2043\",\n  \"hyphen\": \"\u2010\",\n  \"iacut\": \"\u00ED\",\n  \"iacute\": \"\u00ED\",\n  \"ic\": \"\u2063\",\n  \"icir\": \"\u00EE\",\n  \"icirc\": \"\u00EE\",\n  \"icy\": \"\u0438\",\n  \"iecy\": \"\u0435\",\n  \"iexc\": \"\u00A1\",\n  \"iexcl\": \"\u00A1\",\n  \"iff\": \"\u21D4\",\n  \"ifr\": \"\uD835\uDD26\",\n  \"igrav\": \"\u00EC\",\n  \"igrave\": \"\u00EC\",\n  \"ii\": \"\u2148\",\n  \"iiiint\": \"\u2A0C\",\n  \"iiint\": \"\u222D\",\n  \"iinfin\": \"\u29DC\",\n  \"iiota\": \"\u2129\",\n  \"ijlig\": \"\u0133\",\n  \"imacr\": \"\u012B\",\n  \"image\": \"\u2111\",\n  \"imagline\": \"\u2110\",\n  \"imagpart\": \"\u2111\",\n  \"imath\": \"\u0131\",\n  \"imof\": \"\u22B7\",\n  \"imped\": \"\u01B5\",\n  \"in\": \"\u2208\",\n  \"incare\": \"\u2105\",\n  \"infin\": \"\u221E\",\n  \"infintie\": \"\u29DD\",\n  \"inodot\": \"\u0131\",\n  \"int\": \"\u222B\",\n  \"intcal\": \"\u22BA\",\n  \"integers\": \"\u2124\",\n  \"intercal\": \"\u22BA\",\n  \"intlarhk\": \"\u2A17\",\n  \"intprod\": \"\u2A3C\",\n  \"iocy\": \"\u0451\",\n  \"iogon\": \"\u012F\",\n  \"iopf\": \"\uD835\uDD5A\",\n  \"iota\": \"\u03B9\",\n  \"iprod\": \"\u2A3C\",\n  \"iques\": \"\u00BF\",\n  \"iquest\": \"\u00BF\",\n  \"iscr\": \"\uD835\uDCBE\",\n  \"isin\": \"\u2208\",\n  \"isinE\": \"\u22F9\",\n  \"isindot\": \"\u22F5\",\n  \"isins\": \"\u22F4\",\n  \"isinsv\": \"\u22F3\",\n  \"isinv\": \"\u2208\",\n  \"it\": \"\u2062\",\n  \"itilde\": \"\u0129\",\n  \"iukcy\": \"\u0456\",\n  \"ium\": \"\u00EF\",\n  \"iuml\": \"\u00EF\",\n  \"jcirc\": \"\u0135\",\n  \"jcy\": \"\u0439\",\n  \"jfr\": \"\uD835\uDD27\",\n  \"jmath\": \"\u0237\",\n  \"jopf\": \"\uD835\uDD5B\",\n  \"jscr\": \"\uD835\uDCBF\",\n  \"jsercy\": \"\u0458\",\n  \"jukcy\": \"\u0454\",\n  \"kappa\": \"\u03BA\",\n  \"kappav\": \"\u03F0\",\n  \"kcedil\": \"\u0137\",\n  \"kcy\": \"\u043A\",\n  \"kfr\": \"\uD835\uDD28\",\n  \"kgreen\": \"\u0138\",\n  \"khcy\": \"\u0445\",\n  \"kjcy\": \"\u045C\",\n  \"kopf\": \"\uD835\uDD5C\",\n  \"kscr\": \"\uD835\uDCC0\",\n  \"lAarr\": \"\u21DA\",\n  \"lArr\": \"\u21D0\",\n  \"lAtail\": \"\u291B\",\n  \"lBarr\": \"\u290E\",\n  \"lE\": \"\u2266\",\n  \"lEg\": \"\u2A8B\",\n  \"lHar\": \"\u2962\",\n  \"lacute\": \"\u013A\",\n  \"laemptyv\": \"\u29B4\",\n  \"lagran\": \"\u2112\",\n  \"lambda\": \"\u03BB\",\n  \"lang\": \"\u27E8\",\n  \"langd\": \"\u2991\",\n  \"langle\": \"\u27E8\",\n  \"lap\": \"\u2A85\",\n  \"laqu\": \"\u00AB\",\n  \"laquo\": \"\u00AB\",\n  \"larr\": \"\u2190\",\n  \"larrb\": \"\u21E4\",\n  \"larrbfs\": \"\u291F\",\n  \"larrfs\": \"\u291D\",\n  \"larrhk\": \"\u21A9\",\n  \"larrlp\": \"\u21AB\",\n  \"larrpl\": \"\u2939\",\n  \"larrsim\": \"\u2973\",\n  \"larrtl\": \"\u21A2\",\n  \"lat\": \"\u2AAB\",\n  \"latail\": \"\u2919\",\n  \"late\": \"\u2AAD\",\n  \"lates\": \"\u2AAD\uFE00\",\n  \"lbarr\": \"\u290C\",\n  \"lbbrk\": \"\u2772\",\n  \"lbrace\": \"{\",\n  \"lbrack\": \"[\",\n  \"lbrke\": \"\u298B\",\n  \"lbrksld\": \"\u298F\",\n  \"lbrkslu\": \"\u298D\",\n  \"lcaron\": \"\u013E\",\n  \"lcedil\": \"\u013C\",\n  \"lceil\": \"\u2308\",\n  \"lcub\": \"{\",\n  \"lcy\": \"\u043B\",\n  \"ldca\": \"\u2936\",\n  \"ldquo\": \"\u201C\",\n  \"ldquor\": \"\u201E\",\n  \"ldrdhar\": \"\u2967\",\n  \"ldrushar\": \"\u294B\",\n  \"ldsh\": \"\u21B2\",\n  \"le\": \"\u2264\",\n  \"leftarrow\": \"\u2190\",\n  \"leftarrowtail\": \"\u21A2\",\n  \"leftharpoondown\": \"\u21BD\",\n  \"leftharpoonup\": \"\u21BC\",\n  \"leftleftarrows\": \"\u21C7\",\n  \"leftrightarrow\": \"\u2194\",\n  \"leftrightarrows\": \"\u21C6\",\n  \"leftrightharpoons\": \"\u21CB\",\n  \"leftrightsquigarrow\": \"\u21AD\",\n  \"leftthreetimes\": \"\u22CB\",\n  \"leg\": \"\u22DA\",\n  \"leq\": \"\u2264\",\n  \"leqq\": \"\u2266\",\n  \"leqslant\": \"\u2A7D\",\n  \"les\": \"\u2A7D\",\n  \"lescc\": \"\u2AA8\",\n  \"lesdot\": \"\u2A7F\",\n  \"lesdoto\": \"\u2A81\",\n  \"lesdotor\": \"\u2A83\",\n  \"lesg\": \"\u22DA\uFE00\",\n  \"lesges\": \"\u2A93\",\n  \"lessapprox\": \"\u2A85\",\n  \"lessdot\": \"\u22D6\",\n  \"lesseqgtr\": \"\u22DA\",\n  \"lesseqqgtr\": \"\u2A8B\",\n  \"lessgtr\": \"\u2276\",\n  \"lesssim\": \"\u2272\",\n  \"lfisht\": \"\u297C\",\n  \"lfloor\": \"\u230A\",\n  \"lfr\": \"\uD835\uDD29\",\n  \"lg\": \"\u2276\",\n  \"lgE\": \"\u2A91\",\n  \"lhard\": \"\u21BD\",\n  \"lharu\": \"\u21BC\",\n  \"lharul\": \"\u296A\",\n  \"lhblk\": \"\u2584\",\n  \"ljcy\": \"\u0459\",\n  \"ll\": \"\u226A\",\n  \"llarr\": \"\u21C7\",\n  \"llcorner\": \"\u231E\",\n  \"llhard\": \"\u296B\",\n  \"lltri\": \"\u25FA\",\n  \"lmidot\": \"\u0140\",\n  \"lmoust\": \"\u23B0\",\n  \"lmoustache\": \"\u23B0\",\n  \"lnE\": \"\u2268\",\n  \"lnap\": \"\u2A89\",\n  \"lnapprox\": \"\u2A89\",\n  \"lne\": \"\u2A87\",\n  \"lneq\": \"\u2A87\",\n  \"lneqq\": \"\u2268\",\n  \"lnsim\": \"\u22E6\",\n  \"loang\": \"\u27EC\",\n  \"loarr\": \"\u21FD\",\n  \"lobrk\": \"\u27E6\",\n  \"longleftarrow\": \"\u27F5\",\n  \"longleftrightarrow\": \"\u27F7\",\n  \"longmapsto\": \"\u27FC\",\n  \"longrightarrow\": \"\u27F6\",\n  \"looparrowleft\": \"\u21AB\",\n  \"looparrowright\": \"\u21AC\",\n  \"lopar\": \"\u2985\",\n  \"lopf\": \"\uD835\uDD5D\",\n  \"loplus\": \"\u2A2D\",\n  \"lotimes\": \"\u2A34\",\n  \"lowast\": \"\u2217\",\n  \"lowbar\": \"_\",\n  \"loz\": \"\u25CA\",\n  \"lozenge\": \"\u25CA\",\n  \"lozf\": \"\u29EB\",\n  \"lpar\": \"(\",\n  \"lparlt\": \"\u2993\",\n  \"lrarr\": \"\u21C6\",\n  \"lrcorner\": \"\u231F\",\n  \"lrhar\": \"\u21CB\",\n  \"lrhard\": \"\u296D\",\n  \"lrm\": \"\u200E\",\n  \"lrtri\": \"\u22BF\",\n  \"lsaquo\": \"\u2039\",\n  \"lscr\": \"\uD835\uDCC1\",\n  \"lsh\": \"\u21B0\",\n  \"lsim\": \"\u2272\",\n  \"lsime\": \"\u2A8D\",\n  \"lsimg\": \"\u2A8F\",\n  \"lsqb\": \"[\",\n  \"lsquo\": \"\u2018\",\n  \"lsquor\": \"\u201A\",\n  \"lstrok\": \"\u0142\",\n  \"l\": \"<\",\n  \"lt\": \"<\",\n  \"ltcc\": \"\u2AA6\",\n  \"ltcir\": \"\u2A79\",\n  \"ltdot\": \"\u22D6\",\n  \"lthree\": \"\u22CB\",\n  \"ltimes\": \"\u22C9\",\n  \"ltlarr\": \"\u2976\",\n  \"ltquest\": \"\u2A7B\",\n  \"ltrPar\": \"\u2996\",\n  \"ltri\": \"\u25C3\",\n  \"ltrie\": \"\u22B4\",\n  \"ltrif\": \"\u25C2\",\n  \"lurdshar\": \"\u294A\",\n  \"luruhar\": \"\u2966\",\n  \"lvertneqq\": \"\u2268\uFE00\",\n  \"lvnE\": \"\u2268\uFE00\",\n  \"mDDot\": \"\u223A\",\n  \"mac\": \"\u00AF\",\n  \"macr\": \"\u00AF\",\n  \"male\": \"\u2642\",\n  \"malt\": \"\u2720\",\n  \"maltese\": \"\u2720\",\n  \"map\": \"\u21A6\",\n  \"mapsto\": \"\u21A6\",\n  \"mapstodown\": \"\u21A7\",\n  \"mapstoleft\": \"\u21A4\",\n  \"mapstoup\": \"\u21A5\",\n  \"marker\": \"\u25AE\",\n  \"mcomma\": \"\u2A29\",\n  \"mcy\": \"\u043C\",\n  \"mdash\": \"\u2014\",\n  \"measuredangle\": \"\u2221\",\n  \"mfr\": \"\uD835\uDD2A\",\n  \"mho\": \"\u2127\",\n  \"micr\": \"\u00B5\",\n  \"micro\": \"\u00B5\",\n  \"mid\": \"\u2223\",\n  \"midast\": \"*\",\n  \"midcir\": \"\u2AF0\",\n  \"middo\": \"\u00B7\",\n  \"middot\": \"\u00B7\",\n  \"minus\": \"\u2212\",\n  \"minusb\": \"\u229F\",\n  \"minusd\": \"\u2238\",\n  \"minusdu\": \"\u2A2A\",\n  \"mlcp\": \"\u2ADB\",\n  \"mldr\": \"\u2026\",\n  \"mnplus\": \"\u2213\",\n  \"models\": \"\u22A7\",\n  \"mopf\": \"\uD835\uDD5E\",\n  \"mp\": \"\u2213\",\n  \"mscr\": \"\uD835\uDCC2\",\n  \"mstpos\": \"\u223E\",\n  \"mu\": \"\u03BC\",\n  \"multimap\": \"\u22B8\",\n  \"mumap\": \"\u22B8\",\n  \"nGg\": \"\u22D9\u0338\",\n  \"nGt\": \"\u226B\u20D2\",\n  \"nGtv\": \"\u226B\u0338\",\n  \"nLeftarrow\": \"\u21CD\",\n  \"nLeftrightarrow\": \"\u21CE\",\n  \"nLl\": \"\u22D8\u0338\",\n  \"nLt\": \"\u226A\u20D2\",\n  \"nLtv\": \"\u226A\u0338\",\n  \"nRightarrow\": \"\u21CF\",\n  \"nVDash\": \"\u22AF\",\n  \"nVdash\": \"\u22AE\",\n  \"nabla\": \"\u2207\",\n  \"nacute\": \"\u0144\",\n  \"nang\": \"\u2220\u20D2\",\n  \"nap\": \"\u2249\",\n  \"napE\": \"\u2A70\u0338\",\n  \"napid\": \"\u224B\u0338\",\n  \"napos\": \"\u0149\",\n  \"napprox\": \"\u2249\",\n  \"natur\": \"\u266E\",\n  \"natural\": \"\u266E\",\n  \"naturals\": \"\u2115\",\n  \"nbs\": \"\u00A0\",\n  \"nbsp\": \"\u00A0\",\n  \"nbump\": \"\u224E\u0338\",\n  \"nbumpe\": \"\u224F\u0338\",\n  \"ncap\": \"\u2A43\",\n  \"ncaron\": \"\u0148\",\n  \"ncedil\": \"\u0146\",\n  \"ncong\": \"\u2247\",\n  \"ncongdot\": \"\u2A6D\u0338\",\n  \"ncup\": \"\u2A42\",\n  \"ncy\": \"\u043D\",\n  \"ndash\": \"\u2013\",\n  \"ne\": \"\u2260\",\n  \"neArr\": \"\u21D7\",\n  \"nearhk\": \"\u2924\",\n  \"nearr\": \"\u2197\",\n  \"nearrow\": \"\u2197\",\n  \"nedot\": \"\u2250\u0338\",\n  \"nequiv\": \"\u2262\",\n  \"nesear\": \"\u2928\",\n  \"nesim\": \"\u2242\u0338\",\n  \"nexist\": \"\u2204\",\n  \"nexists\": \"\u2204\",\n  \"nfr\": \"\uD835\uDD2B\",\n  \"ngE\": \"\u2267\u0338\",\n  \"nge\": \"\u2271\",\n  \"ngeq\": \"\u2271\",\n  \"ngeqq\": \"\u2267\u0338\",\n  \"ngeqslant\": \"\u2A7E\u0338\",\n  \"nges\": \"\u2A7E\u0338\",\n  \"ngsim\": \"\u2275\",\n  \"ngt\": \"\u226F\",\n  \"ngtr\": \"\u226F\",\n  \"nhArr\": \"\u21CE\",\n  \"nharr\": \"\u21AE\",\n  \"nhpar\": \"\u2AF2\",\n  \"ni\": \"\u220B\",\n  \"nis\": \"\u22FC\",\n  \"nisd\": \"\u22FA\",\n  \"niv\": \"\u220B\",\n  \"njcy\": \"\u045A\",\n  \"nlArr\": \"\u21CD\",\n  \"nlE\": \"\u2266\u0338\",\n  \"nlarr\": \"\u219A\",\n  \"nldr\": \"\u2025\",\n  \"nle\": \"\u2270\",\n  \"nleftarrow\": \"\u219A\",\n  \"nleftrightarrow\": \"\u21AE\",\n  \"nleq\": \"\u2270\",\n  \"nleqq\": \"\u2266\u0338\",\n  \"nleqslant\": \"\u2A7D\u0338\",\n  \"nles\": \"\u2A7D\u0338\",\n  \"nless\": \"\u226E\",\n  \"nlsim\": \"\u2274\",\n  \"nlt\": \"\u226E\",\n  \"nltri\": \"\u22EA\",\n  \"nltrie\": \"\u22EC\",\n  \"nmid\": \"\u2224\",\n  \"nopf\": \"\uD835\uDD5F\",\n  \"no\": \"\u00AC\",\n  \"not\": \"\u00AC\",\n  \"notin\": \"\u2209\",\n  \"notinE\": \"\u22F9\u0338\",\n  \"notindot\": \"\u22F5\u0338\",\n  \"notinva\": \"\u2209\",\n  \"notinvb\": \"\u22F7\",\n  \"notinvc\": \"\u22F6\",\n  \"notni\": \"\u220C\",\n  \"notniva\": \"\u220C\",\n  \"notnivb\": \"\u22FE\",\n  \"notnivc\": \"\u22FD\",\n  \"npar\": \"\u2226\",\n  \"nparallel\": \"\u2226\",\n  \"nparsl\": \"\u2AFD\u20E5\",\n  \"npart\": \"\u2202\u0338\",\n  \"npolint\": \"\u2A14\",\n  \"npr\": \"\u2280\",\n  \"nprcue\": \"\u22E0\",\n  \"npre\": \"\u2AAF\u0338\",\n  \"nprec\": \"\u2280\",\n  \"npreceq\": \"\u2AAF\u0338\",\n  \"nrArr\": \"\u21CF\",\n  \"nrarr\": \"\u219B\",\n  \"nrarrc\": \"\u2933\u0338\",\n  \"nrarrw\": \"\u219D\u0338\",\n  \"nrightarrow\": \"\u219B\",\n  \"nrtri\": \"\u22EB\",\n  \"nrtrie\": \"\u22ED\",\n  \"nsc\": \"\u2281\",\n  \"nsccue\": \"\u22E1\",\n  \"nsce\": \"\u2AB0\u0338\",\n  \"nscr\": \"\uD835\uDCC3\",\n  \"nshortmid\": \"\u2224\",\n  \"nshortparallel\": \"\u2226\",\n  \"nsim\": \"\u2241\",\n  \"nsime\": \"\u2244\",\n  \"nsimeq\": \"\u2244\",\n  \"nsmid\": \"\u2224\",\n  \"nspar\": \"\u2226\",\n  \"nsqsube\": \"\u22E2\",\n  \"nsqsupe\": \"\u22E3\",\n  \"nsub\": \"\u2284\",\n  \"nsubE\": \"\u2AC5\u0338\",\n  \"nsube\": \"\u2288\",\n  \"nsubset\": \"\u2282\u20D2\",\n  \"nsubseteq\": \"\u2288\",\n  \"nsubseteqq\": \"\u2AC5\u0338\",\n  \"nsucc\": \"\u2281\",\n  \"nsucceq\": \"\u2AB0\u0338\",\n  \"nsup\": \"\u2285\",\n  \"nsupE\": \"\u2AC6\u0338\",\n  \"nsupe\": \"\u2289\",\n  \"nsupset\": \"\u2283\u20D2\",\n  \"nsupseteq\": \"\u2289\",\n  \"nsupseteqq\": \"\u2AC6\u0338\",\n  \"ntgl\": \"\u2279\",\n  \"ntild\": \"\u00F1\",\n  \"ntilde\": \"\u00F1\",\n  \"ntlg\": \"\u2278\",\n  \"ntriangleleft\": \"\u22EA\",\n  \"ntrianglelefteq\": \"\u22EC\",\n  \"ntriangleright\": \"\u22EB\",\n  \"ntrianglerighteq\": \"\u22ED\",\n  \"nu\": \"\u03BD\",\n  \"num\": \"#\",\n  \"numero\": \"\u2116\",\n  \"numsp\": \"\u2007\",\n  \"nvDash\": \"\u22AD\",\n  \"nvHarr\": \"\u2904\",\n  \"nvap\": \"\u224D\u20D2\",\n  \"nvdash\": \"\u22AC\",\n  \"nvge\": \"\u2265\u20D2\",\n  \"nvgt\": \">\u20D2\",\n  \"nvinfin\": \"\u29DE\",\n  \"nvlArr\": \"\u2902\",\n  \"nvle\": \"\u2264\u20D2\",\n  \"nvlt\": \"<\u20D2\",\n  \"nvltrie\": \"\u22B4\u20D2\",\n  \"nvrArr\": \"\u2903\",\n  \"nvrtrie\": \"\u22B5\u20D2\",\n  \"nvsim\": \"\u223C\u20D2\",\n  \"nwArr\": \"\u21D6\",\n  \"nwarhk\": \"\u2923\",\n  \"nwarr\": \"\u2196\",\n  \"nwarrow\": \"\u2196\",\n  \"nwnear\": \"\u2927\",\n  \"oS\": \"\u24C8\",\n  \"oacut\": \"\u00F3\",\n  \"oacute\": \"\u00F3\",\n  \"oast\": \"\u229B\",\n  \"ocir\": \"\u00F4\",\n  \"ocirc\": \"\u00F4\",\n  \"ocy\": \"\u043E\",\n  \"odash\": \"\u229D\",\n  \"odblac\": \"\u0151\",\n  \"odiv\": \"\u2A38\",\n  \"odot\": \"\u2299\",\n  \"odsold\": \"\u29BC\",\n  \"oelig\": \"\u0153\",\n  \"ofcir\": \"\u29BF\",\n  \"ofr\": \"\uD835\uDD2C\",\n  \"ogon\": \"\u02DB\",\n  \"ograv\": \"\u00F2\",\n  \"ograve\": \"\u00F2\",\n  \"ogt\": \"\u29C1\",\n  \"ohbar\": \"\u29B5\",\n  \"ohm\": \"\u03A9\",\n  \"oint\": \"\u222E\",\n  \"olarr\": \"\u21BA\",\n  \"olcir\": \"\u29BE\",\n  \"olcross\": \"\u29BB\",\n  \"oline\": \"\u203E\",\n  \"olt\": \"\u29C0\",\n  \"omacr\": \"\u014D\",\n  \"omega\": \"\u03C9\",\n  \"omicron\": \"\u03BF\",\n  \"omid\": \"\u29B6\",\n  \"ominus\": \"\u2296\",\n  \"oopf\": \"\uD835\uDD60\",\n  \"opar\": \"\u29B7\",\n  \"operp\": \"\u29B9\",\n  \"oplus\": \"\u2295\",\n  \"or\": \"\u2228\",\n  \"orarr\": \"\u21BB\",\n  \"ord\": \"\u00BA\",\n  \"order\": \"\u2134\",\n  \"orderof\": \"\u2134\",\n  \"ordf\": \"\u00AA\",\n  \"ordm\": \"\u00BA\",\n  \"origof\": \"\u22B6\",\n  \"oror\": \"\u2A56\",\n  \"orslope\": \"\u2A57\",\n  \"orv\": \"\u2A5B\",\n  \"oscr\": \"\u2134\",\n  \"oslas\": \"\u00F8\",\n  \"oslash\": \"\u00F8\",\n  \"osol\": \"\u2298\",\n  \"otild\": \"\u00F5\",\n  \"otilde\": \"\u00F5\",\n  \"otimes\": \"\u2297\",\n  \"otimesas\": \"\u2A36\",\n  \"oum\": \"\u00F6\",\n  \"ouml\": \"\u00F6\",\n  \"ovbar\": \"\u233D\",\n  \"par\": \"\u00B6\",\n  \"para\": \"\u00B6\",\n  \"parallel\": \"\u2225\",\n  \"parsim\": \"\u2AF3\",\n  \"parsl\": \"\u2AFD\",\n  \"part\": \"\u2202\",\n  \"pcy\": \"\u043F\",\n  \"percnt\": \"%\",\n  \"period\": \".\",\n  \"permil\": \"\u2030\",\n  \"perp\": \"\u22A5\",\n  \"pertenk\": \"\u2031\",\n  \"pfr\": \"\uD835\uDD2D\",\n  \"phi\": \"\u03C6\",\n  \"phiv\": \"\u03D5\",\n  \"phmmat\": \"\u2133\",\n  \"phone\": \"\u260E\",\n  \"pi\": \"\u03C0\",\n  \"pitchfork\": \"\u22D4\",\n  \"piv\": \"\u03D6\",\n  \"planck\": \"\u210F\",\n  \"planckh\": \"\u210E\",\n  \"plankv\": \"\u210F\",\n  \"plus\": \"+\",\n  \"plusacir\": \"\u2A23\",\n  \"plusb\": \"\u229E\",\n  \"pluscir\": \"\u2A22\",\n  \"plusdo\": \"\u2214\",\n  \"plusdu\": \"\u2A25\",\n  \"pluse\": \"\u2A72\",\n  \"plusm\": \"\u00B1\",\n  \"plusmn\": \"\u00B1\",\n  \"plussim\": \"\u2A26\",\n  \"plustwo\": \"\u2A27\",\n  \"pm\": \"\u00B1\",\n  \"pointint\": \"\u2A15\",\n  \"popf\": \"\uD835\uDD61\",\n  \"poun\": \"\u00A3\",\n  \"pound\": \"\u00A3\",\n  \"pr\": \"\u227A\",\n  \"prE\": \"\u2AB3\",\n  \"prap\": \"\u2AB7\",\n  \"prcue\": \"\u227C\",\n  \"pre\": \"\u2AAF\",\n  \"prec\": \"\u227A\",\n  \"precapprox\": \"\u2AB7\",\n  \"preccurlyeq\": \"\u227C\",\n  \"preceq\": \"\u2AAF\",\n  \"precnapprox\": \"\u2AB9\",\n  \"precneqq\": \"\u2AB5\",\n  \"precnsim\": \"\u22E8\",\n  \"precsim\": \"\u227E\",\n  \"prime\": \"\u2032\",\n  \"primes\": \"\u2119\",\n  \"prnE\": \"\u2AB5\",\n  \"prnap\": \"\u2AB9\",\n  \"prnsim\": \"\u22E8\",\n  \"prod\": \"\u220F\",\n  \"profalar\": \"\u232E\",\n  \"profline\": \"\u2312\",\n  \"profsurf\": \"\u2313\",\n  \"prop\": \"\u221D\",\n  \"propto\": \"\u221D\",\n  \"prsim\": \"\u227E\",\n  \"prurel\": \"\u22B0\",\n  \"pscr\": \"\uD835\uDCC5\",\n  \"psi\": \"\u03C8\",\n  \"puncsp\": \"\u2008\",\n  \"qfr\": \"\uD835\uDD2E\",\n  \"qint\": \"\u2A0C\",\n  \"qopf\": \"\uD835\uDD62\",\n  \"qprime\": \"\u2057\",\n  \"qscr\": \"\uD835\uDCC6\",\n  \"quaternions\": \"\u210D\",\n  \"quatint\": \"\u2A16\",\n  \"quest\": \"?\",\n  \"questeq\": \"\u225F\",\n  \"quo\": \"\\\"\",\n  \"quot\": \"\\\"\",\n  \"rAarr\": \"\u21DB\",\n  \"rArr\": \"\u21D2\",\n  \"rAtail\": \"\u291C\",\n  \"rBarr\": \"\u290F\",\n  \"rHar\": \"\u2964\",\n  \"race\": \"\u223D\u0331\",\n  \"racute\": \"\u0155\",\n  \"radic\": \"\u221A\",\n  \"raemptyv\": \"\u29B3\",\n  \"rang\": \"\u27E9\",\n  \"rangd\": \"\u2992\",\n  \"range\": \"\u29A5\",\n  \"rangle\": \"\u27E9\",\n  \"raqu\": \"\u00BB\",\n  \"raquo\": \"\u00BB\",\n  \"rarr\": \"\u2192\",\n  \"rarrap\": \"\u2975\",\n  \"rarrb\": \"\u21E5\",\n  \"rarrbfs\": \"\u2920\",\n  \"rarrc\": \"\u2933\",\n  \"rarrfs\": \"\u291E\",\n  \"rarrhk\": \"\u21AA\",\n  \"rarrlp\": \"\u21AC\",\n  \"rarrpl\": \"\u2945\",\n  \"rarrsim\": \"\u2974\",\n  \"rarrtl\": \"\u21A3\",\n  \"rarrw\": \"\u219D\",\n  \"ratail\": \"\u291A\",\n  \"ratio\": \"\u2236\",\n  \"rationals\": \"\u211A\",\n  \"rbarr\": \"\u290D\",\n  \"rbbrk\": \"\u2773\",\n  \"rbrace\": \"}\",\n  \"rbrack\": \"]\",\n  \"rbrke\": \"\u298C\",\n  \"rbrksld\": \"\u298E\",\n  \"rbrkslu\": \"\u2990\",\n  \"rcaron\": \"\u0159\",\n  \"rcedil\": \"\u0157\",\n  \"rceil\": \"\u2309\",\n  \"rcub\": \"}\",\n  \"rcy\": \"\u0440\",\n  \"rdca\": \"\u2937\",\n  \"rdldhar\": \"\u2969\",\n  \"rdquo\": \"\u201D\",\n  \"rdquor\": \"\u201D\",\n  \"rdsh\": \"\u21B3\",\n  \"real\": \"\u211C\",\n  \"realine\": \"\u211B\",\n  \"realpart\": \"\u211C\",\n  \"reals\": \"\u211D\",\n  \"rect\": \"\u25AD\",\n  \"re\": \"\u00AE\",\n  \"reg\": \"\u00AE\",\n  \"rfisht\": \"\u297D\",\n  \"rfloor\": \"\u230B\",\n  \"rfr\": \"\uD835\uDD2F\",\n  \"rhard\": \"\u21C1\",\n  \"rharu\": \"\u21C0\",\n  \"rharul\": \"\u296C\",\n  \"rho\": \"\u03C1\",\n  \"rhov\": \"\u03F1\",\n  \"rightarrow\": \"\u2192\",\n  \"rightarrowtail\": \"\u21A3\",\n  \"rightharpoondown\": \"\u21C1\",\n  \"rightharpoonup\": \"\u21C0\",\n  \"rightleftarrows\": \"\u21C4\",\n  \"rightleftharpoons\": \"\u21CC\",\n  \"rightrightarrows\": \"\u21C9\",\n  \"rightsquigarrow\": \"\u219D\",\n  \"rightthreetimes\": \"\u22CC\",\n  \"ring\": \"\u02DA\",\n  \"risingdotseq\": \"\u2253\",\n  \"rlarr\": \"\u21C4\",\n  \"rlhar\": \"\u21CC\",\n  \"rlm\": \"\u200F\",\n  \"rmoust\": \"\u23B1\",\n  \"rmoustache\": \"\u23B1\",\n  \"rnmid\": \"\u2AEE\",\n  \"roang\": \"\u27ED\",\n  \"roarr\": \"\u21FE\",\n  \"robrk\": \"\u27E7\",\n  \"ropar\": \"\u2986\",\n  \"ropf\": \"\uD835\uDD63\",\n  \"roplus\": \"\u2A2E\",\n  \"rotimes\": \"\u2A35\",\n  \"rpar\": \")\",\n  \"rpargt\": \"\u2994\",\n  \"rppolint\": \"\u2A12\",\n  \"rrarr\": \"\u21C9\",\n  \"rsaquo\": \"\u203A\",\n  \"rscr\": \"\uD835\uDCC7\",\n  \"rsh\": \"\u21B1\",\n  \"rsqb\": \"]\",\n  \"rsquo\": \"\u2019\",\n  \"rsquor\": \"\u2019\",\n  \"rthree\": \"\u22CC\",\n  \"rtimes\": \"\u22CA\",\n  \"rtri\": \"\u25B9\",\n  \"rtrie\": \"\u22B5\",\n  \"rtrif\": \"\u25B8\",\n  \"rtriltri\": \"\u29CE\",\n  \"ruluhar\": \"\u2968\",\n  \"rx\": \"\u211E\",\n  \"sacute\": \"\u015B\",\n  \"sbquo\": \"\u201A\",\n  \"sc\": \"\u227B\",\n  \"scE\": \"\u2AB4\",\n  \"scap\": \"\u2AB8\",\n  \"scaron\": \"\u0161\",\n  \"sccue\": \"\u227D\",\n  \"sce\": \"\u2AB0\",\n  \"scedil\": \"\u015F\",\n  \"scirc\": \"\u015D\",\n  \"scnE\": \"\u2AB6\",\n  \"scnap\": \"\u2ABA\",\n  \"scnsim\": \"\u22E9\",\n  \"scpolint\": \"\u2A13\",\n  \"scsim\": \"\u227F\",\n  \"scy\": \"\u0441\",\n  \"sdot\": \"\u22C5\",\n  \"sdotb\": \"\u22A1\",\n  \"sdote\": \"\u2A66\",\n  \"seArr\": \"\u21D8\",\n  \"searhk\": \"\u2925\",\n  \"searr\": \"\u2198\",\n  \"searrow\": \"\u2198\",\n  \"sec\": \"\u00A7\",\n  \"sect\": \"\u00A7\",\n  \"semi\": \";\",\n  \"seswar\": \"\u2929\",\n  \"setminus\": \"\u2216\",\n  \"setmn\": \"\u2216\",\n  \"sext\": \"\u2736\",\n  \"sfr\": \"\uD835\uDD30\",\n  \"sfrown\": \"\u2322\",\n  \"sharp\": \"\u266F\",\n  \"shchcy\": \"\u0449\",\n  \"shcy\": \"\u0448\",\n  \"shortmid\": \"\u2223\",\n  \"shortparallel\": \"\u2225\",\n  \"sh\": \"\u00AD\",\n  \"shy\": \"\u00AD\",\n  \"sigma\": \"\u03C3\",\n  \"sigmaf\": \"\u03C2\",\n  \"sigmav\": \"\u03C2\",\n  \"sim\": \"\u223C\",\n  \"simdot\": \"\u2A6A\",\n  \"sime\": \"\u2243\",\n  \"simeq\": \"\u2243\",\n  \"simg\": \"\u2A9E\",\n  \"simgE\": \"\u2AA0\",\n  \"siml\": \"\u2A9D\",\n  \"simlE\": \"\u2A9F\",\n  \"simne\": \"\u2246\",\n  \"simplus\": \"\u2A24\",\n  \"simrarr\": \"\u2972\",\n  \"slarr\": \"\u2190\",\n  \"smallsetminus\": \"\u2216\",\n  \"smashp\": \"\u2A33\",\n  \"smeparsl\": \"\u29E4\",\n  \"smid\": \"\u2223\",\n  \"smile\": \"\u2323\",\n  \"smt\": \"\u2AAA\",\n  \"smte\": \"\u2AAC\",\n  \"smtes\": \"\u2AAC\uFE00\",\n  \"softcy\": \"\u044C\",\n  \"sol\": \"/\",\n  \"solb\": \"\u29C4\",\n  \"solbar\": \"\u233F\",\n  \"sopf\": \"\uD835\uDD64\",\n  \"spades\": \"\u2660\",\n  \"spadesuit\": \"\u2660\",\n  \"spar\": \"\u2225\",\n  \"sqcap\": \"\u2293\",\n  \"sqcaps\": \"\u2293\uFE00\",\n  \"sqcup\": \"\u2294\",\n  \"sqcups\": \"\u2294\uFE00\",\n  \"sqsub\": \"\u228F\",\n  \"sqsube\": \"\u2291\",\n  \"sqsubset\": \"\u228F\",\n  \"sqsubseteq\": \"\u2291\",\n  \"sqsup\": \"\u2290\",\n  \"sqsupe\": \"\u2292\",\n  \"sqsupset\": \"\u2290\",\n  \"sqsupseteq\": \"\u2292\",\n  \"squ\": \"\u25A1\",\n  \"square\": \"\u25A1\",\n  \"squarf\": \"\u25AA\",\n  \"squf\": \"\u25AA\",\n  \"srarr\": \"\u2192\",\n  \"sscr\": \"\uD835\uDCC8\",\n  \"ssetmn\": \"\u2216\",\n  \"ssmile\": \"\u2323\",\n  \"sstarf\": \"\u22C6\",\n  \"star\": \"\u2606\",\n  \"starf\": \"\u2605\",\n  \"straightepsilon\": \"\u03F5\",\n  \"straightphi\": \"\u03D5\",\n  \"strns\": \"\u00AF\",\n  \"sub\": \"\u2282\",\n  \"subE\": \"\u2AC5\",\n  \"subdot\": \"\u2ABD\",\n  \"sube\": \"\u2286\",\n  \"subedot\": \"\u2AC3\",\n  \"submult\": \"\u2AC1\",\n  \"subnE\": \"\u2ACB\",\n  \"subne\": \"\u228A\",\n  \"subplus\": \"\u2ABF\",\n  \"subrarr\": \"\u2979\",\n  \"subset\": \"\u2282\",\n  \"subseteq\": \"\u2286\",\n  \"subseteqq\": \"\u2AC5\",\n  \"subsetneq\": \"\u228A\",\n  \"subsetneqq\": \"\u2ACB\",\n  \"subsim\": \"\u2AC7\",\n  \"subsub\": \"\u2AD5\",\n  \"subsup\": \"\u2AD3\",\n  \"succ\": \"\u227B\",\n  \"succapprox\": \"\u2AB8\",\n  \"succcurlyeq\": \"\u227D\",\n  \"succeq\": \"\u2AB0\",\n  \"succnapprox\": \"\u2ABA\",\n  \"succneqq\": \"\u2AB6\",\n  \"succnsim\": \"\u22E9\",\n  \"succsim\": \"\u227F\",\n  \"sum\": \"\u2211\",\n  \"sung\": \"\u266A\",\n  \"sup\": \"\u2283\",\n  \"sup1\": \"\u00B9\",\n  \"sup2\": \"\u00B2\",\n  \"sup3\": \"\u00B3\",\n  \"supE\": \"\u2AC6\",\n  \"supdot\": \"\u2ABE\",\n  \"supdsub\": \"\u2AD8\",\n  \"supe\": \"\u2287\",\n  \"supedot\": \"\u2AC4\",\n  \"suphsol\": \"\u27C9\",\n  \"suphsub\": \"\u2AD7\",\n  \"suplarr\": \"\u297B\",\n  \"supmult\": \"\u2AC2\",\n  \"supnE\": \"\u2ACC\",\n  \"supne\": \"\u228B\",\n  \"supplus\": \"\u2AC0\",\n  \"supset\": \"\u2283\",\n  \"supseteq\": \"\u2287\",\n  \"supseteqq\": \"\u2AC6\",\n  \"supsetneq\": \"\u228B\",\n  \"supsetneqq\": \"\u2ACC\",\n  \"supsim\": \"\u2AC8\",\n  \"supsub\": \"\u2AD4\",\n  \"supsup\": \"\u2AD6\",\n  \"swArr\": \"\u21D9\",\n  \"swarhk\": \"\u2926\",\n  \"swarr\": \"\u2199\",\n  \"swarrow\": \"\u2199\",\n  \"swnwar\": \"\u292A\",\n  \"szli\": \"\u00DF\",\n  \"szlig\": \"\u00DF\",\n  \"target\": \"\u2316\",\n  \"tau\": \"\u03C4\",\n  \"tbrk\": \"\u23B4\",\n  \"tcaron\": \"\u0165\",\n  \"tcedil\": \"\u0163\",\n  \"tcy\": \"\u0442\",\n  \"tdot\": \"\u20DB\",\n  \"telrec\": \"\u2315\",\n  \"tfr\": \"\uD835\uDD31\",\n  \"there4\": \"\u2234\",\n  \"therefore\": \"\u2234\",\n  \"theta\": \"\u03B8\",\n  \"thetasym\": \"\u03D1\",\n  \"thetav\": \"\u03D1\",\n  \"thickapprox\": \"\u2248\",\n  \"thicksim\": \"\u223C\",\n  \"thinsp\": \"\u2009\",\n  \"thkap\": \"\u2248\",\n  \"thksim\": \"\u223C\",\n  \"thor\": \"\u00FE\",\n  \"thorn\": \"\u00FE\",\n  \"tilde\": \"\u02DC\",\n  \"time\": \"\u00D7\",\n  \"times\": \"\u00D7\",\n  \"timesb\": \"\u22A0\",\n  \"timesbar\": \"\u2A31\",\n  \"timesd\": \"\u2A30\",\n  \"tint\": \"\u222D\",\n  \"toea\": \"\u2928\",\n  \"top\": \"\u22A4\",\n  \"topbot\": \"\u2336\",\n  \"topcir\": \"\u2AF1\",\n  \"topf\": \"\uD835\uDD65\",\n  \"topfork\": \"\u2ADA\",\n  \"tosa\": \"\u2929\",\n  \"tprime\": \"\u2034\",\n  \"trade\": \"\u2122\",\n  \"triangle\": \"\u25B5\",\n  \"triangledown\": \"\u25BF\",\n  \"triangleleft\": \"\u25C3\",\n  \"trianglelefteq\": \"\u22B4\",\n  \"triangleq\": \"\u225C\",\n  \"triangleright\": \"\u25B9\",\n  \"trianglerighteq\": \"\u22B5\",\n  \"tridot\": \"\u25EC\",\n  \"trie\": \"\u225C\",\n  \"triminus\": \"\u2A3A\",\n  \"triplus\": \"\u2A39\",\n  \"trisb\": \"\u29CD\",\n  \"tritime\": \"\u2A3B\",\n  \"trpezium\": \"\u23E2\",\n  \"tscr\": \"\uD835\uDCC9\",\n  \"tscy\": \"\u0446\",\n  \"tshcy\": \"\u045B\",\n  \"tstrok\": \"\u0167\",\n  \"twixt\": \"\u226C\",\n  \"twoheadleftarrow\": \"\u219E\",\n  \"twoheadrightarrow\": \"\u21A0\",\n  \"uArr\": \"\u21D1\",\n  \"uHar\": \"\u2963\",\n  \"uacut\": \"\u00FA\",\n  \"uacute\": \"\u00FA\",\n  \"uarr\": \"\u2191\",\n  \"ubrcy\": \"\u045E\",\n  \"ubreve\": \"\u016D\",\n  \"ucir\": \"\u00FB\",\n  \"ucirc\": \"\u00FB\",\n  \"ucy\": \"\u0443\",\n  \"udarr\": \"\u21C5\",\n  \"udblac\": \"\u0171\",\n  \"udhar\": \"\u296E\",\n  \"ufisht\": \"\u297E\",\n  \"ufr\": \"\uD835\uDD32\",\n  \"ugrav\": \"\u00F9\",\n  \"ugrave\": \"\u00F9\",\n  \"uharl\": \"\u21BF\",\n  \"uharr\": \"\u21BE\",\n  \"uhblk\": \"\u2580\",\n  \"ulcorn\": \"\u231C\",\n  \"ulcorner\": \"\u231C\",\n  \"ulcrop\": \"\u230F\",\n  \"ultri\": \"\u25F8\",\n  \"umacr\": \"\u016B\",\n  \"um\": \"\u00A8\",\n  \"uml\": \"\u00A8\",\n  \"uogon\": \"\u0173\",\n  \"uopf\": \"\uD835\uDD66\",\n  \"uparrow\": \"\u2191\",\n  \"updownarrow\": \"\u2195\",\n  \"upharpoonleft\": \"\u21BF\",\n  \"upharpoonright\": \"\u21BE\",\n  \"uplus\": \"\u228E\",\n  \"upsi\": \"\u03C5\",\n  \"upsih\": \"\u03D2\",\n  \"upsilon\": \"\u03C5\",\n  \"upuparrows\": \"\u21C8\",\n  \"urcorn\": \"\u231D\",\n  \"urcorner\": \"\u231D\",\n  \"urcrop\": \"\u230E\",\n  \"uring\": \"\u016F\",\n  \"urtri\": \"\u25F9\",\n  \"uscr\": \"\uD835\uDCCA\",\n  \"utdot\": \"\u22F0\",\n  \"utilde\": \"\u0169\",\n  \"utri\": \"\u25B5\",\n  \"utrif\": \"\u25B4\",\n  \"uuarr\": \"\u21C8\",\n  \"uum\": \"\u00FC\",\n  \"uuml\": \"\u00FC\",\n  \"uwangle\": \"\u29A7\",\n  \"vArr\": \"\u21D5\",\n  \"vBar\": \"\u2AE8\",\n  \"vBarv\": \"\u2AE9\",\n  \"vDash\": \"\u22A8\",\n  \"vangrt\": \"\u299C\",\n  \"varepsilon\": \"\u03F5\",\n  \"varkappa\": \"\u03F0\",\n  \"varnothing\": \"\u2205\",\n  \"varphi\": \"\u03D5\",\n  \"varpi\": \"\u03D6\",\n  \"varpropto\": \"\u221D\",\n  \"varr\": \"\u2195\",\n  \"varrho\": \"\u03F1\",\n  \"varsigma\": \"\u03C2\",\n  \"varsubsetneq\": \"\u228A\uFE00\",\n  \"varsubsetneqq\": \"\u2ACB\uFE00\",\n  \"varsupsetneq\": \"\u228B\uFE00\",\n  \"varsupsetneqq\": \"\u2ACC\uFE00\",\n  \"vartheta\": \"\u03D1\",\n  \"vartriangleleft\": \"\u22B2\",\n  \"vartriangleright\": \"\u22B3\",\n  \"vcy\": \"\u0432\",\n  \"vdash\": \"\u22A2\",\n  \"vee\": \"\u2228\",\n  \"veebar\": \"\u22BB\",\n  \"veeeq\": \"\u225A\",\n  \"vellip\": \"\u22EE\",\n  \"verbar\": \"|\",\n  \"vert\": \"|\",\n  \"vfr\": \"\uD835\uDD33\",\n  \"vltri\": \"\u22B2\",\n  \"vnsub\": \"\u2282\u20D2\",\n  \"vnsup\": \"\u2283\u20D2\",\n  \"vopf\": \"\uD835\uDD67\",\n  \"vprop\": \"\u221D\",\n  \"vrtri\": \"\u22B3\",\n  \"vscr\": \"\uD835\uDCCB\",\n  \"vsubnE\": \"\u2ACB\uFE00\",\n  \"vsubne\": \"\u228A\uFE00\",\n  \"vsupnE\": \"\u2ACC\uFE00\",\n  \"vsupne\": \"\u228B\uFE00\",\n  \"vzigzag\": \"\u299A\",\n  \"wcirc\": \"\u0175\",\n  \"wedbar\": \"\u2A5F\",\n  \"wedge\": \"\u2227\",\n  \"wedgeq\": \"\u2259\",\n  \"weierp\": \"\u2118\",\n  \"wfr\": \"\uD835\uDD34\",\n  \"wopf\": \"\uD835\uDD68\",\n  \"wp\": \"\u2118\",\n  \"wr\": \"\u2240\",\n  \"wreath\": \"\u2240\",\n  \"wscr\": \"\uD835\uDCCC\",\n  \"xcap\": \"\u22C2\",\n  \"xcirc\": \"\u25EF\",\n  \"xcup\": \"\u22C3\",\n  \"xdtri\": \"\u25BD\",\n  \"xfr\": \"\uD835\uDD35\",\n  \"xhArr\": \"\u27FA\",\n  \"xharr\": \"\u27F7\",\n  \"xi\": \"\u03BE\",\n  \"xlArr\": \"\u27F8\",\n  \"xlarr\": \"\u27F5\",\n  \"xmap\": \"\u27FC\",\n  \"xnis\": \"\u22FB\",\n  \"xodot\": \"\u2A00\",\n  \"xopf\": \"\uD835\uDD69\",\n  \"xoplus\": \"\u2A01\",\n  \"xotime\": \"\u2A02\",\n  \"xrArr\": \"\u27F9\",\n  \"xrarr\": \"\u27F6\",\n  \"xscr\": \"\uD835\uDCCD\",\n  \"xsqcup\": \"\u2A06\",\n  \"xuplus\": \"\u2A04\",\n  \"xutri\": \"\u25B3\",\n  \"xvee\": \"\u22C1\",\n  \"xwedge\": \"\u22C0\",\n  \"yacut\": \"\u00FD\",\n  \"yacute\": \"\u00FD\",\n  \"yacy\": \"\u044F\",\n  \"ycirc\": \"\u0177\",\n  \"ycy\": \"\u044B\",\n  \"ye\": \"\u00A5\",\n  \"yen\": \"\u00A5\",\n  \"yfr\": \"\uD835\uDD36\",\n  \"yicy\": \"\u0457\",\n  \"yopf\": \"\uD835\uDD6A\",\n  \"yscr\": \"\uD835\uDCCE\",\n  \"yucy\": \"\u044E\",\n  \"yum\": \"\u00FF\",\n  \"yuml\": \"\u00FF\",\n  \"zacute\": \"\u017A\",\n  \"zcaron\": \"\u017E\",\n  \"zcy\": \"\u0437\",\n  \"zdot\": \"\u017C\",\n  \"zeetrf\": \"\u2128\",\n  \"zeta\": \"\u03B6\",\n  \"zfr\": \"\uD835\uDD37\",\n  \"zhcy\": \"\u0436\",\n  \"zigrarr\": \"\u21DD\",\n  \"zopf\": \"\uD835\uDD6B\",\n  \"zscr\": \"\uD835\uDCCF\",\n  \"zwj\": \"\u200D\",\n  \"zwnj\": \"\u200C\"\n}\n", "'use strict'\n\nvar characterEntities = require('character-entities')\n\nmodule.exports = decodeEntity\n\nvar own = {}.hasOwnProperty\n\nfunction decodeEntity(characters) {\n  return own.call(characterEntities, characters)\n    ? characterEntities[characters]\n    : false\n}\n", "'use strict'\n\nvar regexCheck = require('../util/regex-check.js')\n\nvar asciiDigit = regexCheck(/\\d/)\n\nmodule.exports = asciiDigit\n", "'use strict'\n\nvar regexCheck = require('../util/regex-check.js')\n\nvar asciiHexDigit = regexCheck(/[\\dA-Fa-f]/)\n\nmodule.exports = asciiHexDigit\n", "'use strict'\n\nvar decodeEntity = require('parse-entities/decode-entity.js')\nvar asciiAlphanumeric = require('../character/ascii-alphanumeric.js')\nvar asciiDigit = require('../character/ascii-digit.js')\nvar asciiHexDigit = require('../character/ascii-hex-digit.js')\n\nfunction _interopDefaultLegacy(e) {\n  return e && typeof e === 'object' && 'default' in e ? e : {default: e}\n}\n\nvar decodeEntity__default = /*#__PURE__*/ _interopDefaultLegacy(decodeEntity)\n\nvar characterReference = {\n  name: 'characterReference',\n  tokenize: tokenizeCharacterReference\n}\n\nfunction tokenizeCharacterReference(effects, ok, nok) {\n  var self = this\n  var size = 0\n  var max\n  var test\n  return start\n\n  function start(code) {\n    effects.enter('characterReference')\n    effects.enter('characterReferenceMarker')\n    effects.consume(code)\n    effects.exit('characterReferenceMarker')\n    return open\n  }\n\n  function open(code) {\n    if (code === 35) {\n      effects.enter('characterReferenceMarkerNumeric')\n      effects.consume(code)\n      effects.exit('characterReferenceMarkerNumeric')\n      return numeric\n    }\n\n    effects.enter('characterReferenceValue')\n    max = 31\n    test = asciiAlphanumeric\n    return value(code)\n  }\n\n  function numeric(code) {\n    if (code === 88 || code === 120) {\n      effects.enter('characterReferenceMarkerHexadecimal')\n      effects.consume(code)\n      effects.exit('characterReferenceMarkerHexadecimal')\n      effects.enter('characterReferenceValue')\n      max = 6\n      test = asciiHexDigit\n      return value\n    }\n\n    effects.enter('characterReferenceValue')\n    max = 7\n    test = asciiDigit\n    return value(code)\n  }\n\n  function value(code) {\n    var token\n\n    if (code === 59 && size) {\n      token = effects.exit('characterReferenceValue')\n\n      if (\n        test === asciiAlphanumeric &&\n        !decodeEntity__default['default'](self.sliceSerialize(token))\n      ) {\n        return nok(code)\n      }\n\n      effects.enter('characterReferenceMarker')\n      effects.consume(code)\n      effects.exit('characterReferenceMarker')\n      effects.exit('characterReference')\n      return ok\n    }\n\n    if (test(code) && size++ < max) {\n      effects.consume(code)\n      return value\n    }\n\n    return nok(code)\n  }\n}\n\nmodule.exports = characterReference\n", "'use strict'\n\nvar markdownLineEnding = require('../character/markdown-line-ending.js')\nvar markdownLineEndingOrSpace = require('../character/markdown-line-ending-or-space.js')\nvar prefixSize = require('../util/prefix-size.js')\nvar factorySpace = require('./factory-space.js')\n\nvar codeFenced = {\n  name: 'codeFenced',\n  tokenize: tokenizeCodeFenced,\n  concrete: true\n}\n\nfunction tokenizeCodeFenced(effects, ok, nok) {\n  var self = this\n  var closingFenceConstruct = {\n    tokenize: tokenizeClosingFence,\n    partial: true\n  }\n  var initialPrefix = prefixSize(this.events, 'linePrefix')\n  var sizeOpen = 0\n  var marker\n  return start\n\n  function start(code) {\n    effects.enter('codeFenced')\n    effects.enter('codeFencedFence')\n    effects.enter('codeFencedFenceSequence')\n    marker = code\n    return sequenceOpen(code)\n  }\n\n  function sequenceOpen(code) {\n    if (code === marker) {\n      effects.consume(code)\n      sizeOpen++\n      return sequenceOpen\n    }\n\n    effects.exit('codeFencedFenceSequence')\n    return sizeOpen < 3\n      ? nok(code)\n      : factorySpace(effects, infoOpen, 'whitespace')(code)\n  }\n\n  function infoOpen(code) {\n    if (code === null || markdownLineEnding(code)) {\n      return openAfter(code)\n    }\n\n    effects.enter('codeFencedFenceInfo')\n    effects.enter('chunkString', {\n      contentType: 'string'\n    })\n    return info(code)\n  }\n\n  function info(code) {\n    if (code === null || markdownLineEndingOrSpace(code)) {\n      effects.exit('chunkString')\n      effects.exit('codeFencedFenceInfo')\n      return factorySpace(effects, infoAfter, 'whitespace')(code)\n    }\n\n    if (code === 96 && code === marker) return nok(code)\n    effects.consume(code)\n    return info\n  }\n\n  function infoAfter(code) {\n    if (code === null || markdownLineEnding(code)) {\n      return openAfter(code)\n    }\n\n    effects.enter('codeFencedFenceMeta')\n    effects.enter('chunkString', {\n      contentType: 'string'\n    })\n    return meta(code)\n  }\n\n  function meta(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit('chunkString')\n      effects.exit('codeFencedFenceMeta')\n      return openAfter(code)\n    }\n\n    if (code === 96 && code === marker) return nok(code)\n    effects.consume(code)\n    return meta\n  }\n\n  function openAfter(code) {\n    effects.exit('codeFencedFence')\n    return self.interrupt ? ok(code) : content(code)\n  }\n\n  function content(code) {\n    if (code === null) {\n      return after(code)\n    }\n\n    if (markdownLineEnding(code)) {\n      effects.enter('lineEnding')\n      effects.consume(code)\n      effects.exit('lineEnding')\n      return effects.attempt(\n        closingFenceConstruct,\n        after,\n        initialPrefix\n          ? factorySpace(effects, content, 'linePrefix', initialPrefix + 1)\n          : content\n      )\n    }\n\n    effects.enter('codeFlowValue')\n    return contentContinue(code)\n  }\n\n  function contentContinue(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit('codeFlowValue')\n      return content(code)\n    }\n\n    effects.consume(code)\n    return contentContinue\n  }\n\n  function after(code) {\n    effects.exit('codeFenced')\n    return ok(code)\n  }\n\n  function tokenizeClosingFence(effects, ok, nok) {\n    var size = 0\n    return factorySpace(\n      effects,\n      closingSequenceStart,\n      'linePrefix',\n      this.parser.constructs.disable.null.indexOf('codeIndented') > -1\n        ? undefined\n        : 4\n    )\n\n    function closingSequenceStart(code) {\n      effects.enter('codeFencedFence')\n      effects.enter('codeFencedFenceSequence')\n      return closingSequence(code)\n    }\n\n    function closingSequence(code) {\n      if (code === marker) {\n        effects.consume(code)\n        size++\n        return closingSequence\n      }\n\n      if (size < sizeOpen) return nok(code)\n      effects.exit('codeFencedFenceSequence')\n      return factorySpace(effects, closingSequenceEnd, 'whitespace')(code)\n    }\n\n    function closingSequenceEnd(code) {\n      if (code === null || markdownLineEnding(code)) {\n        effects.exit('codeFencedFence')\n        return ok(code)\n      }\n\n      return nok(code)\n    }\n  }\n}\n\nmodule.exports = codeFenced\n", "'use strict'\n\nvar markdownLineEnding = require('../character/markdown-line-ending.js')\nvar chunkedSplice = require('../util/chunked-splice.js')\nvar prefixSize = require('../util/prefix-size.js')\nvar factorySpace = require('./factory-space.js')\n\nvar codeIndented = {\n  name: 'codeIndented',\n  tokenize: tokenizeCodeIndented,\n  resolve: resolveCodeIndented\n}\nvar indentedContentConstruct = {\n  tokenize: tokenizeIndentedContent,\n  partial: true\n}\n\nfunction resolveCodeIndented(events, context) {\n  var code = {\n    type: 'codeIndented',\n    start: events[0][1].start,\n    end: events[events.length - 1][1].end\n  }\n  chunkedSplice(events, 0, 0, [['enter', code, context]])\n  chunkedSplice(events, events.length, 0, [['exit', code, context]])\n  return events\n}\n\nfunction tokenizeCodeIndented(effects, ok, nok) {\n  return effects.attempt(indentedContentConstruct, afterPrefix, nok)\n\n  function afterPrefix(code) {\n    if (code === null) {\n      return ok(code)\n    }\n\n    if (markdownLineEnding(code)) {\n      return effects.attempt(indentedContentConstruct, afterPrefix, ok)(code)\n    }\n\n    effects.enter('codeFlowValue')\n    return content(code)\n  }\n\n  function content(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit('codeFlowValue')\n      return afterPrefix(code)\n    }\n\n    effects.consume(code)\n    return content\n  }\n}\n\nfunction tokenizeIndentedContent(effects, ok, nok) {\n  var self = this\n  return factorySpace(effects, afterPrefix, 'linePrefix', 4 + 1)\n\n  function afterPrefix(code) {\n    if (markdownLineEnding(code)) {\n      effects.enter('lineEnding')\n      effects.consume(code)\n      effects.exit('lineEnding')\n      return factorySpace(effects, afterPrefix, 'linePrefix', 4 + 1)\n    }\n\n    return prefixSize(self.events, 'linePrefix') < 4 ? nok(code) : ok(code)\n  }\n}\n\nmodule.exports = codeIndented\n", "'use strict'\n\nvar markdownLineEnding = require('../character/markdown-line-ending.js')\n\nvar codeText = {\n  name: 'codeText',\n  tokenize: tokenizeCodeText,\n  resolve: resolveCodeText,\n  previous: previous\n}\n\nfunction resolveCodeText(events) {\n  var tailExitIndex = events.length - 4\n  var headEnterIndex = 3\n  var index\n  var enter // If we start and end with an EOL or a space.\n\n  if (\n    (events[headEnterIndex][1].type === 'lineEnding' ||\n      events[headEnterIndex][1].type === 'space') &&\n    (events[tailExitIndex][1].type === 'lineEnding' ||\n      events[tailExitIndex][1].type === 'space')\n  ) {\n    index = headEnterIndex // And we have data.\n\n    while (++index < tailExitIndex) {\n      if (events[index][1].type === 'codeTextData') {\n        // Then we have padding.\n        events[tailExitIndex][1].type = events[headEnterIndex][1].type =\n          'codeTextPadding'\n        headEnterIndex += 2\n        tailExitIndex -= 2\n        break\n      }\n    }\n  } // Merge adjacent spaces and data.\n\n  index = headEnterIndex - 1\n  tailExitIndex++\n\n  while (++index <= tailExitIndex) {\n    if (enter === undefined) {\n      if (index !== tailExitIndex && events[index][1].type !== 'lineEnding') {\n        enter = index\n      }\n    } else if (\n      index === tailExitIndex ||\n      events[index][1].type === 'lineEnding'\n    ) {\n      events[enter][1].type = 'codeTextData'\n\n      if (index !== enter + 2) {\n        events[enter][1].end = events[index - 1][1].end\n        events.splice(enter + 2, index - enter - 2)\n        tailExitIndex -= index - enter - 2\n        index = enter + 2\n      }\n\n      enter = undefined\n    }\n  }\n\n  return events\n}\n\nfunction previous(code) {\n  // If there is a previous code, there will always be a tail.\n  return (\n    code !== 96 ||\n    this.events[this.events.length - 1][1].type === 'characterEscape'\n  )\n}\n\nfunction tokenizeCodeText(effects, ok, nok) {\n  var sizeOpen = 0\n  var size\n  var token\n  return start\n\n  function start(code) {\n    effects.enter('codeText')\n    effects.enter('codeTextSequence')\n    return openingSequence(code)\n  }\n\n  function openingSequence(code) {\n    if (code === 96) {\n      effects.consume(code)\n      sizeOpen++\n      return openingSequence\n    }\n\n    effects.exit('codeTextSequence')\n    return gap(code)\n  }\n\n  function gap(code) {\n    // EOF.\n    if (code === null) {\n      return nok(code)\n    } // Closing fence?\n    // Could also be data.\n\n    if (code === 96) {\n      token = effects.enter('codeTextSequence')\n      size = 0\n      return closingSequence(code)\n    } // Tabs don\u2019t work, and virtual spaces don\u2019t make sense.\n\n    if (code === 32) {\n      effects.enter('space')\n      effects.consume(code)\n      effects.exit('space')\n      return gap\n    }\n\n    if (markdownLineEnding(code)) {\n      effects.enter('lineEnding')\n      effects.consume(code)\n      effects.exit('lineEnding')\n      return gap\n    } // Data.\n\n    effects.enter('codeTextData')\n    return data(code)\n  } // In code.\n\n  function data(code) {\n    if (\n      code === null ||\n      code === 32 ||\n      code === 96 ||\n      markdownLineEnding(code)\n    ) {\n      effects.exit('codeTextData')\n      return gap(code)\n    }\n\n    effects.consume(code)\n    return data\n  } // Closing fence.\n\n  function closingSequence(code) {\n    // More.\n    if (code === 96) {\n      effects.consume(code)\n      size++\n      return closingSequence\n    } // Done!\n\n    if (size === sizeOpen) {\n      effects.exit('codeTextSequence')\n      effects.exit('codeText')\n      return ok(code)\n    } // More or less accents: mark as data.\n\n    token.type = 'codeTextData'\n    return data(code)\n  }\n}\n\nmodule.exports = codeText\n", "'use strict'\n\nvar asciiControl = require('../character/ascii-control.js')\nvar markdownLineEndingOrSpace = require('../character/markdown-line-ending-or-space.js')\nvar markdownLineEnding = require('../character/markdown-line-ending.js')\n\n// eslint-disable-next-line max-params\nfunction destinationFactory(\n  effects,\n  ok,\n  nok,\n  type,\n  literalType,\n  literalMarkerType,\n  rawType,\n  stringType,\n  max\n) {\n  var limit = max || Infinity\n  var balance = 0\n  return start\n\n  function start(code) {\n    if (code === 60) {\n      effects.enter(type)\n      effects.enter(literalType)\n      effects.enter(literalMarkerType)\n      effects.consume(code)\n      effects.exit(literalMarkerType)\n      return destinationEnclosedBefore\n    }\n\n    if (asciiControl(code) || code === 41) {\n      return nok(code)\n    }\n\n    effects.enter(type)\n    effects.enter(rawType)\n    effects.enter(stringType)\n    effects.enter('chunkString', {\n      contentType: 'string'\n    })\n    return destinationRaw(code)\n  }\n\n  function destinationEnclosedBefore(code) {\n    if (code === 62) {\n      effects.enter(literalMarkerType)\n      effects.consume(code)\n      effects.exit(literalMarkerType)\n      effects.exit(literalType)\n      effects.exit(type)\n      return ok\n    }\n\n    effects.enter(stringType)\n    effects.enter('chunkString', {\n      contentType: 'string'\n    })\n    return destinationEnclosed(code)\n  }\n\n  function destinationEnclosed(code) {\n    if (code === 62) {\n      effects.exit('chunkString')\n      effects.exit(stringType)\n      return destinationEnclosedBefore(code)\n    }\n\n    if (code === null || code === 60 || markdownLineEnding(code)) {\n      return nok(code)\n    }\n\n    effects.consume(code)\n    return code === 92 ? destinationEnclosedEscape : destinationEnclosed\n  }\n\n  function destinationEnclosedEscape(code) {\n    if (code === 60 || code === 62 || code === 92) {\n      effects.consume(code)\n      return destinationEnclosed\n    }\n\n    return destinationEnclosed(code)\n  }\n\n  function destinationRaw(code) {\n    if (code === 40) {\n      if (++balance > limit) return nok(code)\n      effects.consume(code)\n      return destinationRaw\n    }\n\n    if (code === 41) {\n      if (!balance--) {\n        effects.exit('chunkString')\n        effects.exit(stringType)\n        effects.exit(rawType)\n        effects.exit(type)\n        return ok(code)\n      }\n\n      effects.consume(code)\n      return destinationRaw\n    }\n\n    if (code === null || markdownLineEndingOrSpace(code)) {\n      if (balance) return nok(code)\n      effects.exit('chunkString')\n      effects.exit(stringType)\n      effects.exit(rawType)\n      effects.exit(type)\n      return ok(code)\n    }\n\n    if (asciiControl(code)) return nok(code)\n    effects.consume(code)\n    return code === 92 ? destinationRawEscape : destinationRaw\n  }\n\n  function destinationRawEscape(code) {\n    if (code === 40 || code === 41 || code === 92) {\n      effects.consume(code)\n      return destinationRaw\n    }\n\n    return destinationRaw(code)\n  }\n}\n\nmodule.exports = destinationFactory\n", "'use strict'\n\nvar markdownLineEnding = require('../character/markdown-line-ending.js')\nvar markdownSpace = require('../character/markdown-space.js')\n\n// eslint-disable-next-line max-params\nfunction labelFactory(effects, ok, nok, type, markerType, stringType) {\n  var self = this\n  var size = 0\n  var data\n  return start\n\n  function start(code) {\n    effects.enter(type)\n    effects.enter(markerType)\n    effects.consume(code)\n    effects.exit(markerType)\n    effects.enter(stringType)\n    return atBreak\n  }\n\n  function atBreak(code) {\n    if (\n      code === null ||\n      code === 91 ||\n      (code === 93 && !data) ||\n      /* c8 ignore next */\n      (code === 94 &&\n        /* c8 ignore next */\n        !size &&\n        /* c8 ignore next */\n        '_hiddenFootnoteSupport' in self.parser.constructs) ||\n      size > 999\n    ) {\n      return nok(code)\n    }\n\n    if (code === 93) {\n      effects.exit(stringType)\n      effects.enter(markerType)\n      effects.consume(code)\n      effects.exit(markerType)\n      effects.exit(type)\n      return ok\n    }\n\n    if (markdownLineEnding(code)) {\n      effects.enter('lineEnding')\n      effects.consume(code)\n      effects.exit('lineEnding')\n      return atBreak\n    }\n\n    effects.enter('chunkString', {\n      contentType: 'string'\n    })\n    return label(code)\n  }\n\n  function label(code) {\n    if (\n      code === null ||\n      code === 91 ||\n      code === 93 ||\n      markdownLineEnding(code) ||\n      size++ > 999\n    ) {\n      effects.exit('chunkString')\n      return atBreak(code)\n    }\n\n    effects.consume(code)\n    data = data || !markdownSpace(code)\n    return code === 92 ? labelEscape : label\n  }\n\n  function labelEscape(code) {\n    if (code === 91 || code === 92 || code === 93) {\n      effects.consume(code)\n      size++\n      return label\n    }\n\n    return label(code)\n  }\n}\n\nmodule.exports = labelFactory\n", "'use strict'\n\nvar markdownLineEnding = require('../character/markdown-line-ending.js')\nvar markdownSpace = require('../character/markdown-space.js')\nvar factorySpace = require('./factory-space.js')\n\nfunction whitespaceFactory(effects, ok) {\n  var seen\n  return start\n\n  function start(code) {\n    if (markdownLineEnding(code)) {\n      effects.enter('lineEnding')\n      effects.consume(code)\n      effects.exit('lineEnding')\n      seen = true\n      return start\n    }\n\n    if (markdownSpace(code)) {\n      return factorySpace(\n        effects,\n        start,\n        seen ? 'linePrefix' : 'lineSuffix'\n      )(code)\n    }\n\n    return ok(code)\n  }\n}\n\nmodule.exports = whitespaceFactory\n", "'use strict'\n\nvar markdownLineEnding = require('../character/markdown-line-ending.js')\nvar factorySpace = require('./factory-space.js')\n\nfunction titleFactory(effects, ok, nok, type, markerType, stringType) {\n  var marker\n  return start\n\n  function start(code) {\n    effects.enter(type)\n    effects.enter(markerType)\n    effects.consume(code)\n    effects.exit(markerType)\n    marker = code === 40 ? 41 : code\n    return atFirstTitleBreak\n  }\n\n  function atFirstTitleBreak(code) {\n    if (code === marker) {\n      effects.enter(markerType)\n      effects.consume(code)\n      effects.exit(markerType)\n      effects.exit(type)\n      return ok\n    }\n\n    effects.enter(stringType)\n    return atTitleBreak(code)\n  }\n\n  function atTitleBreak(code) {\n    if (code === marker) {\n      effects.exit(stringType)\n      return atFirstTitleBreak(marker)\n    }\n\n    if (code === null) {\n      return nok(code)\n    } // Note: blank lines can\u2019t exist in content.\n\n    if (markdownLineEnding(code)) {\n      effects.enter('lineEnding')\n      effects.consume(code)\n      effects.exit('lineEnding')\n      return factorySpace(effects, atTitleBreak, 'linePrefix')\n    }\n\n    effects.enter('chunkString', {\n      contentType: 'string'\n    })\n    return title(code)\n  }\n\n  function title(code) {\n    if (code === marker || code === null || markdownLineEnding(code)) {\n      effects.exit('chunkString')\n      return atTitleBreak(code)\n    }\n\n    effects.consume(code)\n    return code === 92 ? titleEscape : title\n  }\n\n  function titleEscape(code) {\n    if (code === marker || code === 92) {\n      effects.consume(code)\n      return title\n    }\n\n    return title(code)\n  }\n}\n\nmodule.exports = titleFactory\n", "'use strict'\n\nvar markdownLineEnding = require('../character/markdown-line-ending.js')\nvar markdownLineEndingOrSpace = require('../character/markdown-line-ending-or-space.js')\nvar normalizeIdentifier = require('../util/normalize-identifier.js')\nvar factoryDestination = require('./factory-destination.js')\nvar factoryLabel = require('./factory-label.js')\nvar factorySpace = require('./factory-space.js')\nvar factoryWhitespace = require('./factory-whitespace.js')\nvar factoryTitle = require('./factory-title.js')\n\nvar definition = {\n  name: 'definition',\n  tokenize: tokenizeDefinition\n}\nvar titleConstruct = {\n  tokenize: tokenizeTitle,\n  partial: true\n}\n\nfunction tokenizeDefinition(effects, ok, nok) {\n  var self = this\n  var identifier\n  return start\n\n  function start(code) {\n    effects.enter('definition')\n    return factoryLabel.call(\n      self,\n      effects,\n      labelAfter,\n      nok,\n      'definitionLabel',\n      'definitionLabelMarker',\n      'definitionLabelString'\n    )(code)\n  }\n\n  function labelAfter(code) {\n    identifier = normalizeIdentifier(\n      self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1)\n    )\n\n    if (code === 58) {\n      effects.enter('definitionMarker')\n      effects.consume(code)\n      effects.exit('definitionMarker') // Note: blank lines can\u2019t exist in content.\n\n      return factoryWhitespace(\n        effects,\n        factoryDestination(\n          effects,\n          effects.attempt(\n            titleConstruct,\n            factorySpace(effects, after, 'whitespace'),\n            factorySpace(effects, after, 'whitespace')\n          ),\n          nok,\n          'definitionDestination',\n          'definitionDestinationLiteral',\n          'definitionDestinationLiteralMarker',\n          'definitionDestinationRaw',\n          'definitionDestinationString'\n        )\n      )\n    }\n\n    return nok(code)\n  }\n\n  function after(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit('definition')\n\n      if (self.parser.defined.indexOf(identifier) < 0) {\n        self.parser.defined.push(identifier)\n      }\n\n      return ok(code)\n    }\n\n    return nok(code)\n  }\n}\n\nfunction tokenizeTitle(effects, ok, nok) {\n  return start\n\n  function start(code) {\n    return markdownLineEndingOrSpace(code)\n      ? factoryWhitespace(effects, before)(code)\n      : nok(code)\n  }\n\n  function before(code) {\n    if (code === 34 || code === 39 || code === 40) {\n      return factoryTitle(\n        effects,\n        factorySpace(effects, after, 'whitespace'),\n        nok,\n        'definitionTitle',\n        'definitionTitleMarker',\n        'definitionTitleString'\n      )(code)\n    }\n\n    return nok(code)\n  }\n\n  function after(code) {\n    return code === null || markdownLineEnding(code) ? ok(code) : nok(code)\n  }\n}\n\nmodule.exports = definition\n", "'use strict'\n\nvar markdownLineEnding = require('../character/markdown-line-ending.js')\n\nvar hardBreakEscape = {\n  name: 'hardBreakEscape',\n  tokenize: tokenizeHardBreakEscape\n}\n\nfunction tokenizeHardBreakEscape(effects, ok, nok) {\n  return start\n\n  function start(code) {\n    effects.enter('hardBreakEscape')\n    effects.enter('escapeMarker')\n    effects.consume(code)\n    return open\n  }\n\n  function open(code) {\n    if (markdownLineEnding(code)) {\n      effects.exit('escapeMarker')\n      effects.exit('hardBreakEscape')\n      return ok(code)\n    }\n\n    return nok(code)\n  }\n}\n\nmodule.exports = hardBreakEscape\n", "'use strict'\n\nvar markdownLineEnding = require('../character/markdown-line-ending.js')\nvar markdownLineEndingOrSpace = require('../character/markdown-line-ending-or-space.js')\nvar markdownSpace = require('../character/markdown-space.js')\nvar chunkedSplice = require('../util/chunked-splice.js')\nvar factorySpace = require('./factory-space.js')\n\nvar headingAtx = {\n  name: 'headingAtx',\n  tokenize: tokenizeHeadingAtx,\n  resolve: resolveHeadingAtx\n}\n\nfunction resolveHeadingAtx(events, context) {\n  var contentEnd = events.length - 2\n  var contentStart = 3\n  var content\n  var text // Prefix whitespace, part of the opening.\n\n  if (events[contentStart][1].type === 'whitespace') {\n    contentStart += 2\n  } // Suffix whitespace, part of the closing.\n\n  if (\n    contentEnd - 2 > contentStart &&\n    events[contentEnd][1].type === 'whitespace'\n  ) {\n    contentEnd -= 2\n  }\n\n  if (\n    events[contentEnd][1].type === 'atxHeadingSequence' &&\n    (contentStart === contentEnd - 1 ||\n      (contentEnd - 4 > contentStart &&\n        events[contentEnd - 2][1].type === 'whitespace'))\n  ) {\n    contentEnd -= contentStart + 1 === contentEnd ? 2 : 4\n  }\n\n  if (contentEnd > contentStart) {\n    content = {\n      type: 'atxHeadingText',\n      start: events[contentStart][1].start,\n      end: events[contentEnd][1].end\n    }\n    text = {\n      type: 'chunkText',\n      start: events[contentStart][1].start,\n      end: events[contentEnd][1].end,\n      contentType: 'text'\n    }\n    chunkedSplice(events, contentStart, contentEnd - contentStart + 1, [\n      ['enter', content, context],\n      ['enter', text, context],\n      ['exit', text, context],\n      ['exit', content, context]\n    ])\n  }\n\n  return events\n}\n\nfunction tokenizeHeadingAtx(effects, ok, nok) {\n  var self = this\n  var size = 0\n  return start\n\n  function start(code) {\n    effects.enter('atxHeading')\n    effects.enter('atxHeadingSequence')\n    return fenceOpenInside(code)\n  }\n\n  function fenceOpenInside(code) {\n    if (code === 35 && size++ < 6) {\n      effects.consume(code)\n      return fenceOpenInside\n    }\n\n    if (code === null || markdownLineEndingOrSpace(code)) {\n      effects.exit('atxHeadingSequence')\n      return self.interrupt ? ok(code) : headingBreak(code)\n    }\n\n    return nok(code)\n  }\n\n  function headingBreak(code) {\n    if (code === 35) {\n      effects.enter('atxHeadingSequence')\n      return sequence(code)\n    }\n\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit('atxHeading')\n      return ok(code)\n    }\n\n    if (markdownSpace(code)) {\n      return factorySpace(effects, headingBreak, 'whitespace')(code)\n    }\n\n    effects.enter('atxHeadingText')\n    return data(code)\n  }\n\n  function sequence(code) {\n    if (code === 35) {\n      effects.consume(code)\n      return sequence\n    }\n\n    effects.exit('atxHeadingSequence')\n    return headingBreak(code)\n  }\n\n  function data(code) {\n    if (code === null || code === 35 || markdownLineEndingOrSpace(code)) {\n      effects.exit('atxHeadingText')\n      return headingBreak(code)\n    }\n\n    effects.consume(code)\n    return data\n  }\n}\n\nmodule.exports = headingAtx\n", "'use strict'\n\n// This module is copied from <https://spec.commonmark.org/0.29/#html-blocks>.\nvar basics = [\n  'address',\n  'article',\n  'aside',\n  'base',\n  'basefont',\n  'blockquote',\n  'body',\n  'caption',\n  'center',\n  'col',\n  'colgroup',\n  'dd',\n  'details',\n  'dialog',\n  'dir',\n  'div',\n  'dl',\n  'dt',\n  'fieldset',\n  'figcaption',\n  'figure',\n  'footer',\n  'form',\n  'frame',\n  'frameset',\n  'h1',\n  'h2',\n  'h3',\n  'h4',\n  'h5',\n  'h6',\n  'head',\n  'header',\n  'hr',\n  'html',\n  'iframe',\n  'legend',\n  'li',\n  'link',\n  'main',\n  'menu',\n  'menuitem',\n  'nav',\n  'noframes',\n  'ol',\n  'optgroup',\n  'option',\n  'p',\n  'param',\n  'section',\n  'source',\n  'summary',\n  'table',\n  'tbody',\n  'td',\n  'tfoot',\n  'th',\n  'thead',\n  'title',\n  'tr',\n  'track',\n  'ul'\n]\n\nmodule.exports = basics\n", "'use strict'\n\n// This module is copied from <https://spec.commonmark.org/0.29/#html-blocks>.\nvar raws = ['pre', 'script', 'style', 'textarea']\n\nmodule.exports = raws\n", "'use strict'\n\nvar asciiAlpha = require('../character/ascii-alpha.js')\nvar asciiAlphanumeric = require('../character/ascii-alphanumeric.js')\nvar markdownLineEnding = require('../character/markdown-line-ending.js')\nvar markdownLineEndingOrSpace = require('../character/markdown-line-ending-or-space.js')\nvar markdownSpace = require('../character/markdown-space.js')\nvar fromCharCode = require('../constant/from-char-code.js')\nvar htmlBlockNames = require('../constant/html-block-names.js')\nvar htmlRawNames = require('../constant/html-raw-names.js')\nvar partialBlankLine = require('./partial-blank-line.js')\n\nvar htmlFlow = {\n  name: 'htmlFlow',\n  tokenize: tokenizeHtmlFlow,\n  resolveTo: resolveToHtmlFlow,\n  concrete: true\n}\nvar nextBlankConstruct = {\n  tokenize: tokenizeNextBlank,\n  partial: true\n}\n\nfunction resolveToHtmlFlow(events) {\n  var index = events.length\n\n  while (index--) {\n    if (events[index][0] === 'enter' && events[index][1].type === 'htmlFlow') {\n      break\n    }\n  }\n\n  if (index > 1 && events[index - 2][1].type === 'linePrefix') {\n    // Add the prefix start to the HTML token.\n    events[index][1].start = events[index - 2][1].start // Add the prefix start to the HTML line token.\n\n    events[index + 1][1].start = events[index - 2][1].start // Remove the line prefix.\n\n    events.splice(index - 2, 2)\n  }\n\n  return events\n}\n\nfunction tokenizeHtmlFlow(effects, ok, nok) {\n  var self = this\n  var kind\n  var startTag\n  var buffer\n  var index\n  var marker\n  return start\n\n  function start(code) {\n    effects.enter('htmlFlow')\n    effects.enter('htmlFlowData')\n    effects.consume(code)\n    return open\n  }\n\n  function open(code) {\n    if (code === 33) {\n      effects.consume(code)\n      return declarationStart\n    }\n\n    if (code === 47) {\n      effects.consume(code)\n      return tagCloseStart\n    }\n\n    if (code === 63) {\n      effects.consume(code)\n      kind = 3 // While we\u2019re in an instruction instead of a declaration, we\u2019re on a `?`\n      // right now, so we do need to search for `>`, similar to declarations.\n\n      return self.interrupt ? ok : continuationDeclarationInside\n    }\n\n    if (asciiAlpha(code)) {\n      effects.consume(code)\n      buffer = fromCharCode(code)\n      startTag = true\n      return tagName\n    }\n\n    return nok(code)\n  }\n\n  function declarationStart(code) {\n    if (code === 45) {\n      effects.consume(code)\n      kind = 2\n      return commentOpenInside\n    }\n\n    if (code === 91) {\n      effects.consume(code)\n      kind = 5\n      buffer = 'CDATA['\n      index = 0\n      return cdataOpenInside\n    }\n\n    if (asciiAlpha(code)) {\n      effects.consume(code)\n      kind = 4\n      return self.interrupt ? ok : continuationDeclarationInside\n    }\n\n    return nok(code)\n  }\n\n  function commentOpenInside(code) {\n    if (code === 45) {\n      effects.consume(code)\n      return self.interrupt ? ok : continuationDeclarationInside\n    }\n\n    return nok(code)\n  }\n\n  function cdataOpenInside(code) {\n    if (code === buffer.charCodeAt(index++)) {\n      effects.consume(code)\n      return index === buffer.length\n        ? self.interrupt\n          ? ok\n          : continuation\n        : cdataOpenInside\n    }\n\n    return nok(code)\n  }\n\n  function tagCloseStart(code) {\n    if (asciiAlpha(code)) {\n      effects.consume(code)\n      buffer = fromCharCode(code)\n      return tagName\n    }\n\n    return nok(code)\n  }\n\n  function tagName(code) {\n    if (\n      code === null ||\n      code === 47 ||\n      code === 62 ||\n      markdownLineEndingOrSpace(code)\n    ) {\n      if (\n        code !== 47 &&\n        startTag &&\n        htmlRawNames.indexOf(buffer.toLowerCase()) > -1\n      ) {\n        kind = 1\n        return self.interrupt ? ok(code) : continuation(code)\n      }\n\n      if (htmlBlockNames.indexOf(buffer.toLowerCase()) > -1) {\n        kind = 6\n\n        if (code === 47) {\n          effects.consume(code)\n          return basicSelfClosing\n        }\n\n        return self.interrupt ? ok(code) : continuation(code)\n      }\n\n      kind = 7 // Do not support complete HTML when interrupting.\n\n      return self.interrupt\n        ? nok(code)\n        : startTag\n        ? completeAttributeNameBefore(code)\n        : completeClosingTagAfter(code)\n    }\n\n    if (code === 45 || asciiAlphanumeric(code)) {\n      effects.consume(code)\n      buffer += fromCharCode(code)\n      return tagName\n    }\n\n    return nok(code)\n  }\n\n  function basicSelfClosing(code) {\n    if (code === 62) {\n      effects.consume(code)\n      return self.interrupt ? ok : continuation\n    }\n\n    return nok(code)\n  }\n\n  function completeClosingTagAfter(code) {\n    if (markdownSpace(code)) {\n      effects.consume(code)\n      return completeClosingTagAfter\n    }\n\n    return completeEnd(code)\n  }\n\n  function completeAttributeNameBefore(code) {\n    if (code === 47) {\n      effects.consume(code)\n      return completeEnd\n    }\n\n    if (code === 58 || code === 95 || asciiAlpha(code)) {\n      effects.consume(code)\n      return completeAttributeName\n    }\n\n    if (markdownSpace(code)) {\n      effects.consume(code)\n      return completeAttributeNameBefore\n    }\n\n    return completeEnd(code)\n  }\n\n  function completeAttributeName(code) {\n    if (\n      code === 45 ||\n      code === 46 ||\n      code === 58 ||\n      code === 95 ||\n      asciiAlphanumeric(code)\n    ) {\n      effects.consume(code)\n      return completeAttributeName\n    }\n\n    return completeAttributeNameAfter(code)\n  }\n\n  function completeAttributeNameAfter(code) {\n    if (code === 61) {\n      effects.consume(code)\n      return completeAttributeValueBefore\n    }\n\n    if (markdownSpace(code)) {\n      effects.consume(code)\n      return completeAttributeNameAfter\n    }\n\n    return completeAttributeNameBefore(code)\n  }\n\n  function completeAttributeValueBefore(code) {\n    if (\n      code === null ||\n      code === 60 ||\n      code === 61 ||\n      code === 62 ||\n      code === 96\n    ) {\n      return nok(code)\n    }\n\n    if (code === 34 || code === 39) {\n      effects.consume(code)\n      marker = code\n      return completeAttributeValueQuoted\n    }\n\n    if (markdownSpace(code)) {\n      effects.consume(code)\n      return completeAttributeValueBefore\n    }\n\n    marker = undefined\n    return completeAttributeValueUnquoted(code)\n  }\n\n  function completeAttributeValueQuoted(code) {\n    if (code === marker) {\n      effects.consume(code)\n      return completeAttributeValueQuotedAfter\n    }\n\n    if (code === null || markdownLineEnding(code)) {\n      return nok(code)\n    }\n\n    effects.consume(code)\n    return completeAttributeValueQuoted\n  }\n\n  function completeAttributeValueUnquoted(code) {\n    if (\n      code === null ||\n      code === 34 ||\n      code === 39 ||\n      code === 60 ||\n      code === 61 ||\n      code === 62 ||\n      code === 96 ||\n      markdownLineEndingOrSpace(code)\n    ) {\n      return completeAttributeNameAfter(code)\n    }\n\n    effects.consume(code)\n    return completeAttributeValueUnquoted\n  }\n\n  function completeAttributeValueQuotedAfter(code) {\n    if (code === 47 || code === 62 || markdownSpace(code)) {\n      return completeAttributeNameBefore(code)\n    }\n\n    return nok(code)\n  }\n\n  function completeEnd(code) {\n    if (code === 62) {\n      effects.consume(code)\n      return completeAfter\n    }\n\n    return nok(code)\n  }\n\n  function completeAfter(code) {\n    if (markdownSpace(code)) {\n      effects.consume(code)\n      return completeAfter\n    }\n\n    return code === null || markdownLineEnding(code)\n      ? continuation(code)\n      : nok(code)\n  }\n\n  function continuation(code) {\n    if (code === 45 && kind === 2) {\n      effects.consume(code)\n      return continuationCommentInside\n    }\n\n    if (code === 60 && kind === 1) {\n      effects.consume(code)\n      return continuationRawTagOpen\n    }\n\n    if (code === 62 && kind === 4) {\n      effects.consume(code)\n      return continuationClose\n    }\n\n    if (code === 63 && kind === 3) {\n      effects.consume(code)\n      return continuationDeclarationInside\n    }\n\n    if (code === 93 && kind === 5) {\n      effects.consume(code)\n      return continuationCharacterDataInside\n    }\n\n    if (markdownLineEnding(code) && (kind === 6 || kind === 7)) {\n      return effects.check(\n        nextBlankConstruct,\n        continuationClose,\n        continuationAtLineEnding\n      )(code)\n    }\n\n    if (code === null || markdownLineEnding(code)) {\n      return continuationAtLineEnding(code)\n    }\n\n    effects.consume(code)\n    return continuation\n  }\n\n  function continuationAtLineEnding(code) {\n    effects.exit('htmlFlowData')\n    return htmlContinueStart(code)\n  }\n\n  function htmlContinueStart(code) {\n    if (code === null) {\n      return done(code)\n    }\n\n    if (markdownLineEnding(code)) {\n      effects.enter('lineEnding')\n      effects.consume(code)\n      effects.exit('lineEnding')\n      return htmlContinueStart\n    }\n\n    effects.enter('htmlFlowData')\n    return continuation(code)\n  }\n\n  function continuationCommentInside(code) {\n    if (code === 45) {\n      effects.consume(code)\n      return continuationDeclarationInside\n    }\n\n    return continuation(code)\n  }\n\n  function continuationRawTagOpen(code) {\n    if (code === 47) {\n      effects.consume(code)\n      buffer = ''\n      return continuationRawEndTag\n    }\n\n    return continuation(code)\n  }\n\n  function continuationRawEndTag(code) {\n    if (code === 62 && htmlRawNames.indexOf(buffer.toLowerCase()) > -1) {\n      effects.consume(code)\n      return continuationClose\n    }\n\n    if (asciiAlpha(code) && buffer.length < 8) {\n      effects.consume(code)\n      buffer += fromCharCode(code)\n      return continuationRawEndTag\n    }\n\n    return continuation(code)\n  }\n\n  function continuationCharacterDataInside(code) {\n    if (code === 93) {\n      effects.consume(code)\n      return continuationDeclarationInside\n    }\n\n    return continuation(code)\n  }\n\n  function continuationDeclarationInside(code) {\n    if (code === 62) {\n      effects.consume(code)\n      return continuationClose\n    }\n\n    return continuation(code)\n  }\n\n  function continuationClose(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit('htmlFlowData')\n      return done(code)\n    }\n\n    effects.consume(code)\n    return continuationClose\n  }\n\n  function done(code) {\n    effects.exit('htmlFlow')\n    return ok(code)\n  }\n}\n\nfunction tokenizeNextBlank(effects, ok, nok) {\n  return start\n\n  function start(code) {\n    effects.exit('htmlFlowData')\n    effects.enter('lineEndingBlank')\n    effects.consume(code)\n    effects.exit('lineEndingBlank')\n    return effects.attempt(partialBlankLine, ok, nok)\n  }\n}\n\nmodule.exports = htmlFlow\n", "'use strict'\n\nvar asciiAlpha = require('../character/ascii-alpha.js')\nvar asciiAlphanumeric = require('../character/ascii-alphanumeric.js')\nvar markdownLineEnding = require('../character/markdown-line-ending.js')\nvar markdownLineEndingOrSpace = require('../character/markdown-line-ending-or-space.js')\nvar markdownSpace = require('../character/markdown-space.js')\nvar factorySpace = require('./factory-space.js')\n\nvar htmlText = {\n  name: 'htmlText',\n  tokenize: tokenizeHtmlText\n}\n\nfunction tokenizeHtmlText(effects, ok, nok) {\n  var self = this\n  var marker\n  var buffer\n  var index\n  var returnState\n  return start\n\n  function start(code) {\n    effects.enter('htmlText')\n    effects.enter('htmlTextData')\n    effects.consume(code)\n    return open\n  }\n\n  function open(code) {\n    if (code === 33) {\n      effects.consume(code)\n      return declarationOpen\n    }\n\n    if (code === 47) {\n      effects.consume(code)\n      return tagCloseStart\n    }\n\n    if (code === 63) {\n      effects.consume(code)\n      return instruction\n    }\n\n    if (asciiAlpha(code)) {\n      effects.consume(code)\n      return tagOpen\n    }\n\n    return nok(code)\n  }\n\n  function declarationOpen(code) {\n    if (code === 45) {\n      effects.consume(code)\n      return commentOpen\n    }\n\n    if (code === 91) {\n      effects.consume(code)\n      buffer = 'CDATA['\n      index = 0\n      return cdataOpen\n    }\n\n    if (asciiAlpha(code)) {\n      effects.consume(code)\n      return declaration\n    }\n\n    return nok(code)\n  }\n\n  function commentOpen(code) {\n    if (code === 45) {\n      effects.consume(code)\n      return commentStart\n    }\n\n    return nok(code)\n  }\n\n  function commentStart(code) {\n    if (code === null || code === 62) {\n      return nok(code)\n    }\n\n    if (code === 45) {\n      effects.consume(code)\n      return commentStartDash\n    }\n\n    return comment(code)\n  }\n\n  function commentStartDash(code) {\n    if (code === null || code === 62) {\n      return nok(code)\n    }\n\n    return comment(code)\n  }\n\n  function comment(code) {\n    if (code === null) {\n      return nok(code)\n    }\n\n    if (code === 45) {\n      effects.consume(code)\n      return commentClose\n    }\n\n    if (markdownLineEnding(code)) {\n      returnState = comment\n      return atLineEnding(code)\n    }\n\n    effects.consume(code)\n    return comment\n  }\n\n  function commentClose(code) {\n    if (code === 45) {\n      effects.consume(code)\n      return end\n    }\n\n    return comment(code)\n  }\n\n  function cdataOpen(code) {\n    if (code === buffer.charCodeAt(index++)) {\n      effects.consume(code)\n      return index === buffer.length ? cdata : cdataOpen\n    }\n\n    return nok(code)\n  }\n\n  function cdata(code) {\n    if (code === null) {\n      return nok(code)\n    }\n\n    if (code === 93) {\n      effects.consume(code)\n      return cdataClose\n    }\n\n    if (markdownLineEnding(code)) {\n      returnState = cdata\n      return atLineEnding(code)\n    }\n\n    effects.consume(code)\n    return cdata\n  }\n\n  function cdataClose(code) {\n    if (code === 93) {\n      effects.consume(code)\n      return cdataEnd\n    }\n\n    return cdata(code)\n  }\n\n  function cdataEnd(code) {\n    if (code === 62) {\n      return end(code)\n    }\n\n    if (code === 93) {\n      effects.consume(code)\n      return cdataEnd\n    }\n\n    return cdata(code)\n  }\n\n  function declaration(code) {\n    if (code === null || code === 62) {\n      return end(code)\n    }\n\n    if (markdownLineEnding(code)) {\n      returnState = declaration\n      return atLineEnding(code)\n    }\n\n    effects.consume(code)\n    return declaration\n  }\n\n  function instruction(code) {\n    if (code === null) {\n      return nok(code)\n    }\n\n    if (code === 63) {\n      effects.consume(code)\n      return instructionClose\n    }\n\n    if (markdownLineEnding(code)) {\n      returnState = instruction\n      return atLineEnding(code)\n    }\n\n    effects.consume(code)\n    return instruction\n  }\n\n  function instructionClose(code) {\n    return code === 62 ? end(code) : instruction(code)\n  }\n\n  function tagCloseStart(code) {\n    if (asciiAlpha(code)) {\n      effects.consume(code)\n      return tagClose\n    }\n\n    return nok(code)\n  }\n\n  function tagClose(code) {\n    if (code === 45 || asciiAlphanumeric(code)) {\n      effects.consume(code)\n      return tagClose\n    }\n\n    return tagCloseBetween(code)\n  }\n\n  function tagCloseBetween(code) {\n    if (markdownLineEnding(code)) {\n      returnState = tagCloseBetween\n      return atLineEnding(code)\n    }\n\n    if (markdownSpace(code)) {\n      effects.consume(code)\n      return tagCloseBetween\n    }\n\n    return end(code)\n  }\n\n  function tagOpen(code) {\n    if (code === 45 || asciiAlphanumeric(code)) {\n      effects.consume(code)\n      return tagOpen\n    }\n\n    if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) {\n      return tagOpenBetween(code)\n    }\n\n    return nok(code)\n  }\n\n  function tagOpenBetween(code) {\n    if (code === 47) {\n      effects.consume(code)\n      return end\n    }\n\n    if (code === 58 || code === 95 || asciiAlpha(code)) {\n      effects.consume(code)\n      return tagOpenAttributeName\n    }\n\n    if (markdownLineEnding(code)) {\n      returnState = tagOpenBetween\n      return atLineEnding(code)\n    }\n\n    if (markdownSpace(code)) {\n      effects.consume(code)\n      return tagOpenBetween\n    }\n\n    return end(code)\n  }\n\n  function tagOpenAttributeName(code) {\n    if (\n      code === 45 ||\n      code === 46 ||\n      code === 58 ||\n      code === 95 ||\n      asciiAlphanumeric(code)\n    ) {\n      effects.consume(code)\n      return tagOpenAttributeName\n    }\n\n    return tagOpenAttributeNameAfter(code)\n  }\n\n  function tagOpenAttributeNameAfter(code) {\n    if (code === 61) {\n      effects.consume(code)\n      return tagOpenAttributeValueBefore\n    }\n\n    if (markdownLineEnding(code)) {\n      returnState = tagOpenAttributeNameAfter\n      return atLineEnding(code)\n    }\n\n    if (markdownSpace(code)) {\n      effects.consume(code)\n      return tagOpenAttributeNameAfter\n    }\n\n    return tagOpenBetween(code)\n  }\n\n  function tagOpenAttributeValueBefore(code) {\n    if (\n      code === null ||\n      code === 60 ||\n      code === 61 ||\n      code === 62 ||\n      code === 96\n    ) {\n      return nok(code)\n    }\n\n    if (code === 34 || code === 39) {\n      effects.consume(code)\n      marker = code\n      return tagOpenAttributeValueQuoted\n    }\n\n    if (markdownLineEnding(code)) {\n      returnState = tagOpenAttributeValueBefore\n      return atLineEnding(code)\n    }\n\n    if (markdownSpace(code)) {\n      effects.consume(code)\n      return tagOpenAttributeValueBefore\n    }\n\n    effects.consume(code)\n    marker = undefined\n    return tagOpenAttributeValueUnquoted\n  }\n\n  function tagOpenAttributeValueQuoted(code) {\n    if (code === marker) {\n      effects.consume(code)\n      return tagOpenAttributeValueQuotedAfter\n    }\n\n    if (code === null) {\n      return nok(code)\n    }\n\n    if (markdownLineEnding(code)) {\n      returnState = tagOpenAttributeValueQuoted\n      return atLineEnding(code)\n    }\n\n    effects.consume(code)\n    return tagOpenAttributeValueQuoted\n  }\n\n  function tagOpenAttributeValueQuotedAfter(code) {\n    if (code === 62 || code === 47 || markdownLineEndingOrSpace(code)) {\n      return tagOpenBetween(code)\n    }\n\n    return nok(code)\n  }\n\n  function tagOpenAttributeValueUnquoted(code) {\n    if (\n      code === null ||\n      code === 34 ||\n      code === 39 ||\n      code === 60 ||\n      code === 61 ||\n      code === 96\n    ) {\n      return nok(code)\n    }\n\n    if (code === 62 || markdownLineEndingOrSpace(code)) {\n      return tagOpenBetween(code)\n    }\n\n    effects.consume(code)\n    return tagOpenAttributeValueUnquoted\n  } // We can\u2019t have blank lines in content, so no need to worry about empty\n  // tokens.\n\n  function atLineEnding(code) {\n    effects.exit('htmlTextData')\n    effects.enter('lineEnding')\n    effects.consume(code)\n    effects.exit('lineEnding')\n    return factorySpace(\n      effects,\n      afterPrefix,\n      'linePrefix',\n      self.parser.constructs.disable.null.indexOf('codeIndented') > -1\n        ? undefined\n        : 4\n    )\n  }\n\n  function afterPrefix(code) {\n    effects.enter('htmlTextData')\n    return returnState(code)\n  }\n\n  function end(code) {\n    if (code === 62) {\n      effects.consume(code)\n      effects.exit('htmlTextData')\n      effects.exit('htmlText')\n      return ok\n    }\n\n    return nok(code)\n  }\n}\n\nmodule.exports = htmlText\n", "'use strict'\n\nvar markdownLineEndingOrSpace = require('../character/markdown-line-ending-or-space.js')\nvar chunkedPush = require('../util/chunked-push.js')\nvar chunkedSplice = require('../util/chunked-splice.js')\nvar normalizeIdentifier = require('../util/normalize-identifier.js')\nvar resolveAll = require('../util/resolve-all.js')\nvar shallow = require('../util/shallow.js')\nvar factoryDestination = require('./factory-destination.js')\nvar factoryLabel = require('./factory-label.js')\nvar factoryTitle = require('./factory-title.js')\nvar factoryWhitespace = require('./factory-whitespace.js')\n\nvar labelEnd = {\n  name: 'labelEnd',\n  tokenize: tokenizeLabelEnd,\n  resolveTo: resolveToLabelEnd,\n  resolveAll: resolveAllLabelEnd\n}\nvar resourceConstruct = {\n  tokenize: tokenizeResource\n}\nvar fullReferenceConstruct = {\n  tokenize: tokenizeFullReference\n}\nvar collapsedReferenceConstruct = {\n  tokenize: tokenizeCollapsedReference\n}\n\nfunction resolveAllLabelEnd(events) {\n  var index = -1\n  var token\n\n  while (++index < events.length) {\n    token = events[index][1]\n\n    if (\n      !token._used &&\n      (token.type === 'labelImage' ||\n        token.type === 'labelLink' ||\n        token.type === 'labelEnd')\n    ) {\n      // Remove the marker.\n      events.splice(index + 1, token.type === 'labelImage' ? 4 : 2)\n      token.type = 'data'\n      index++\n    }\n  }\n\n  return events\n}\n\nfunction resolveToLabelEnd(events, context) {\n  var index = events.length\n  var offset = 0\n  var group\n  var label\n  var text\n  var token\n  var open\n  var close\n  var media // Find an opening.\n\n  while (index--) {\n    token = events[index][1]\n\n    if (open) {\n      // If we see another link, or inactive link label, we\u2019ve been here before.\n      if (\n        token.type === 'link' ||\n        (token.type === 'labelLink' && token._inactive)\n      ) {\n        break\n      } // Mark other link openings as inactive, as we can\u2019t have links in\n      // links.\n\n      if (events[index][0] === 'enter' && token.type === 'labelLink') {\n        token._inactive = true\n      }\n    } else if (close) {\n      if (\n        events[index][0] === 'enter' &&\n        (token.type === 'labelImage' || token.type === 'labelLink') &&\n        !token._balanced\n      ) {\n        open = index\n\n        if (token.type !== 'labelLink') {\n          offset = 2\n          break\n        }\n      }\n    } else if (token.type === 'labelEnd') {\n      close = index\n    }\n  }\n\n  group = {\n    type: events[open][1].type === 'labelLink' ? 'link' : 'image',\n    start: shallow(events[open][1].start),\n    end: shallow(events[events.length - 1][1].end)\n  }\n  label = {\n    type: 'label',\n    start: shallow(events[open][1].start),\n    end: shallow(events[close][1].end)\n  }\n  text = {\n    type: 'labelText',\n    start: shallow(events[open + offset + 2][1].end),\n    end: shallow(events[close - 2][1].start)\n  }\n  media = [\n    ['enter', group, context],\n    ['enter', label, context]\n  ] // Opening marker.\n\n  media = chunkedPush(media, events.slice(open + 1, open + offset + 3)) // Text open.\n\n  media = chunkedPush(media, [['enter', text, context]]) // Between.\n\n  media = chunkedPush(\n    media,\n    resolveAll(\n      context.parser.constructs.insideSpan.null,\n      events.slice(open + offset + 4, close - 3),\n      context\n    )\n  ) // Text close, marker close, label close.\n\n  media = chunkedPush(media, [\n    ['exit', text, context],\n    events[close - 2],\n    events[close - 1],\n    ['exit', label, context]\n  ]) // Reference, resource, or so.\n\n  media = chunkedPush(media, events.slice(close + 1)) // Media close.\n\n  media = chunkedPush(media, [['exit', group, context]])\n  chunkedSplice(events, open, events.length, media)\n  return events\n}\n\nfunction tokenizeLabelEnd(effects, ok, nok) {\n  var self = this\n  var index = self.events.length\n  var labelStart\n  var defined // Find an opening.\n\n  while (index--) {\n    if (\n      (self.events[index][1].type === 'labelImage' ||\n        self.events[index][1].type === 'labelLink') &&\n      !self.events[index][1]._balanced\n    ) {\n      labelStart = self.events[index][1]\n      break\n    }\n  }\n\n  return start\n\n  function start(code) {\n    if (!labelStart) {\n      return nok(code)\n    } // It\u2019s a balanced bracket, but contains a link.\n\n    if (labelStart._inactive) return balanced(code)\n    defined =\n      self.parser.defined.indexOf(\n        normalizeIdentifier(\n          self.sliceSerialize({\n            start: labelStart.end,\n            end: self.now()\n          })\n        )\n      ) > -1\n    effects.enter('labelEnd')\n    effects.enter('labelMarker')\n    effects.consume(code)\n    effects.exit('labelMarker')\n    effects.exit('labelEnd')\n    return afterLabelEnd\n  }\n\n  function afterLabelEnd(code) {\n    // Resource: `[asd](fgh)`.\n    if (code === 40) {\n      return effects.attempt(\n        resourceConstruct,\n        ok,\n        defined ? ok : balanced\n      )(code)\n    } // Collapsed (`[asd][]`) or full (`[asd][fgh]`) reference?\n\n    if (code === 91) {\n      return effects.attempt(\n        fullReferenceConstruct,\n        ok,\n        defined\n          ? effects.attempt(collapsedReferenceConstruct, ok, balanced)\n          : balanced\n      )(code)\n    } // Shortcut reference: `[asd]`?\n\n    return defined ? ok(code) : balanced(code)\n  }\n\n  function balanced(code) {\n    labelStart._balanced = true\n    return nok(code)\n  }\n}\n\nfunction tokenizeResource(effects, ok, nok) {\n  return start\n\n  function start(code) {\n    effects.enter('resource')\n    effects.enter('resourceMarker')\n    effects.consume(code)\n    effects.exit('resourceMarker')\n    return factoryWhitespace(effects, open)\n  }\n\n  function open(code) {\n    if (code === 41) {\n      return end(code)\n    }\n\n    return factoryDestination(\n      effects,\n      destinationAfter,\n      nok,\n      'resourceDestination',\n      'resourceDestinationLiteral',\n      'resourceDestinationLiteralMarker',\n      'resourceDestinationRaw',\n      'resourceDestinationString',\n      3\n    )(code)\n  }\n\n  function destinationAfter(code) {\n    return markdownLineEndingOrSpace(code)\n      ? factoryWhitespace(effects, between)(code)\n      : end(code)\n  }\n\n  function between(code) {\n    if (code === 34 || code === 39 || code === 40) {\n      return factoryTitle(\n        effects,\n        factoryWhitespace(effects, end),\n        nok,\n        'resourceTitle',\n        'resourceTitleMarker',\n        'resourceTitleString'\n      )(code)\n    }\n\n    return end(code)\n  }\n\n  function end(code) {\n    if (code === 41) {\n      effects.enter('resourceMarker')\n      effects.consume(code)\n      effects.exit('resourceMarker')\n      effects.exit('resource')\n      return ok\n    }\n\n    return nok(code)\n  }\n}\n\nfunction tokenizeFullReference(effects, ok, nok) {\n  var self = this\n  return start\n\n  function start(code) {\n    return factoryLabel.call(\n      self,\n      effects,\n      afterLabel,\n      nok,\n      'reference',\n      'referenceMarker',\n      'referenceString'\n    )(code)\n  }\n\n  function afterLabel(code) {\n    return self.parser.defined.indexOf(\n      normalizeIdentifier(\n        self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1)\n      )\n    ) < 0\n      ? nok(code)\n      : ok(code)\n  }\n}\n\nfunction tokenizeCollapsedReference(effects, ok, nok) {\n  return start\n\n  function start(code) {\n    effects.enter('reference')\n    effects.enter('referenceMarker')\n    effects.consume(code)\n    effects.exit('referenceMarker')\n    return open\n  }\n\n  function open(code) {\n    if (code === 93) {\n      effects.enter('referenceMarker')\n      effects.consume(code)\n      effects.exit('referenceMarker')\n      effects.exit('reference')\n      return ok\n    }\n\n    return nok(code)\n  }\n}\n\nmodule.exports = labelEnd\n", "'use strict'\n\nvar labelEnd = require('./label-end.js')\n\nvar labelStartImage = {\n  name: 'labelStartImage',\n  tokenize: tokenizeLabelStartImage,\n  resolveAll: labelEnd.resolveAll\n}\n\nfunction tokenizeLabelStartImage(effects, ok, nok) {\n  var self = this\n  return start\n\n  function start(code) {\n    effects.enter('labelImage')\n    effects.enter('labelImageMarker')\n    effects.consume(code)\n    effects.exit('labelImageMarker')\n    return open\n  }\n\n  function open(code) {\n    if (code === 91) {\n      effects.enter('labelMarker')\n      effects.consume(code)\n      effects.exit('labelMarker')\n      effects.exit('labelImage')\n      return after\n    }\n\n    return nok(code)\n  }\n\n  function after(code) {\n    /* c8 ignore next */\n    return code === 94 &&\n      /* c8 ignore next */\n      '_hiddenFootnoteSupport' in self.parser.constructs\n      ? /* c8 ignore next */\n        nok(code)\n      : ok(code)\n  }\n}\n\nmodule.exports = labelStartImage\n", "'use strict'\n\nvar labelEnd = require('./label-end.js')\n\nvar labelStartLink = {\n  name: 'labelStartLink',\n  tokenize: tokenizeLabelStartLink,\n  resolveAll: labelEnd.resolveAll\n}\n\nfunction tokenizeLabelStartLink(effects, ok, nok) {\n  var self = this\n  return start\n\n  function start(code) {\n    effects.enter('labelLink')\n    effects.enter('labelMarker')\n    effects.consume(code)\n    effects.exit('labelMarker')\n    effects.exit('labelLink')\n    return after\n  }\n\n  function after(code) {\n    /* c8 ignore next */\n    return code === 94 &&\n      /* c8 ignore next */\n      '_hiddenFootnoteSupport' in self.parser.constructs\n      ? /* c8 ignore next */\n        nok(code)\n      : ok(code)\n  }\n}\n\nmodule.exports = labelStartLink\n", "'use strict'\n\nvar factorySpace = require('./factory-space.js')\n\nvar lineEnding = {\n  name: 'lineEnding',\n  tokenize: tokenizeLineEnding\n}\n\nfunction tokenizeLineEnding(effects, ok) {\n  return start\n\n  function start(code) {\n    effects.enter('lineEnding')\n    effects.consume(code)\n    effects.exit('lineEnding')\n    return factorySpace(effects, ok, 'linePrefix')\n  }\n}\n\nmodule.exports = lineEnding\n", "'use strict'\n\nvar markdownLineEnding = require('../character/markdown-line-ending.js')\nvar markdownSpace = require('../character/markdown-space.js')\nvar factorySpace = require('./factory-space.js')\n\nvar thematicBreak = {\n  name: 'thematicBreak',\n  tokenize: tokenizeThematicBreak\n}\n\nfunction tokenizeThematicBreak(effects, ok, nok) {\n  var size = 0\n  var marker\n  return start\n\n  function start(code) {\n    effects.enter('thematicBreak')\n    marker = code\n    return atBreak(code)\n  }\n\n  function atBreak(code) {\n    if (code === marker) {\n      effects.enter('thematicBreakSequence')\n      return sequence(code)\n    }\n\n    if (markdownSpace(code)) {\n      return factorySpace(effects, atBreak, 'whitespace')(code)\n    }\n\n    if (size < 3 || (code !== null && !markdownLineEnding(code))) {\n      return nok(code)\n    }\n\n    effects.exit('thematicBreak')\n    return ok(code)\n  }\n\n  function sequence(code) {\n    if (code === marker) {\n      effects.consume(code)\n      size++\n      return sequence\n    }\n\n    effects.exit('thematicBreakSequence')\n    return atBreak(code)\n  }\n}\n\nmodule.exports = thematicBreak\n", "'use strict'\n\nvar asciiDigit = require('../character/ascii-digit.js')\nvar markdownSpace = require('../character/markdown-space.js')\nvar prefixSize = require('../util/prefix-size.js')\nvar sizeChunks = require('../util/size-chunks.js')\nvar factorySpace = require('./factory-space.js')\nvar partialBlankLine = require('./partial-blank-line.js')\nvar thematicBreak = require('./thematic-break.js')\n\nvar list = {\n  name: 'list',\n  tokenize: tokenizeListStart,\n  continuation: {\n    tokenize: tokenizeListContinuation\n  },\n  exit: tokenizeListEnd\n}\nvar listItemPrefixWhitespaceConstruct = {\n  tokenize: tokenizeListItemPrefixWhitespace,\n  partial: true\n}\nvar indentConstruct = {\n  tokenize: tokenizeIndent,\n  partial: true\n}\n\nfunction tokenizeListStart(effects, ok, nok) {\n  var self = this\n  var initialSize = prefixSize(self.events, 'linePrefix')\n  var size = 0\n  return start\n\n  function start(code) {\n    var kind =\n      self.containerState.type ||\n      (code === 42 || code === 43 || code === 45\n        ? 'listUnordered'\n        : 'listOrdered')\n\n    if (\n      kind === 'listUnordered'\n        ? !self.containerState.marker || code === self.containerState.marker\n        : asciiDigit(code)\n    ) {\n      if (!self.containerState.type) {\n        self.containerState.type = kind\n        effects.enter(kind, {\n          _container: true\n        })\n      }\n\n      if (kind === 'listUnordered') {\n        effects.enter('listItemPrefix')\n        return code === 42 || code === 45\n          ? effects.check(thematicBreak, nok, atMarker)(code)\n          : atMarker(code)\n      }\n\n      if (!self.interrupt || code === 49) {\n        effects.enter('listItemPrefix')\n        effects.enter('listItemValue')\n        return inside(code)\n      }\n    }\n\n    return nok(code)\n  }\n\n  function inside(code) {\n    if (asciiDigit(code) && ++size < 10) {\n      effects.consume(code)\n      return inside\n    }\n\n    if (\n      (!self.interrupt || size < 2) &&\n      (self.containerState.marker\n        ? code === self.containerState.marker\n        : code === 41 || code === 46)\n    ) {\n      effects.exit('listItemValue')\n      return atMarker(code)\n    }\n\n    return nok(code)\n  }\n\n  function atMarker(code) {\n    effects.enter('listItemMarker')\n    effects.consume(code)\n    effects.exit('listItemMarker')\n    self.containerState.marker = self.containerState.marker || code\n    return effects.check(\n      partialBlankLine, // Can\u2019t be empty when interrupting.\n      self.interrupt ? nok : onBlank,\n      effects.attempt(\n        listItemPrefixWhitespaceConstruct,\n        endOfPrefix,\n        otherPrefix\n      )\n    )\n  }\n\n  function onBlank(code) {\n    self.containerState.initialBlankLine = true\n    initialSize++\n    return endOfPrefix(code)\n  }\n\n  function otherPrefix(code) {\n    if (markdownSpace(code)) {\n      effects.enter('listItemPrefixWhitespace')\n      effects.consume(code)\n      effects.exit('listItemPrefixWhitespace')\n      return endOfPrefix\n    }\n\n    return nok(code)\n  }\n\n  function endOfPrefix(code) {\n    self.containerState.size =\n      initialSize + sizeChunks(self.sliceStream(effects.exit('listItemPrefix')))\n    return ok(code)\n  }\n}\n\nfunction tokenizeListContinuation(effects, ok, nok) {\n  var self = this\n  self.containerState._closeFlow = undefined\n  return effects.check(partialBlankLine, onBlank, notBlank)\n\n  function onBlank(code) {\n    self.containerState.furtherBlankLines =\n      self.containerState.furtherBlankLines ||\n      self.containerState.initialBlankLine // We have a blank line.\n    // Still, try to consume at most the items size.\n\n    return factorySpace(\n      effects,\n      ok,\n      'listItemIndent',\n      self.containerState.size + 1\n    )(code)\n  }\n\n  function notBlank(code) {\n    if (self.containerState.furtherBlankLines || !markdownSpace(code)) {\n      self.containerState.furtherBlankLines = self.containerState.initialBlankLine = undefined\n      return notInCurrentItem(code)\n    }\n\n    self.containerState.furtherBlankLines = self.containerState.initialBlankLine = undefined\n    return effects.attempt(indentConstruct, ok, notInCurrentItem)(code)\n  }\n\n  function notInCurrentItem(code) {\n    // While we do continue, we signal that the flow should be closed.\n    self.containerState._closeFlow = true // As we\u2019re closing flow, we\u2019re no longer interrupting.\n\n    self.interrupt = undefined\n    return factorySpace(\n      effects,\n      effects.attempt(list, ok, nok),\n      'linePrefix',\n      self.parser.constructs.disable.null.indexOf('codeIndented') > -1\n        ? undefined\n        : 4\n    )(code)\n  }\n}\n\nfunction tokenizeIndent(effects, ok, nok) {\n  var self = this\n  return factorySpace(\n    effects,\n    afterPrefix,\n    'listItemIndent',\n    self.containerState.size + 1\n  )\n\n  function afterPrefix(code) {\n    return prefixSize(self.events, 'listItemIndent') ===\n      self.containerState.size\n      ? ok(code)\n      : nok(code)\n  }\n}\n\nfunction tokenizeListEnd(effects) {\n  effects.exit(this.containerState.type)\n}\n\nfunction tokenizeListItemPrefixWhitespace(effects, ok, nok) {\n  var self = this\n  return factorySpace(\n    effects,\n    afterPrefix,\n    'listItemPrefixWhitespace',\n    self.parser.constructs.disable.null.indexOf('codeIndented') > -1\n      ? undefined\n      : 4 + 1\n  )\n\n  function afterPrefix(code) {\n    return markdownSpace(code) ||\n      !prefixSize(self.events, 'listItemPrefixWhitespace')\n      ? nok(code)\n      : ok(code)\n  }\n}\n\nmodule.exports = list\n", "'use strict'\n\nvar markdownLineEnding = require('../character/markdown-line-ending.js')\nvar shallow = require('../util/shallow.js')\nvar factorySpace = require('./factory-space.js')\n\nvar setextUnderline = {\n  name: 'setextUnderline',\n  tokenize: tokenizeSetextUnderline,\n  resolveTo: resolveToSetextUnderline\n}\n\nfunction resolveToSetextUnderline(events, context) {\n  var index = events.length\n  var content\n  var text\n  var definition\n  var heading // Find the opening of the content.\n  // It\u2019ll always exist: we don\u2019t tokenize if it isn\u2019t there.\n\n  while (index--) {\n    if (events[index][0] === 'enter') {\n      if (events[index][1].type === 'content') {\n        content = index\n        break\n      }\n\n      if (events[index][1].type === 'paragraph') {\n        text = index\n      }\n    } // Exit\n    else {\n      if (events[index][1].type === 'content') {\n        // Remove the content end (if needed we\u2019ll add it later)\n        events.splice(index, 1)\n      }\n\n      if (!definition && events[index][1].type === 'definition') {\n        definition = index\n      }\n    }\n  }\n\n  heading = {\n    type: 'setextHeading',\n    start: shallow(events[text][1].start),\n    end: shallow(events[events.length - 1][1].end)\n  } // Change the paragraph to setext heading text.\n\n  events[text][1].type = 'setextHeadingText' // If we have definitions in the content, we\u2019ll keep on having content,\n  // but we need move it.\n\n  if (definition) {\n    events.splice(text, 0, ['enter', heading, context])\n    events.splice(definition + 1, 0, ['exit', events[content][1], context])\n    events[content][1].end = shallow(events[definition][1].end)\n  } else {\n    events[content][1] = heading\n  } // Add the heading exit at the end.\n\n  events.push(['exit', heading, context])\n  return events\n}\n\nfunction tokenizeSetextUnderline(effects, ok, nok) {\n  var self = this\n  var index = self.events.length\n  var marker\n  var paragraph // Find an opening.\n\n  while (index--) {\n    // Skip enter/exit of line ending, line prefix, and content.\n    // We can now either have a definition or a paragraph.\n    if (\n      self.events[index][1].type !== 'lineEnding' &&\n      self.events[index][1].type !== 'linePrefix' &&\n      self.events[index][1].type !== 'content'\n    ) {\n      paragraph = self.events[index][1].type === 'paragraph'\n      break\n    }\n  }\n\n  return start\n\n  function start(code) {\n    if (!self.lazy && (self.interrupt || paragraph)) {\n      effects.enter('setextHeadingLine')\n      effects.enter('setextHeadingLineSequence')\n      marker = code\n      return closingSequence(code)\n    }\n\n    return nok(code)\n  }\n\n  function closingSequence(code) {\n    if (code === marker) {\n      effects.consume(code)\n      return closingSequence\n    }\n\n    effects.exit('setextHeadingLineSequence')\n    return factorySpace(effects, closingSequenceEnd, 'lineSuffix')(code)\n  }\n\n  function closingSequenceEnd(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit('setextHeadingLine')\n      return ok(code)\n    }\n\n    return nok(code)\n  }\n}\n\nmodule.exports = setextUnderline\n", "'use strict'\n\nObject.defineProperty(exports, '__esModule', {value: true})\n\nvar text$1 = require('./initialize/text.js')\nvar attention = require('./tokenize/attention.js')\nvar autolink = require('./tokenize/autolink.js')\nvar blockQuote = require('./tokenize/block-quote.js')\nvar characterEscape = require('./tokenize/character-escape.js')\nvar characterReference = require('./tokenize/character-reference.js')\nvar codeFenced = require('./tokenize/code-fenced.js')\nvar codeIndented = require('./tokenize/code-indented.js')\nvar codeText = require('./tokenize/code-text.js')\nvar definition = require('./tokenize/definition.js')\nvar hardBreakEscape = require('./tokenize/hard-break-escape.js')\nvar headingAtx = require('./tokenize/heading-atx.js')\nvar htmlFlow = require('./tokenize/html-flow.js')\nvar htmlText = require('./tokenize/html-text.js')\nvar labelEnd = require('./tokenize/label-end.js')\nvar labelStartImage = require('./tokenize/label-start-image.js')\nvar labelStartLink = require('./tokenize/label-start-link.js')\nvar lineEnding = require('./tokenize/line-ending.js')\nvar list = require('./tokenize/list.js')\nvar setextUnderline = require('./tokenize/setext-underline.js')\nvar thematicBreak = require('./tokenize/thematic-break.js')\n\nvar document = {\n  42: list,\n  // Asterisk\n  43: list,\n  // Plus sign\n  45: list,\n  // Dash\n  48: list,\n  // 0\n  49: list,\n  // 1\n  50: list,\n  // 2\n  51: list,\n  // 3\n  52: list,\n  // 4\n  53: list,\n  // 5\n  54: list,\n  // 6\n  55: list,\n  // 7\n  56: list,\n  // 8\n  57: list,\n  // 9\n  62: blockQuote // Greater than\n}\nvar contentInitial = {\n  91: definition // Left square bracket\n}\nvar flowInitial = {\n  '-2': codeIndented,\n  // Horizontal tab\n  '-1': codeIndented,\n  // Virtual space\n  32: codeIndented // Space\n}\nvar flow = {\n  35: headingAtx,\n  // Number sign\n  42: thematicBreak,\n  // Asterisk\n  45: [setextUnderline, thematicBreak],\n  // Dash\n  60: htmlFlow,\n  // Less than\n  61: setextUnderline,\n  // Equals to\n  95: thematicBreak,\n  // Underscore\n  96: codeFenced,\n  // Grave accent\n  126: codeFenced // Tilde\n}\nvar string = {\n  38: characterReference,\n  // Ampersand\n  92: characterEscape // Backslash\n}\nvar text = {\n  '-5': lineEnding,\n  // Carriage return\n  '-4': lineEnding,\n  // Line feed\n  '-3': lineEnding,\n  // Carriage return + line feed\n  33: labelStartImage,\n  // Exclamation mark\n  38: characterReference,\n  // Ampersand\n  42: attention,\n  // Asterisk\n  60: [autolink, htmlText],\n  // Less than\n  91: labelStartLink,\n  // Left square bracket\n  92: [hardBreakEscape, characterEscape],\n  // Backslash\n  93: labelEnd,\n  // Right square bracket\n  95: attention,\n  // Underscore\n  96: codeText // Grave accent\n}\nvar insideSpan = {\n  null: [attention, text$1.resolver]\n}\nvar disable = {\n  null: []\n}\n\nexports.contentInitial = contentInitial\nexports.disable = disable\nexports.document = document\nexports.flow = flow\nexports.flowInitial = flowInitial\nexports.insideSpan = insideSpan\nexports.string = string\nexports.text = text\n", "'use strict'\n\nvar content = require('./initialize/content.js')\nvar document = require('./initialize/document.js')\nvar flow = require('./initialize/flow.js')\nvar text = require('./initialize/text.js')\nvar combineExtensions = require('./util/combine-extensions.js')\nvar createTokenizer = require('./util/create-tokenizer.js')\nvar miniflat = require('./util/miniflat.js')\nvar constructs = require('./constructs.js')\n\nfunction parse(options) {\n  var settings = options || {}\n  var parser = {\n    defined: [],\n    constructs: combineExtensions(\n      [constructs].concat(miniflat(settings.extensions))\n    ),\n    content: create(content),\n    document: create(document),\n    flow: create(flow),\n    string: create(text.string),\n    text: create(text.text)\n  }\n  return parser\n\n  function create(initializer) {\n    return creator\n\n    function creator(from) {\n      return createTokenizer(parser, initializer, from)\n    }\n  }\n}\n\nmodule.exports = parse\n", "'use strict'\n\nvar search = /[\\0\\t\\n\\r]/g\n\nfunction preprocess() {\n  var start = true\n  var column = 1\n  var buffer = ''\n  var atCarriageReturn\n  return preprocessor\n\n  function preprocessor(value, encoding, end) {\n    var chunks = []\n    var match\n    var next\n    var startPosition\n    var endPosition\n    var code\n    value = buffer + value.toString(encoding)\n    startPosition = 0\n    buffer = ''\n\n    if (start) {\n      if (value.charCodeAt(0) === 65279) {\n        startPosition++\n      }\n\n      start = undefined\n    }\n\n    while (startPosition < value.length) {\n      search.lastIndex = startPosition\n      match = search.exec(value)\n      endPosition = match ? match.index : value.length\n      code = value.charCodeAt(endPosition)\n\n      if (!match) {\n        buffer = value.slice(startPosition)\n        break\n      }\n\n      if (code === 10 && startPosition === endPosition && atCarriageReturn) {\n        chunks.push(-3)\n        atCarriageReturn = undefined\n      } else {\n        if (atCarriageReturn) {\n          chunks.push(-5)\n          atCarriageReturn = undefined\n        }\n\n        if (startPosition < endPosition) {\n          chunks.push(value.slice(startPosition, endPosition))\n          column += endPosition - startPosition\n        }\n\n        if (code === 0) {\n          chunks.push(65533)\n          column++\n        } else if (code === 9) {\n          next = Math.ceil(column / 4) * 4\n          chunks.push(-2)\n\n          while (column++ < next) chunks.push(-1)\n        } else if (code === 10) {\n          chunks.push(-4)\n          column = 1\n        } // Must be carriage return.\n        else {\n          atCarriageReturn = true\n          column = 1\n        }\n      }\n\n      startPosition = endPosition + 1\n    }\n\n    if (end) {\n      if (atCarriageReturn) chunks.push(-5)\n      if (buffer) chunks.push(buffer)\n      chunks.push(null)\n    }\n\n    return chunks\n  }\n}\n\nmodule.exports = preprocess\n", "'use strict'\n\nvar subtokenize = require('./util/subtokenize.js')\n\nfunction postprocess(events) {\n  while (!subtokenize(events)) {\n    // Empty\n  }\n\n  return events\n}\n\nmodule.exports = postprocess\n", "'use strict'\n\nmodule.exports = fromMarkdown\n\n// These three are compiled away in the `dist/`\n\nvar toString = require('mdast-util-to-string')\nvar assign = require('micromark/dist/constant/assign')\nvar own = require('micromark/dist/constant/has-own-property')\nvar normalizeIdentifier = require('micromark/dist/util/normalize-identifier')\nvar safeFromInt = require('micromark/dist/util/safe-from-int')\nvar parser = require('micromark/dist/parse')\nvar preprocessor = require('micromark/dist/preprocess')\nvar postprocess = require('micromark/dist/postprocess')\nvar decode = require('parse-entities/decode-entity')\nvar stringifyPosition = require('unist-util-stringify-position')\n\nfunction fromMarkdown(value, encoding, options) {\n  if (typeof encoding !== 'string') {\n    options = encoding\n    encoding = undefined\n  }\n\n  return compiler(options)(\n    postprocess(\n      parser(options).document().write(preprocessor()(value, encoding, true))\n    )\n  )\n}\n\n// Note this compiler only understand complete buffering, not streaming.\nfunction compiler(options) {\n  var settings = options || {}\n  var config = configure(\n    {\n      transforms: [],\n      canContainEols: [\n        'emphasis',\n        'fragment',\n        'heading',\n        'paragraph',\n        'strong'\n      ],\n\n      enter: {\n        autolink: opener(link),\n        autolinkProtocol: onenterdata,\n        autolinkEmail: onenterdata,\n        atxHeading: opener(heading),\n        blockQuote: opener(blockQuote),\n        characterEscape: onenterdata,\n        characterReference: onenterdata,\n        codeFenced: opener(codeFlow),\n        codeFencedFenceInfo: buffer,\n        codeFencedFenceMeta: buffer,\n        codeIndented: opener(codeFlow, buffer),\n        codeText: opener(codeText, buffer),\n        codeTextData: onenterdata,\n        data: onenterdata,\n        codeFlowValue: onenterdata,\n        definition: opener(definition),\n        definitionDestinationString: buffer,\n        definitionLabelString: buffer,\n        definitionTitleString: buffer,\n        emphasis: opener(emphasis),\n        hardBreakEscape: opener(hardBreak),\n        hardBreakTrailing: opener(hardBreak),\n        htmlFlow: opener(html, buffer),\n        htmlFlowData: onenterdata,\n        htmlText: opener(html, buffer),\n        htmlTextData: onenterdata,\n        image: opener(image),\n        label: buffer,\n        link: opener(link),\n        listItem: opener(listItem),\n        listItemValue: onenterlistitemvalue,\n        listOrdered: opener(list, onenterlistordered),\n        listUnordered: opener(list),\n        paragraph: opener(paragraph),\n        reference: onenterreference,\n        referenceString: buffer,\n        resourceDestinationString: buffer,\n        resourceTitleString: buffer,\n        setextHeading: opener(heading),\n        strong: opener(strong),\n        thematicBreak: opener(thematicBreak)\n      },\n\n      exit: {\n        atxHeading: closer(),\n        atxHeadingSequence: onexitatxheadingsequence,\n        autolink: closer(),\n        autolinkEmail: onexitautolinkemail,\n        autolinkProtocol: onexitautolinkprotocol,\n        blockQuote: closer(),\n        characterEscapeValue: onexitdata,\n        characterReferenceMarkerHexadecimal: onexitcharacterreferencemarker,\n        characterReferenceMarkerNumeric: onexitcharacterreferencemarker,\n        characterReferenceValue: onexitcharacterreferencevalue,\n        codeFenced: closer(onexitcodefenced),\n        codeFencedFence: onexitcodefencedfence,\n        codeFencedFenceInfo: onexitcodefencedfenceinfo,\n        codeFencedFenceMeta: onexitcodefencedfencemeta,\n        codeFlowValue: onexitdata,\n        codeIndented: closer(onexitcodeindented),\n        codeText: closer(onexitcodetext),\n        codeTextData: onexitdata,\n        data: onexitdata,\n        definition: closer(),\n        definitionDestinationString: onexitdefinitiondestinationstring,\n        definitionLabelString: onexitdefinitionlabelstring,\n        definitionTitleString: onexitdefinitiontitlestring,\n        emphasis: closer(),\n        hardBreakEscape: closer(onexithardbreak),\n        hardBreakTrailing: closer(onexithardbreak),\n        htmlFlow: closer(onexithtmlflow),\n        htmlFlowData: onexitdata,\n        htmlText: closer(onexithtmltext),\n        htmlTextData: onexitdata,\n        image: closer(onexitimage),\n        label: onexitlabel,\n        labelText: onexitlabeltext,\n        lineEnding: onexitlineending,\n        link: closer(onexitlink),\n        listItem: closer(),\n        listOrdered: closer(),\n        listUnordered: closer(),\n        paragraph: closer(),\n        referenceString: onexitreferencestring,\n        resourceDestinationString: onexitresourcedestinationstring,\n        resourceTitleString: onexitresourcetitlestring,\n        resource: onexitresource,\n        setextHeading: closer(onexitsetextheading),\n        setextHeadingLineSequence: onexitsetextheadinglinesequence,\n        setextHeadingText: onexitsetextheadingtext,\n        strong: closer(),\n        thematicBreak: closer()\n      }\n    },\n\n    settings.mdastExtensions || []\n  )\n\n  var data = {}\n\n  return compile\n\n  function compile(events) {\n    var tree = {type: 'root', children: []}\n    var stack = [tree]\n    var tokenStack = []\n    var listStack = []\n    var index = -1\n    var handler\n    var listStart\n\n    var context = {\n      stack: stack,\n      tokenStack: tokenStack,\n      config: config,\n      enter: enter,\n      exit: exit,\n      buffer: buffer,\n      resume: resume,\n      setData: setData,\n      getData: getData\n    }\n\n    while (++index < events.length) {\n      // We preprocess lists to add `listItem` tokens, and to infer whether\n      // items the list itself are spread out.\n      if (\n        events[index][1].type === 'listOrdered' ||\n        events[index][1].type === 'listUnordered'\n      ) {\n        if (events[index][0] === 'enter') {\n          listStack.push(index)\n        } else {\n          listStart = listStack.pop(index)\n          index = prepareList(events, listStart, index)\n        }\n      }\n    }\n\n    index = -1\n\n    while (++index < events.length) {\n      handler = config[events[index][0]]\n\n      if (own.call(handler, events[index][1].type)) {\n        handler[events[index][1].type].call(\n          assign({sliceSerialize: events[index][2].sliceSerialize}, context),\n          events[index][1]\n        )\n      }\n    }\n\n    if (tokenStack.length) {\n      throw new Error(\n        'Cannot close document, a token (`' +\n          tokenStack[tokenStack.length - 1].type +\n          '`, ' +\n          stringifyPosition({\n            start: tokenStack[tokenStack.length - 1].start,\n            end: tokenStack[tokenStack.length - 1].end\n          }) +\n          ') is still open'\n      )\n    }\n\n    // Figure out `root` position.\n    tree.position = {\n      start: point(\n        events.length ? events[0][1].start : {line: 1, column: 1, offset: 0}\n      ),\n\n      end: point(\n        events.length\n          ? events[events.length - 2][1].end\n          : {line: 1, column: 1, offset: 0}\n      )\n    }\n\n    index = -1\n    while (++index < config.transforms.length) {\n      tree = config.transforms[index](tree) || tree\n    }\n\n    return tree\n  }\n\n  function prepareList(events, start, length) {\n    var index = start - 1\n    var containerBalance = -1\n    var listSpread = false\n    var listItem\n    var tailIndex\n    var lineIndex\n    var tailEvent\n    var event\n    var firstBlankLineIndex\n    var atMarker\n\n    while (++index <= length) {\n      event = events[index]\n\n      if (\n        event[1].type === 'listUnordered' ||\n        event[1].type === 'listOrdered' ||\n        event[1].type === 'blockQuote'\n      ) {\n        if (event[0] === 'enter') {\n          containerBalance++\n        } else {\n          containerBalance--\n        }\n\n        atMarker = undefined\n      } else if (event[1].type === 'lineEndingBlank') {\n        if (event[0] === 'enter') {\n          if (\n            listItem &&\n            !atMarker &&\n            !containerBalance &&\n            !firstBlankLineIndex\n          ) {\n            firstBlankLineIndex = index\n          }\n\n          atMarker = undefined\n        }\n      } else if (\n        event[1].type === 'linePrefix' ||\n        event[1].type === 'listItemValue' ||\n        event[1].type === 'listItemMarker' ||\n        event[1].type === 'listItemPrefix' ||\n        event[1].type === 'listItemPrefixWhitespace'\n      ) {\n        // Empty.\n      } else {\n        atMarker = undefined\n      }\n\n      if (\n        (!containerBalance &&\n          event[0] === 'enter' &&\n          event[1].type === 'listItemPrefix') ||\n        (containerBalance === -1 &&\n          event[0] === 'exit' &&\n          (event[1].type === 'listUnordered' ||\n            event[1].type === 'listOrdered'))\n      ) {\n        if (listItem) {\n          tailIndex = index\n          lineIndex = undefined\n\n          while (tailIndex--) {\n            tailEvent = events[tailIndex]\n\n            if (\n              tailEvent[1].type === 'lineEnding' ||\n              tailEvent[1].type === 'lineEndingBlank'\n            ) {\n              if (tailEvent[0] === 'exit') continue\n\n              if (lineIndex) {\n                events[lineIndex][1].type = 'lineEndingBlank'\n                listSpread = true\n              }\n\n              tailEvent[1].type = 'lineEnding'\n              lineIndex = tailIndex\n            } else if (\n              tailEvent[1].type === 'linePrefix' ||\n              tailEvent[1].type === 'blockQuotePrefix' ||\n              tailEvent[1].type === 'blockQuotePrefixWhitespace' ||\n              tailEvent[1].type === 'blockQuoteMarker' ||\n              tailEvent[1].type === 'listItemIndent'\n            ) {\n              // Empty\n            } else {\n              break\n            }\n          }\n\n          if (\n            firstBlankLineIndex &&\n            (!lineIndex || firstBlankLineIndex < lineIndex)\n          ) {\n            listItem._spread = true\n          }\n\n          // Fix position.\n          listItem.end = point(\n            lineIndex ? events[lineIndex][1].start : event[1].end\n          )\n\n          events.splice(lineIndex || index, 0, ['exit', listItem, event[2]])\n          index++\n          length++\n        }\n\n        // Create a new list item.\n        if (event[1].type === 'listItemPrefix') {\n          listItem = {\n            type: 'listItem',\n            _spread: false,\n            start: point(event[1].start)\n          }\n\n          events.splice(index, 0, ['enter', listItem, event[2]])\n          index++\n          length++\n          firstBlankLineIndex = undefined\n          atMarker = true\n        }\n      }\n    }\n\n    events[start][1]._spread = listSpread\n    return length\n  }\n\n  function setData(key, value) {\n    data[key] = value\n  }\n\n  function getData(key) {\n    return data[key]\n  }\n\n  function point(d) {\n    return {line: d.line, column: d.column, offset: d.offset}\n  }\n\n  function opener(create, and) {\n    return open\n\n    function open(token) {\n      enter.call(this, create(token), token)\n      if (and) and.call(this, token)\n    }\n  }\n\n  function buffer() {\n    this.stack.push({type: 'fragment', children: []})\n  }\n\n  function enter(node, token) {\n    this.stack[this.stack.length - 1].children.push(node)\n    this.stack.push(node)\n    this.tokenStack.push(token)\n    node.position = {start: point(token.start)}\n    return node\n  }\n\n  function closer(and) {\n    return close\n\n    function close(token) {\n      if (and) and.call(this, token)\n      exit.call(this, token)\n    }\n  }\n\n  function exit(token) {\n    var node = this.stack.pop()\n    var open = this.tokenStack.pop()\n\n    if (!open) {\n      throw new Error(\n        'Cannot close `' +\n          token.type +\n          '` (' +\n          stringifyPosition({start: token.start, end: token.end}) +\n          '): it\u2019s not open'\n      )\n    } else if (open.type !== token.type) {\n      throw new Error(\n        'Cannot close `' +\n          token.type +\n          '` (' +\n          stringifyPosition({start: token.start, end: token.end}) +\n          '): a different token (`' +\n          open.type +\n          '`, ' +\n          stringifyPosition({start: open.start, end: open.end}) +\n          ') is open'\n      )\n    }\n\n    node.position.end = point(token.end)\n    return node\n  }\n\n  function resume() {\n    return toString(this.stack.pop())\n  }\n\n  //\n  // Handlers.\n  //\n\n  function onenterlistordered() {\n    setData('expectingFirstListItemValue', true)\n  }\n\n  function onenterlistitemvalue(token) {\n    if (getData('expectingFirstListItemValue')) {\n      this.stack[this.stack.length - 2].start = parseInt(\n        this.sliceSerialize(token),\n        10\n      )\n\n      setData('expectingFirstListItemValue')\n    }\n  }\n\n  function onexitcodefencedfenceinfo() {\n    var data = this.resume()\n    this.stack[this.stack.length - 1].lang = data\n  }\n\n  function onexitcodefencedfencemeta() {\n    var data = this.resume()\n    this.stack[this.stack.length - 1].meta = data\n  }\n\n  function onexitcodefencedfence() {\n    // Exit if this is the closing fence.\n    if (getData('flowCodeInside')) return\n    this.buffer()\n    setData('flowCodeInside', true)\n  }\n\n  function onexitcodefenced() {\n    var data = this.resume()\n    this.stack[this.stack.length - 1].value = data.replace(\n      /^(\\r?\\n|\\r)|(\\r?\\n|\\r)$/g,\n      ''\n    )\n\n    setData('flowCodeInside')\n  }\n\n  function onexitcodeindented() {\n    var data = this.resume()\n    this.stack[this.stack.length - 1].value = data\n  }\n\n  function onexitdefinitionlabelstring(token) {\n    // Discard label, use the source content instead.\n    var label = this.resume()\n    this.stack[this.stack.length - 1].label = label\n    this.stack[this.stack.length - 1].identifier = normalizeIdentifier(\n      this.sliceSerialize(token)\n    ).toLowerCase()\n  }\n\n  function onexitdefinitiontitlestring() {\n    var data = this.resume()\n    this.stack[this.stack.length - 1].title = data\n  }\n\n  function onexitdefinitiondestinationstring() {\n    var data = this.resume()\n    this.stack[this.stack.length - 1].url = data\n  }\n\n  function onexitatxheadingsequence(token) {\n    if (!this.stack[this.stack.length - 1].depth) {\n      this.stack[this.stack.length - 1].depth = this.sliceSerialize(\n        token\n      ).length\n    }\n  }\n\n  function onexitsetextheadingtext() {\n    setData('setextHeadingSlurpLineEnding', true)\n  }\n\n  function onexitsetextheadinglinesequence(token) {\n    this.stack[this.stack.length - 1].depth =\n      this.sliceSerialize(token).charCodeAt(0) === 61 ? 1 : 2\n  }\n\n  function onexitsetextheading() {\n    setData('setextHeadingSlurpLineEnding')\n  }\n\n  function onenterdata(token) {\n    var siblings = this.stack[this.stack.length - 1].children\n    var tail = siblings[siblings.length - 1]\n\n    if (!tail || tail.type !== 'text') {\n      // Add a new text node.\n      tail = text()\n      tail.position = {start: point(token.start)}\n      this.stack[this.stack.length - 1].children.push(tail)\n    }\n\n    this.stack.push(tail)\n  }\n\n  function onexitdata(token) {\n    var tail = this.stack.pop()\n    tail.value += this.sliceSerialize(token)\n    tail.position.end = point(token.end)\n  }\n\n  function onexitlineending(token) {\n    var context = this.stack[this.stack.length - 1]\n\n    // If we\u2019re at a hard break, include the line ending in there.\n    if (getData('atHardBreak')) {\n      context.children[context.children.length - 1].position.end = point(\n        token.end\n      )\n\n      setData('atHardBreak')\n      return\n    }\n\n    if (\n      !getData('setextHeadingSlurpLineEnding') &&\n      config.canContainEols.indexOf(context.type) > -1\n    ) {\n      onenterdata.call(this, token)\n      onexitdata.call(this, token)\n    }\n  }\n\n  function onexithardbreak() {\n    setData('atHardBreak', true)\n  }\n\n  function onexithtmlflow() {\n    var data = this.resume()\n    this.stack[this.stack.length - 1].value = data\n  }\n\n  function onexithtmltext() {\n    var data = this.resume()\n    this.stack[this.stack.length - 1].value = data\n  }\n\n  function onexitcodetext() {\n    var data = this.resume()\n    this.stack[this.stack.length - 1].value = data\n  }\n\n  function onexitlink() {\n    var context = this.stack[this.stack.length - 1]\n\n    // To do: clean.\n    if (getData('inReference')) {\n      context.type += 'Reference'\n      context.referenceType = getData('referenceType') || 'shortcut'\n      delete context.url\n      delete context.title\n    } else {\n      delete context.identifier\n      delete context.label\n      delete context.referenceType\n    }\n\n    setData('referenceType')\n  }\n\n  function onexitimage() {\n    var context = this.stack[this.stack.length - 1]\n\n    // To do: clean.\n    if (getData('inReference')) {\n      context.type += 'Reference'\n      context.referenceType = getData('referenceType') || 'shortcut'\n      delete context.url\n      delete context.title\n    } else {\n      delete context.identifier\n      delete context.label\n      delete context.referenceType\n    }\n\n    setData('referenceType')\n  }\n\n  function onexitlabeltext(token) {\n    this.stack[this.stack.length - 2].identifier = normalizeIdentifier(\n      this.sliceSerialize(token)\n    ).toLowerCase()\n  }\n\n  function onexitlabel() {\n    var fragment = this.stack[this.stack.length - 1]\n    var value = this.resume()\n\n    this.stack[this.stack.length - 1].label = value\n\n    // Assume a reference.\n    setData('inReference', true)\n\n    if (this.stack[this.stack.length - 1].type === 'link') {\n      this.stack[this.stack.length - 1].children = fragment.children\n    } else {\n      this.stack[this.stack.length - 1].alt = value\n    }\n  }\n\n  function onexitresourcedestinationstring() {\n    var data = this.resume()\n    this.stack[this.stack.length - 1].url = data\n  }\n\n  function onexitresourcetitlestring() {\n    var data = this.resume()\n    this.stack[this.stack.length - 1].title = data\n  }\n\n  function onexitresource() {\n    setData('inReference')\n  }\n\n  function onenterreference() {\n    setData('referenceType', 'collapsed')\n  }\n\n  function onexitreferencestring(token) {\n    var label = this.resume()\n    this.stack[this.stack.length - 1].label = label\n    this.stack[this.stack.length - 1].identifier = normalizeIdentifier(\n      this.sliceSerialize(token)\n    ).toLowerCase()\n    setData('referenceType', 'full')\n  }\n\n  function onexitcharacterreferencemarker(token) {\n    setData('characterReferenceType', token.type)\n  }\n\n  function onexitcharacterreferencevalue(token) {\n    var data = this.sliceSerialize(token)\n    var type = getData('characterReferenceType')\n    var value\n    var tail\n\n    if (type) {\n      value = safeFromInt(\n        data,\n        type === 'characterReferenceMarkerNumeric' ? 10 : 16\n      )\n\n      setData('characterReferenceType')\n    } else {\n      value = decode(data)\n    }\n\n    tail = this.stack.pop()\n    tail.value += value\n    tail.position.end = point(token.end)\n  }\n\n  function onexitautolinkprotocol(token) {\n    onexitdata.call(this, token)\n    this.stack[this.stack.length - 1].url = this.sliceSerialize(token)\n  }\n\n  function onexitautolinkemail(token) {\n    onexitdata.call(this, token)\n    this.stack[this.stack.length - 1].url =\n      'mailto:' + this.sliceSerialize(token)\n  }\n\n  //\n  // Creaters.\n  //\n\n  function blockQuote() {\n    return {type: 'blockquote', children: []}\n  }\n\n  function codeFlow() {\n    return {type: 'code', lang: null, meta: null, value: ''}\n  }\n\n  function codeText() {\n    return {type: 'inlineCode', value: ''}\n  }\n\n  function definition() {\n    return {\n      type: 'definition',\n      identifier: '',\n      label: null,\n      title: null,\n      url: ''\n    }\n  }\n\n  function emphasis() {\n    return {type: 'emphasis', children: []}\n  }\n\n  function heading() {\n    return {type: 'heading', depth: undefined, children: []}\n  }\n\n  function hardBreak() {\n    return {type: 'break'}\n  }\n\n  function html() {\n    return {type: 'html', value: ''}\n  }\n\n  function image() {\n    return {type: 'image', title: null, url: '', alt: null}\n  }\n\n  function link() {\n    return {type: 'link', title: null, url: '', children: []}\n  }\n\n  function list(token) {\n    return {\n      type: 'list',\n      ordered: token.type === 'listOrdered',\n      start: null,\n      spread: token._spread,\n      children: []\n    }\n  }\n\n  function listItem(token) {\n    return {\n      type: 'listItem',\n      spread: token._spread,\n      checked: null,\n      children: []\n    }\n  }\n\n  function paragraph() {\n    return {type: 'paragraph', children: []}\n  }\n\n  function strong() {\n    return {type: 'strong', children: []}\n  }\n\n  function text() {\n    return {type: 'text', value: ''}\n  }\n\n  function thematicBreak() {\n    return {type: 'thematicBreak'}\n  }\n}\n\nfunction configure(config, extensions) {\n  var index = -1\n\n  while (++index < extensions.length) {\n    extension(config, extensions[index])\n  }\n\n  return config\n}\n\nfunction extension(config, extension) {\n  var key\n  var left\n\n  for (key in extension) {\n    left = own.call(config, key) ? config[key] : (config[key] = {})\n\n    if (key === 'canContainEols' || key === 'transforms') {\n      config[key] = [].concat(left, extension[key])\n    } else {\n      Object.assign(left, extension[key])\n    }\n  }\n}\n", "'use strict'\n\nmodule.exports = require('./dist')\n", "'use strict'\n\nmodule.exports = parse\n\nvar fromMarkdown = require('mdast-util-from-markdown')\n\nfunction parse(options) {\n  var self = this\n\n  this.Parser = parse\n\n  function parse(doc) {\n    return fromMarkdown(\n      doc,\n      Object.assign({}, self.data('settings'), options, {\n        // Note: these options are not in the readme.\n        // The goal is for them to be set by plugins on `data` instead of being\n        // passed by users.\n        extensions: self.data('micromarkExtensions') || [],\n        mdastExtensions: self.data('fromMarkdownExtensions') || []\n      })\n    )\n  }\n}\n", "'use strict'\n\n/* Expose. */\nmodule.exports = visitParents\n\n/* Visit. */\nfunction visitParents(tree, type, visitor) {\n  var stack = []\n\n  if (typeof type === 'function') {\n    visitor = type\n    type = null\n  }\n\n  one(tree)\n\n  /* Visit a single node. */\n  function one(node) {\n    var result\n\n    if (!type || node.type === type) {\n      result = visitor(node, stack.concat())\n    }\n\n    if (node.children && result !== false) {\n      return all(node.children, node)\n    }\n\n    return result\n  }\n\n  /* Visit children in `parent`. */\n  function all(children, parent) {\n    var length = children.length\n    var index = -1\n    var child\n\n    stack.push(parent)\n\n    while (++index < length) {\n      child = children[index]\n\n      if (child && one(child) === false) {\n        return false\n      }\n    }\n\n    stack.pop()\n\n    return true\n  }\n}\n", "var visitWithParents = require('unist-util-visit-parents');\n\nfunction addListMetadata() {\n  return function (ast) {\n    visitWithParents(ast, 'list', function (listNode, parents) {\n      var depth = 0, i, n;\n      for (i = 0, n = parents.length; i < n; i++) {\n        if (parents[i].type === 'list') depth += 1;\n      }\n      for (i = 0, n = listNode.children.length; i < n; i++) {\n        var child = listNode.children[i];\n        child.index = i;\n        child.ordered = listNode.ordered;\n      }\n      listNode.depth = depth;\n    });\n    return ast;\n  };\n}\n\nmodule.exports = addListMetadata;\n", "'use strict'\n\nmodule.exports = convert\n\nfunction convert(test) {\n  if (test == null) {\n    return ok\n  }\n\n  if (typeof test === 'string') {\n    return typeFactory(test)\n  }\n\n  if (typeof test === 'object') {\n    return 'length' in test ? anyFactory(test) : allFactory(test)\n  }\n\n  if (typeof test === 'function') {\n    return test\n  }\n\n  throw new Error('Expected function, string, or object as test')\n}\n\n// Utility assert each property in `test` is represented in `node`, and each\n// values are strictly equal.\nfunction allFactory(test) {\n  return all\n\n  function all(node) {\n    var key\n\n    for (key in test) {\n      if (node[key] !== test[key]) return false\n    }\n\n    return true\n  }\n}\n\nfunction anyFactory(tests) {\n  var checks = []\n  var index = -1\n\n  while (++index < tests.length) {\n    checks[index] = convert(tests[index])\n  }\n\n  return any\n\n  function any() {\n    var index = -1\n\n    while (++index < checks.length) {\n      if (checks[index].apply(this, arguments)) {\n        return true\n      }\n    }\n\n    return false\n  }\n}\n\n// Utility to convert a string into a function which checks a given node\u2019s type\n// for said string.\nfunction typeFactory(test) {\n  return type\n\n  function type(node) {\n    return Boolean(node && node.type === test)\n  }\n}\n\n// Utility to return true.\nfunction ok() {\n  return true\n}\n", "module.exports = color\nfunction color(d) {\n  return '\\u001B[33m' + d + '\\u001B[39m'\n}\n", "'use strict'\n\nmodule.exports = visitParents\n\nvar convert = require('unist-util-is/convert')\nvar color = require('./color')\n\nvar CONTINUE = true\nvar SKIP = 'skip'\nvar EXIT = false\n\nvisitParents.CONTINUE = CONTINUE\nvisitParents.SKIP = SKIP\nvisitParents.EXIT = EXIT\n\nfunction visitParents(tree, test, visitor, reverse) {\n  var step\n  var is\n\n  if (typeof test === 'function' && typeof visitor !== 'function') {\n    reverse = visitor\n    visitor = test\n    test = null\n  }\n\n  is = convert(test)\n  step = reverse ? -1 : 1\n\n  factory(tree, null, [])()\n\n  function factory(node, index, parents) {\n    var value = typeof node === 'object' && node !== null ? node : {}\n    var name\n\n    if (typeof value.type === 'string') {\n      name =\n        typeof value.tagName === 'string'\n          ? value.tagName\n          : typeof value.name === 'string'\n          ? value.name\n          : undefined\n\n      visit.displayName =\n        'node (' + color(value.type + (name ? '<' + name + '>' : '')) + ')'\n    }\n\n    return visit\n\n    function visit() {\n      var grandparents = parents.concat(node)\n      var result = []\n      var subresult\n      var offset\n\n      if (!test || is(node, index, parents[parents.length - 1] || null)) {\n        result = toResult(visitor(node, parents))\n\n        if (result[0] === EXIT) {\n          return result\n        }\n      }\n\n      if (node.children && result[0] !== SKIP) {\n        offset = (reverse ? node.children.length : -1) + step\n\n        while (offset > -1 && offset < node.children.length) {\n          subresult = factory(node.children[offset], offset, grandparents)()\n\n          if (subresult[0] === EXIT) {\n            return subresult\n          }\n\n          offset =\n            typeof subresult[1] === 'number' ? subresult[1] : offset + step\n        }\n      }\n\n      return result\n    }\n  }\n}\n\nfunction toResult(value) {\n  if (value !== null && typeof value === 'object' && 'length' in value) {\n    return value\n  }\n\n  if (typeof value === 'number') {\n    return [CONTINUE, value]\n  }\n\n  return [value]\n}\n", "'use strict'\n\nmodule.exports = visit\n\nvar visitParents = require('unist-util-visit-parents')\n\nvar CONTINUE = visitParents.CONTINUE\nvar SKIP = visitParents.SKIP\nvar EXIT = visitParents.EXIT\n\nvisit.CONTINUE = CONTINUE\nvisit.SKIP = SKIP\nvisit.EXIT = EXIT\n\nfunction visit(tree, test, visitor, reverse) {\n  if (typeof test === 'function' && typeof visitor !== 'function') {\n    reverse = visitor\n    visitor = test\n    test = null\n  }\n\n  visitParents(tree, test, overload, reverse)\n\n  function overload(node, parents) {\n    var parent = parents[parents.length - 1]\n    var index = parent ? parent.children.indexOf(node) : null\n    return visitor(node, index, parent)\n  }\n}\n", "\"use strict\";\n\n/**\n * Naive, simple plugin to match inline nodes without attributes\n * This allows say <strong>foo</strong>, but not <strong class=\"very\">foo</strong>\n * For proper HTML support, you'll want a different plugin\n **/\nvar visit = require('unist-util-visit');\n\nvar type = 'virtualHtml';\nvar selfClosingRe = /^<(area|base|br|col|embed|hr|img|input|keygen|link|meta|param|source|track|wbr)\\s*\\/?>$/i;\nvar simpleTagRe = /^<(\\/?)([a-z]+)\\s*>$/;\n\nmodule.exports = function (tree) {\n  var open;\n  var currentParent;\n  visit(tree, 'html', function (node, index, parent) {\n    if (currentParent !== parent) {\n      open = [];\n      currentParent = parent;\n    }\n\n    var selfClosing = getSelfClosing(node);\n\n    if (selfClosing) {\n      parent.children.splice(index, 1, {\n        type: type,\n        tag: selfClosing,\n        position: node.position\n      });\n      return true;\n    }\n\n    var current = getSimpleTag(node, parent);\n\n    if (!current) {\n      return true;\n    }\n\n    var matching = findAndPull(open, current.tag);\n\n    if (matching) {\n      parent.children.splice(index, 0, virtual(current, matching, parent));\n    } else if (!current.opening) {\n      open.push(current);\n    }\n\n    return true;\n  }, true // Iterate in reverse\n  );\n  return tree;\n};\n\nfunction findAndPull(open, matchingTag) {\n  var i = open.length;\n\n  while (i--) {\n    if (open[i].tag === matchingTag) {\n      return open.splice(i, 1)[0];\n    }\n  }\n\n  return false;\n}\n\nfunction getSimpleTag(node, parent) {\n  var match = node.value.match(simpleTagRe);\n  return match ? {\n    tag: match[2],\n    opening: !match[1],\n    node: node\n  } : false;\n}\n\nfunction getSelfClosing(node) {\n  var match = node.value.match(selfClosingRe);\n  return match ? match[1] : false;\n}\n\nfunction virtual(fromNode, toNode, parent) {\n  var fromIndex = parent.children.indexOf(fromNode.node);\n  var toIndex = parent.children.indexOf(toNode.node);\n  var extracted = parent.children.splice(fromIndex, toIndex - fromIndex + 1);\n  var children = extracted.slice(1, -1);\n  return {\n    type: type,\n    children: children,\n    tag: fromNode.tag,\n    position: {\n      start: fromNode.node.position.start,\n      end: toNode.node.position.end,\n      indent: []\n    }\n  };\n}", "\"use strict\";\n\nvar visit = require('unist-util-visit');\n\nvar splice = [].splice;\n\nexports.ofType = function (types, mode) {\n  return ifNotMatch(allow, mode);\n\n  function allow(node, index, parent) {\n    return !types.includes(node.type);\n  }\n};\n\nexports.ifNotMatch = ifNotMatch;\n\nfunction ifNotMatch(allow, mode) {\n  return transform;\n\n  function transform(tree) {\n    visit(tree, filter);\n    return tree;\n  } // eslint-disable-next-line consistent-return\n\n\n  function filter(node, index, parent) {\n    if (parent && !allow(node, index, parent)) {\n      var parameters = [index, 1];\n\n      if (mode === 'unwrap' && node.children) {\n        parameters = parameters.concat(node.children);\n      }\n\n      splice.apply(parent.children, parameters);\n      return index;\n    }\n  }\n}", "/** @license React v16.13.1\n * react-is.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';var b=\"function\"===typeof Symbol&&Symbol.for,c=b?Symbol.for(\"react.element\"):60103,d=b?Symbol.for(\"react.portal\"):60106,e=b?Symbol.for(\"react.fragment\"):60107,f=b?Symbol.for(\"react.strict_mode\"):60108,g=b?Symbol.for(\"react.profiler\"):60114,h=b?Symbol.for(\"react.provider\"):60109,k=b?Symbol.for(\"react.context\"):60110,l=b?Symbol.for(\"react.async_mode\"):60111,m=b?Symbol.for(\"react.concurrent_mode\"):60111,n=b?Symbol.for(\"react.forward_ref\"):60112,p=b?Symbol.for(\"react.suspense\"):60113,q=b?\nSymbol.for(\"react.suspense_list\"):60120,r=b?Symbol.for(\"react.memo\"):60115,t=b?Symbol.for(\"react.lazy\"):60116,v=b?Symbol.for(\"react.block\"):60121,w=b?Symbol.for(\"react.fundamental\"):60117,x=b?Symbol.for(\"react.responder\"):60118,y=b?Symbol.for(\"react.scope\"):60119;\nfunction z(a){if(\"object\"===typeof a&&null!==a){var u=a.$$typeof;switch(u){case c:switch(a=a.type,a){case l:case m:case e:case g:case f:case p:return a;default:switch(a=a&&a.$$typeof,a){case k:case n:case t:case r:case h:return a;default:return u}}case d:return u}}}function A(a){return z(a)===m}exports.AsyncMode=l;exports.ConcurrentMode=m;exports.ContextConsumer=k;exports.ContextProvider=h;exports.Element=c;exports.ForwardRef=n;exports.Fragment=e;exports.Lazy=t;exports.Memo=r;exports.Portal=d;\nexports.Profiler=g;exports.StrictMode=f;exports.Suspense=p;exports.isAsyncMode=function(a){return A(a)||z(a)===l};exports.isConcurrentMode=A;exports.isContextConsumer=function(a){return z(a)===k};exports.isContextProvider=function(a){return z(a)===h};exports.isElement=function(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===c};exports.isForwardRef=function(a){return z(a)===n};exports.isFragment=function(a){return z(a)===e};exports.isLazy=function(a){return z(a)===t};\nexports.isMemo=function(a){return z(a)===r};exports.isPortal=function(a){return z(a)===d};exports.isProfiler=function(a){return z(a)===g};exports.isStrictMode=function(a){return z(a)===f};exports.isSuspense=function(a){return z(a)===p};\nexports.isValidElementType=function(a){return\"string\"===typeof a||\"function\"===typeof a||a===e||a===m||a===g||a===f||a===p||a===q||\"object\"===typeof a&&null!==a&&(a.$$typeof===t||a.$$typeof===r||a.$$typeof===h||a.$$typeof===k||a.$$typeof===n||a.$$typeof===w||a.$$typeof===x||a.$$typeof===y||a.$$typeof===v)};exports.typeOf=z;\n", "/** @license React v16.13.1\n * react-is.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\n\n\nif (process.env.NODE_ENV !== \"production\") {\n  (function() {\n'use strict';\n\n// The Symbol used to tag the ReactElement-like types. If there is no native Symbol\n// nor polyfill, then a plain number is used for performance.\nvar hasSymbol = typeof Symbol === 'function' && Symbol.for;\nvar REACT_ELEMENT_TYPE = hasSymbol ? Symbol.for('react.element') : 0xeac7;\nvar REACT_PORTAL_TYPE = hasSymbol ? Symbol.for('react.portal') : 0xeaca;\nvar REACT_FRAGMENT_TYPE = hasSymbol ? Symbol.for('react.fragment') : 0xeacb;\nvar REACT_STRICT_MODE_TYPE = hasSymbol ? Symbol.for('react.strict_mode') : 0xeacc;\nvar REACT_PROFILER_TYPE = hasSymbol ? Symbol.for('react.profiler') : 0xead2;\nvar REACT_PROVIDER_TYPE = hasSymbol ? Symbol.for('react.provider') : 0xeacd;\nvar REACT_CONTEXT_TYPE = hasSymbol ? Symbol.for('react.context') : 0xeace; // TODO: We don't use AsyncMode or ConcurrentMode anymore. They were temporary\n// (unstable) APIs that have been removed. Can we remove the symbols?\n\nvar REACT_ASYNC_MODE_TYPE = hasSymbol ? Symbol.for('react.async_mode') : 0xeacf;\nvar REACT_CONCURRENT_MODE_TYPE = hasSymbol ? Symbol.for('react.concurrent_mode') : 0xeacf;\nvar REACT_FORWARD_REF_TYPE = hasSymbol ? Symbol.for('react.forward_ref') : 0xead0;\nvar REACT_SUSPENSE_TYPE = hasSymbol ? Symbol.for('react.suspense') : 0xead1;\nvar REACT_SUSPENSE_LIST_TYPE = hasSymbol ? Symbol.for('react.suspense_list') : 0xead8;\nvar REACT_MEMO_TYPE = hasSymbol ? Symbol.for('react.memo') : 0xead3;\nvar REACT_LAZY_TYPE = hasSymbol ? Symbol.for('react.lazy') : 0xead4;\nvar REACT_BLOCK_TYPE = hasSymbol ? Symbol.for('react.block') : 0xead9;\nvar REACT_FUNDAMENTAL_TYPE = hasSymbol ? Symbol.for('react.fundamental') : 0xead5;\nvar REACT_RESPONDER_TYPE = hasSymbol ? Symbol.for('react.responder') : 0xead6;\nvar REACT_SCOPE_TYPE = hasSymbol ? Symbol.for('react.scope') : 0xead7;\n\nfunction isValidElementType(type) {\n  return typeof type === 'string' || typeof type === 'function' || // Note: its typeof might be other than 'symbol' or 'number' if it's a polyfill.\n  type === REACT_FRAGMENT_TYPE || type === REACT_CONCURRENT_MODE_TYPE || type === REACT_PROFILER_TYPE || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || typeof type === 'object' && type !== null && (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || type.$$typeof === REACT_FUNDAMENTAL_TYPE || type.$$typeof === REACT_RESPONDER_TYPE || type.$$typeof === REACT_SCOPE_TYPE || type.$$typeof === REACT_BLOCK_TYPE);\n}\n\nfunction typeOf(object) {\n  if (typeof object === 'object' && object !== null) {\n    var $$typeof = object.$$typeof;\n\n    switch ($$typeof) {\n      case REACT_ELEMENT_TYPE:\n        var type = object.type;\n\n        switch (type) {\n          case REACT_ASYNC_MODE_TYPE:\n          case REACT_CONCURRENT_MODE_TYPE:\n          case REACT_FRAGMENT_TYPE:\n          case REACT_PROFILER_TYPE:\n          case REACT_STRICT_MODE_TYPE:\n          case REACT_SUSPENSE_TYPE:\n            return type;\n\n          default:\n            var $$typeofType = type && type.$$typeof;\n\n            switch ($$typeofType) {\n              case REACT_CONTEXT_TYPE:\n              case REACT_FORWARD_REF_TYPE:\n              case REACT_LAZY_TYPE:\n              case REACT_MEMO_TYPE:\n              case REACT_PROVIDER_TYPE:\n                return $$typeofType;\n\n              default:\n                return $$typeof;\n            }\n\n        }\n\n      case REACT_PORTAL_TYPE:\n        return $$typeof;\n    }\n  }\n\n  return undefined;\n} // AsyncMode is deprecated along with isAsyncMode\n\nvar AsyncMode = REACT_ASYNC_MODE_TYPE;\nvar ConcurrentMode = REACT_CONCURRENT_MODE_TYPE;\nvar ContextConsumer = REACT_CONTEXT_TYPE;\nvar ContextProvider = REACT_PROVIDER_TYPE;\nvar Element = REACT_ELEMENT_TYPE;\nvar ForwardRef = REACT_FORWARD_REF_TYPE;\nvar Fragment = REACT_FRAGMENT_TYPE;\nvar Lazy = REACT_LAZY_TYPE;\nvar Memo = REACT_MEMO_TYPE;\nvar Portal = REACT_PORTAL_TYPE;\nvar Profiler = REACT_PROFILER_TYPE;\nvar StrictMode = REACT_STRICT_MODE_TYPE;\nvar Suspense = REACT_SUSPENSE_TYPE;\nvar hasWarnedAboutDeprecatedIsAsyncMode = false; // AsyncMode should be deprecated\n\nfunction isAsyncMode(object) {\n  {\n    if (!hasWarnedAboutDeprecatedIsAsyncMode) {\n      hasWarnedAboutDeprecatedIsAsyncMode = true; // Using console['warn'] to evade Babel and ESLint\n\n      console['warn']('The ReactIs.isAsyncMode() alias has been deprecated, ' + 'and will be removed in React 17+. Update your code to use ' + 'ReactIs.isConcurrentMode() instead. It has the exact same API.');\n    }\n  }\n\n  return isConcurrentMode(object) || typeOf(object) === REACT_ASYNC_MODE_TYPE;\n}\nfunction isConcurrentMode(object) {\n  return typeOf(object) === REACT_CONCURRENT_MODE_TYPE;\n}\nfunction isContextConsumer(object) {\n  return typeOf(object) === REACT_CONTEXT_TYPE;\n}\nfunction isContextProvider(object) {\n  return typeOf(object) === REACT_PROVIDER_TYPE;\n}\nfunction isElement(object) {\n  return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\n}\nfunction isForwardRef(object) {\n  return typeOf(object) === REACT_FORWARD_REF_TYPE;\n}\nfunction isFragment(object) {\n  return typeOf(object) === REACT_FRAGMENT_TYPE;\n}\nfunction isLazy(object) {\n  return typeOf(object) === REACT_LAZY_TYPE;\n}\nfunction isMemo(object) {\n  return typeOf(object) === REACT_MEMO_TYPE;\n}\nfunction isPortal(object) {\n  return typeOf(object) === REACT_PORTAL_TYPE;\n}\nfunction isProfiler(object) {\n  return typeOf(object) === REACT_PROFILER_TYPE;\n}\nfunction isStrictMode(object) {\n  return typeOf(object) === REACT_STRICT_MODE_TYPE;\n}\nfunction isSuspense(object) {\n  return typeOf(object) === REACT_SUSPENSE_TYPE;\n}\n\nexports.AsyncMode = AsyncMode;\nexports.ConcurrentMode = ConcurrentMode;\nexports.ContextConsumer = ContextConsumer;\nexports.ContextProvider = ContextProvider;\nexports.Element = Element;\nexports.ForwardRef = ForwardRef;\nexports.Fragment = Fragment;\nexports.Lazy = Lazy;\nexports.Memo = Memo;\nexports.Portal = Portal;\nexports.Profiler = Profiler;\nexports.StrictMode = StrictMode;\nexports.Suspense = Suspense;\nexports.isAsyncMode = isAsyncMode;\nexports.isConcurrentMode = isConcurrentMode;\nexports.isContextConsumer = isContextConsumer;\nexports.isContextProvider = isContextProvider;\nexports.isElement = isElement;\nexports.isForwardRef = isForwardRef;\nexports.isFragment = isFragment;\nexports.isLazy = isLazy;\nexports.isMemo = isMemo;\nexports.isPortal = isPortal;\nexports.isProfiler = isProfiler;\nexports.isStrictMode = isStrictMode;\nexports.isSuspense = isSuspense;\nexports.isValidElementType = isValidElementType;\nexports.typeOf = typeOf;\n  })();\n}\n", "'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/react-is.production.min.js');\n} else {\n  module.exports = require('./cjs/react-is.development.js');\n}\n", "'use strict';\n\nvar React = require('react');\n\nvar xtend = require('xtend');\n\nvar ReactIs = require('react-is');\n\nfunction astToReact(node, options) {\n  var parent = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n  var index = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n  var renderer = options.renderers[node.type]; // Nodes created by plugins do not have positional info, in which case we set\n  // an object that matches the positon interface.\n\n  if (!node.position) {\n    node.position = {\n      start: {\n        line: null,\n        column: null,\n        offset: null\n      },\n      end: {\n        line: null,\n        column: null,\n        offset: null\n      }\n    };\n  }\n\n  var pos = node.position.start;\n  var key = [node.type, pos.line, pos.column, index].join('-');\n\n  if (!ReactIs.isValidElementType(renderer)) {\n    throw new Error(\"Renderer for type `\".concat(node.type, \"` not defined or is not renderable\"));\n  }\n\n  var nodeProps = getNodeProps(node, key, options, renderer, parent, index);\n  return React.createElement(renderer, nodeProps, nodeProps.children || resolveChildren() || undefined);\n\n  function resolveChildren() {\n    return node.children && node.children.map(function (childNode, i) {\n      return astToReact(childNode, options, {\n        node: node,\n        props: nodeProps\n      }, i);\n    });\n  }\n} // eslint-disable-next-line max-params, complexity\n\n\nfunction getNodeProps(node, key, opts, renderer, parent, index) {\n  var props = {\n    key: key\n  };\n  var isSimpleRenderer = typeof renderer === 'string' || renderer === React.Fragment; // `sourcePos` is true if the user wants source information (line/column info from markdown source)\n\n  if (opts.sourcePos && node.position) {\n    props['data-sourcepos'] = flattenPosition(node.position);\n  }\n\n  if (opts.rawSourcePos && !isSimpleRenderer) {\n    props.sourcePosition = node.position;\n  } // If `includeNodeIndex` is true, pass node index info to all non-tag renderers\n\n\n  if (opts.includeNodeIndex && parent.node && parent.node.children && !isSimpleRenderer) {\n    props.index = parent.node.children.indexOf(node);\n    props.parentChildCount = parent.node.children.length;\n  }\n\n  var ref = node.identifier !== null && node.identifier !== undefined ?\n  /* istanbul ignore next - plugins could inject an undefined reference. */\n  opts.definitions[node.identifier.toUpperCase()] || {} : null;\n\n  switch (node.type) {\n    case 'root':\n      assignDefined(props, {\n        className: opts.className\n      });\n      break;\n\n    case 'text':\n      props.nodeKey = key;\n      props.children = node.value;\n      break;\n\n    case 'heading':\n      props.level = node.depth;\n      break;\n\n    case 'list':\n      props.start = node.start;\n      props.ordered = node.ordered;\n      props.spread = node.spread;\n      props.depth = node.depth;\n      break;\n\n    case 'listItem':\n      props.checked = node.checked;\n      props.spread = node.spread;\n      props.ordered = node.ordered;\n      props.index = node.index;\n      props.children = getListItemChildren(node, parent).map(function (childNode, i) {\n        return astToReact(childNode, opts, {\n          node: node,\n          props: props\n        }, i);\n      });\n      break;\n\n    case 'definition':\n      assignDefined(props, {\n        identifier: node.identifier,\n        title: node.title,\n        url: node.url\n      });\n      break;\n\n    case 'code':\n      assignDefined(props, {\n        language: node.lang && node.lang.split(/\\s/, 1)[0]\n      });\n      break;\n\n    case 'inlineCode':\n      props.children = node.value;\n      props.inline = true;\n      break;\n\n    case 'link':\n      assignDefined(props, {\n        title: node.title || undefined,\n        target: typeof opts.linkTarget === 'function' ? opts.linkTarget(node.url, node.children, node.title) : opts.linkTarget,\n        href: opts.transformLinkUri ? opts.transformLinkUri(node.url, node.children, node.title) : node.url\n      });\n      break;\n\n    case 'image':\n      assignDefined(props, {\n        src: opts.transformImageUri ? opts.transformImageUri(node.url, node.children, node.title, node.alt) : node.url,\n        alt: node.alt || '',\n        title: node.title || undefined\n      });\n      break;\n\n    case 'linkReference':\n      assignDefined(props, xtend(ref, {\n        href: opts.transformLinkUri ? opts.transformLinkUri(ref.href) : ref.href\n      }));\n      break;\n\n    case 'imageReference':\n      assignDefined(props, {\n        src: opts.transformImageUri && ref.href ? opts.transformImageUri(ref.href, node.children, ref.title, node.alt) : ref.href,\n        alt: node.alt || '',\n        title: ref.title || undefined\n      });\n      break;\n\n    case 'table':\n    case 'tableHead':\n    case 'tableBody':\n      props.columnAlignment = node.align;\n      break;\n\n    case 'tableRow':\n      props.isHeader = parent.node.type === 'tableHead';\n      props.columnAlignment = parent.props.columnAlignment;\n      break;\n\n    case 'tableCell':\n      assignDefined(props, {\n        isHeader: parent.props.isHeader,\n        align: parent.props.columnAlignment[index]\n      });\n      break;\n\n    case 'virtualHtml':\n      props.tag = node.tag;\n      break;\n\n    case 'html':\n      // @todo find a better way than this\n      props.isBlock = node.position.start.line !== node.position.end.line;\n      props.allowDangerousHtml = opts.allowDangerousHtml;\n      props.escapeHtml = opts.escapeHtml;\n      props.skipHtml = opts.skipHtml;\n      break;\n\n    case 'parsedHtml':\n      {\n        var parsedChildren;\n\n        if (node.children) {\n          parsedChildren = node.children.map(function (child, i) {\n            return astToReact(child, opts, {\n              node: node,\n              props: props\n            }, i);\n          });\n        }\n\n        props.allowDangerousHtml = opts.allowDangerousHtml;\n        props.escapeHtml = opts.escapeHtml;\n        props.skipHtml = opts.skipHtml;\n        props.element = node.element ? mergeNodeChildren(node, parsedChildren) : null;\n        break;\n      }\n\n    default:\n      assignDefined(props, xtend(node, {\n        type: undefined,\n        position: undefined,\n        children: undefined\n      }));\n  }\n\n  if (!isSimpleRenderer && node.value) {\n    props.value = node.value;\n  }\n\n  if (!isSimpleRenderer) {\n    props.node = node;\n  }\n\n  return props;\n}\n\nfunction assignDefined(target, attrs) {\n  for (var key in attrs) {\n    if (typeof attrs[key] !== 'undefined') {\n      target[key] = attrs[key];\n    }\n  }\n}\n\nfunction mergeNodeChildren(node, parsedChildren) {\n  var el = node.element;\n\n  if (Array.isArray(el)) {\n    /* istanbul ignore next - `div` fallback for old React. */\n    var Fragment = React.Fragment || 'div';\n    return React.createElement(Fragment, null, el);\n  }\n\n  if (el.props.children || parsedChildren) {\n    var children = React.Children.toArray(el.props.children).concat(parsedChildren);\n    return React.cloneElement(el, null, children);\n  }\n\n  return React.cloneElement(el, null);\n}\n\nfunction flattenPosition(pos) {\n  return [pos.start.line, ':', pos.start.column, '-', pos.end.line, ':', pos.end.column].map(String).join('');\n}\n\nfunction getListItemChildren(node, parent) {\n  /* istanbul ignore next - list items are always in a list, but best to be sure. */\n  var loose = parent && parent.node ? listLoose(parent.node) : listItemLoose(node);\n  return loose ? node.children : unwrapParagraphs(node);\n}\n\nfunction unwrapParagraphs(node) {\n  return node.children.reduce(function (array, child) {\n    return array.concat(child.type === 'paragraph' ? child.children : [child]);\n  }, []);\n}\n\nfunction listLoose(node) {\n  var children = node.children;\n  var loose = node.spread;\n  var index = -1;\n\n  while (!loose && ++index < children.length) {\n    loose = listItemLoose(children[index]);\n  }\n\n  return loose;\n}\n\nfunction listItemLoose(node) {\n  var spread = node.spread;\n  /* istanbul ignore next - spread is present from remark-parse, but maybe plugins don\u2019t set it. */\n\n  return spread === undefined || spread === null ? node.children.length > 1 : spread;\n}\n\nmodule.exports = astToReact;", "'use strict';\n\nvar visit = require('unist-util-visit');\n\nmodule.exports = function (node) {\n  visit(node, 'table', wrap);\n  return node;\n};\n\nfunction wrap(table) {\n  var children = table.children;\n  table.children = [{\n    type: 'tableHead',\n    align: table.align,\n    children: [children[0]],\n    position: children[0].position\n  }];\n\n  if (children.length > 1) {\n    table.children.push({\n      type: 'tableBody',\n      align: table.align,\n      children: children.slice(1),\n      position: {\n        start: children[1].position.start,\n        end: children[children.length - 1].position.end\n      }\n    });\n  }\n}", "'use strict';\n\nvar visit = require('unist-util-visit');\n\nmodule.exports = function getDefinitions(tree) {\n  var definitions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  visit(tree, 'definition', function (node) {\n    var identifier = node.identifier.toUpperCase();\n    if (identifier in definitions) return;\n    definitions[identifier] = {\n      href: node.url,\n      title: node.title\n    };\n  });\n  return definitions;\n};", "\"use strict\";\n\nvar protocols = ['http', 'https', 'mailto', 'tel'];\n\nmodule.exports = function uriTransformer(uri) {\n  var url = (uri || '').trim();\n  var first = url.charAt(0);\n\n  if (first === '#' || first === '/') {\n    return url;\n  }\n\n  var colon = url.indexOf(':');\n\n  if (colon === -1) {\n    return url;\n  }\n\n  var length = protocols.length;\n  var index = -1;\n\n  while (++index < length) {\n    var protocol = protocols[index];\n\n    if (colon === protocol.length && url.slice(0, protocol.length).toLowerCase() === protocol) {\n      return url;\n    }\n  }\n\n  index = url.indexOf('?');\n\n  if (index !== -1 && colon > index) {\n    return url;\n  }\n\n  index = url.indexOf('#');\n\n  if (index !== -1 && colon > index) {\n    return url;\n  } // eslint-disable-next-line no-script-url\n\n\n  return 'javascript:void(0)';\n};", "/* eslint-disable react/prop-types, react/no-multi-comp */\n'use strict';\n\nvar xtend = require('xtend');\n\nvar React = require('react');\n/* istanbul ignore next - Don\u2019t crash on old React. */\n\n\nvar supportsStringRender = parseInt((React.version || '16').slice(0, 2), 10) >= 16;\nvar createElement = React.createElement;\nmodule.exports = {\n  break: 'br',\n  paragraph: 'p',\n  emphasis: 'em',\n  strong: 'strong',\n  thematicBreak: 'hr',\n  blockquote: 'blockquote',\n  delete: 'del',\n  link: 'a',\n  image: 'img',\n  linkReference: 'a',\n  imageReference: 'img',\n  table: SimpleRenderer.bind(null, 'table'),\n  tableHead: SimpleRenderer.bind(null, 'thead'),\n  tableBody: SimpleRenderer.bind(null, 'tbody'),\n  tableRow: SimpleRenderer.bind(null, 'tr'),\n  tableCell: TableCell,\n  root: Root,\n  text: TextRenderer,\n  list: List,\n  listItem: ListItem,\n  definition: NullRenderer,\n  heading: Heading,\n  inlineCode: InlineCode,\n  code: CodeBlock,\n  html: Html,\n  virtualHtml: VirtualHtml,\n  parsedHtml: ParsedHtml\n};\n\nfunction TextRenderer(props) {\n  /* istanbul ignore next - a text node w/o a value could be injected by plugins */\n  var children = props.children || '';\n  /* istanbul ignore next - `span` is a fallback for old React. */\n\n  return supportsStringRender ? children : createElement('span', null, children);\n}\n\nfunction Root(props) {\n  var className = props.className;\n  var root = !className && React.Fragment || 'div';\n  return createElement(root, className ? {\n    className: className\n  } : null, props.children);\n}\n\nfunction SimpleRenderer(tag, props) {\n  return createElement(tag, getCoreProps(props), props.children);\n}\n\nfunction TableCell(props) {\n  var style = props.align ? {\n    textAlign: props.align\n  } : undefined;\n  var coreProps = getCoreProps(props);\n  return createElement(props.isHeader ? 'th' : 'td', style ? xtend({\n    style: style\n  }, coreProps) : coreProps, props.children);\n}\n\nfunction Heading(props) {\n  return createElement(\"h\".concat(props.level), getCoreProps(props), props.children);\n}\n\nfunction List(props) {\n  var attrs = getCoreProps(props);\n\n  if (props.start !== null && props.start !== 1 && props.start !== undefined) {\n    attrs.start = props.start.toString();\n  }\n\n  return createElement(props.ordered ? 'ol' : 'ul', attrs, props.children);\n}\n\nfunction ListItem(props) {\n  var checkbox = null;\n\n  if (props.checked !== null && props.checked !== undefined) {\n    var checked = props.checked;\n    checkbox = createElement('input', {\n      type: 'checkbox',\n      checked: checked,\n      readOnly: true\n    });\n  }\n\n  return createElement('li', getCoreProps(props), checkbox, props.children);\n}\n\nfunction CodeBlock(props) {\n  var className = props.language && \"language-\".concat(props.language);\n  var code = createElement('code', className ? {\n    className: className\n  } : null, props.value);\n  return createElement('pre', getCoreProps(props), code);\n}\n\nfunction InlineCode(props) {\n  return createElement('code', getCoreProps(props), props.children);\n}\n\nfunction Html(props) {\n  if (props.skipHtml) {\n    return null;\n  }\n\n  var dangerous = props.allowDangerousHtml || props.escapeHtml === false;\n  var tag = props.isBlock ? 'div' : 'span';\n\n  if (!dangerous) {\n    /* istanbul ignore next - `tag` is a fallback for old React. */\n    return createElement(React.Fragment || tag, null, props.value);\n  }\n\n  var nodeProps = {\n    dangerouslySetInnerHTML: {\n      __html: props.value\n    }\n  };\n  return createElement(tag, nodeProps);\n}\n\nfunction ParsedHtml(props) {\n  /* To do: `React.cloneElement` is slow, is it really needed? */\n  return props['data-sourcepos'] ? React.cloneElement(props.element, {\n    'data-sourcepos': props['data-sourcepos']\n  }) : props.element;\n}\n\nfunction VirtualHtml(props) {\n  return createElement(props.tag, getCoreProps(props), props.children);\n}\n\nfunction NullRenderer() {\n  return null;\n}\n\nfunction getCoreProps(props) {\n  var source = props['data-sourcepos'];\n  /* istanbul ignore next - nodes from plugins w/o position */\n\n  return source ? {\n    'data-sourcepos': source\n  } : {};\n}", "\"use strict\";\n\nvar HtmlParser = '__RMD_HTML_PARSER__';\n/* istanbul ignore next - Fallback for `Symbol`. */\n\nexports.HtmlParser = typeof Symbol === 'undefined' ? HtmlParser : Symbol(HtmlParser);", "'use strict';\n\nvar xtend = require('xtend');\n\nvar unified = require('unified');\n\nvar parse = require('remark-parse');\n\nvar PropTypes = require('prop-types');\n\nvar addListMetadata = require('mdast-add-list-metadata');\n\nvar naiveHtml = require('./plugins/naive-html');\n\nvar disallowNode = require('./plugins/disallow-node');\n\nvar astToReact = require('./ast-to-react');\n\nvar wrapTableRows = require('./wrap-table-rows');\n\nvar getDefinitions = require('./get-definitions');\n\nvar uriTransformer = require('./uri-transformer');\n\nvar defaultRenderers = require('./renderers');\n\nvar symbols = require('./symbols');\n\nvar allTypes = Object.keys(defaultRenderers);\n\nvar ReactMarkdown = function ReactMarkdown(props) {\n  // To do in next major: remove `source`.\n  var src = props.source || props.children || '';\n\n  if (props.allowedTypes && props.disallowedTypes) {\n    throw new Error('Only one of `allowedTypes` and `disallowedTypes` should be defined');\n  }\n\n  var renderers = xtend(defaultRenderers, props.renderers);\n  var processor = unified().use(parse).use(props.plugins || []); // eslint-disable-next-line no-sync\n\n  var tree = processor.runSync(processor.parse(src));\n  var renderProps = xtend(props, {\n    renderers: renderers,\n    definitions: getDefinitions(tree)\n  });\n  determineAstToReactTransforms(props).forEach(function (transform) {\n    tree = transform(tree, renderProps);\n  });\n  return tree;\n};\n\nfunction determineAstToReactTransforms(props) {\n  var transforms = [wrapTableRows, addListMetadata()];\n  var disallowedTypes = props.disallowedTypes;\n\n  if (props.allowedTypes) {\n    disallowedTypes = allTypes.filter(function (type) {\n      return type !== 'root' && props.allowedTypes.indexOf(type) === -1;\n    });\n  }\n\n  var removalMethod = props.unwrapDisallowed ? 'unwrap' : 'remove';\n\n  if (disallowedTypes && disallowedTypes.length > 0) {\n    transforms.push(disallowNode.ofType(disallowedTypes, removalMethod));\n  }\n\n  if (props.allowNode) {\n    transforms.push(disallowNode.ifNotMatch(props.allowNode, removalMethod));\n  } // To do in next major: remove `escapeHtml`.\n\n\n  var renderHtml = (props.allowDangerousHtml || props.escapeHtml === false) && !props.skipHtml;\n  var hasHtmlParser = (props.astPlugins || []).some(function (transform) {\n    return transform.identity === symbols.HtmlParser;\n  });\n\n  if (renderHtml && !hasHtmlParser) {\n    transforms.push(naiveHtml);\n  }\n\n  if (props.astPlugins) {\n    transforms = transforms.concat(props.astPlugins);\n  } // Add the final transform to turn everything into React.\n\n\n  transforms.push(astToReact);\n  return transforms;\n}\n\nReactMarkdown.defaultProps = {\n  transformLinkUri: uriTransformer\n};\nReactMarkdown.propTypes = {\n  className: PropTypes.string,\n  source: PropTypes.string,\n  children: PropTypes.string,\n  sourcePos: PropTypes.bool,\n  rawSourcePos: PropTypes.bool,\n  escapeHtml: PropTypes.bool,\n  allowDangerousHtml: PropTypes.bool,\n  skipHtml: PropTypes.bool,\n  allowNode: PropTypes.func,\n  allowedTypes: PropTypes.arrayOf(PropTypes.oneOf(allTypes)),\n  disallowedTypes: PropTypes.arrayOf(PropTypes.oneOf(allTypes)),\n  transformLinkUri: PropTypes.oneOfType([PropTypes.func, PropTypes.bool]),\n  linkTarget: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),\n  transformImageUri: PropTypes.func,\n  astPlugins: PropTypes.arrayOf(PropTypes.func),\n  unwrapDisallowed: PropTypes.bool,\n  renderers: PropTypes.object,\n  plugins: PropTypes.array\n};\nReactMarkdown.types = allTypes;\nReactMarkdown.renderers = defaultRenderers;\nReactMarkdown.uriTransformer = uriTransformer;\nmodule.exports = ReactMarkdown;", "/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\n * Portions Copyright (C) Philipp Kewisch, 2011-2015 */\n\n\n/* istanbul ignore next */\n/* jshint ignore:start */\nif (typeof module === 'object') {\n  // CommonJS, where exports may be different each time.\n  ICAL = module.exports;\n} else if (typeof ICAL !== 'object') {/* istanbul ignore next */\n  /** @ignore */\n  this.ICAL = {};\n}\n/* jshint ignore:end */\n\n\n/**\n * The number of characters before iCalendar line folding should occur\n * @type {Number}\n * @default 75\n */\nICAL.foldLength = 75;\n\n\n/**\n * The character(s) to be used for a newline. The default value is provided by\n * rfc5545.\n * @type {String}\n * @default \"\\r\\n\"\n */\nICAL.newLineChar = '\\r\\n';\n\n\n/**\n * Helper functions used in various places within ical.js\n * @namespace\n */\nICAL.helpers = {\n  /**\n   * Compiles a list of all referenced TZIDs in all subcomponents and\n   * removes any extra VTIMEZONE subcomponents. In addition, if any TZIDs\n   * are referenced by a component, but a VTIMEZONE does not exist,\n   * an attempt will be made to generate a VTIMEZONE using ICAL.TimezoneService.\n   *\n   * @param {ICAL.Component} vcal     The top-level VCALENDAR component.\n   * @return {ICAL.Component}         The ICAL.Component that was passed in.\n   */\n  updateTimezones: function(vcal) {\n    var allsubs, properties, vtimezones, reqTzid, i, tzid;\n\n    if (!vcal || vcal.name !== \"vcalendar\") {\n      //not a top-level vcalendar component\n      return vcal;\n    }\n\n    //Store vtimezone subcomponents in an object reference by tzid.\n    //Store properties from everything else in another array\n    allsubs = vcal.getAllSubcomponents();\n    properties = [];\n    vtimezones = {};\n    for (i = 0; i < allsubs.length; i++) {\n      if (allsubs[i].name === \"vtimezone\") {\n        tzid = allsubs[i].getFirstProperty(\"tzid\").getFirstValue();\n        vtimezones[tzid] = allsubs[i];\n      } else {\n        properties = properties.concat(allsubs[i].getAllProperties());\n      }\n    }\n\n    //create an object with one entry for each required tz\n    reqTzid = {};\n    for (i = 0; i < properties.length; i++) {\n      if ((tzid = properties[i].getParameter(\"tzid\"))) {\n        reqTzid[tzid] = true;\n      }\n    }\n\n    //delete any vtimezones that are not on the reqTzid list.\n    for (i in vtimezones) {\n      if (vtimezones.hasOwnProperty(i) && !reqTzid[i]) {\n        vcal.removeSubcomponent(vtimezones[i]);\n      }\n    }\n\n    //create any missing, but registered timezones\n    for (i in reqTzid) {\n      if (\n        reqTzid.hasOwnProperty(i) &&\n        !vtimezones[i] &&\n        ICAL.TimezoneService.has(i)\n      ) {\n        vcal.addSubcomponent(ICAL.TimezoneService.get(i).component);\n      }\n    }\n\n    return vcal;\n  },\n\n  /**\n   * Checks if the given type is of the number type and also NaN.\n   *\n   * @param {Number} number     The number to check\n   * @return {Boolean}          True, if the number is strictly NaN\n   */\n  isStrictlyNaN: function(number) {\n    return typeof(number) === 'number' && isNaN(number);\n  },\n\n  /**\n   * Parses a string value that is expected to be an integer, when the valid is\n   * not an integer throws a decoration error.\n   *\n   * @param {String} string     Raw string input\n   * @return {Number}           Parsed integer\n   */\n  strictParseInt: function(string) {\n    var result = parseInt(string, 10);\n\n    if (ICAL.helpers.isStrictlyNaN(result)) {\n      throw new Error(\n        'Could not extract integer from \"' + string + '\"'\n      );\n    }\n\n    return result;\n  },\n\n  /**\n   * Creates or returns a class instance of a given type with the initialization\n   * data if the data is not already an instance of the given type.\n   *\n   * @example\n   * var time = new ICAL.Time(...);\n   * var result = ICAL.helpers.formatClassType(time, ICAL.Time);\n   *\n   * (result instanceof ICAL.Time)\n   * // => true\n   *\n   * result = ICAL.helpers.formatClassType({}, ICAL.Time);\n   * (result isntanceof ICAL.Time)\n   * // => true\n   *\n   *\n   * @param {Object} data       object initialization data\n   * @param {Object} type       object type (like ICAL.Time)\n   * @return {?}                An instance of the found type.\n   */\n  formatClassType: function formatClassType(data, type) {\n    if (typeof(data) === 'undefined') {\n      return undefined;\n    }\n\n    if (data instanceof type) {\n      return data;\n    }\n    return new type(data);\n  },\n\n  /**\n   * Identical to indexOf but will only match values when they are not preceded\n   * by a backslash character.\n   *\n   * @param {String} buffer         String to search\n   * @param {String} search         Value to look for\n   * @param {Number} pos            Start position\n   * @return {Number}               The position, or -1 if not found\n   */\n  unescapedIndexOf: function(buffer, search, pos) {\n    while ((pos = buffer.indexOf(search, pos)) !== -1) {\n      if (pos > 0 && buffer[pos - 1] === '\\\\') {\n        pos += 1;\n      } else {\n        return pos;\n      }\n    }\n    return -1;\n  },\n\n  /**\n   * Find the index for insertion using binary search.\n   *\n   * @param {Array} list            The list to search\n   * @param {?} seekVal             The value to insert\n   * @param {function(?,?)} cmpfunc The comparison func, that can\n   *                                  compare two seekVals\n   * @return {Number}               The insert position\n   */\n  binsearchInsert: function(list, seekVal, cmpfunc) {\n    if (!list.length)\n      return 0;\n\n    var low = 0, high = list.length - 1,\n        mid, cmpval;\n\n    while (low <= high) {\n      mid = low + Math.floor((high - low) / 2);\n      cmpval = cmpfunc(seekVal, list[mid]);\n\n      if (cmpval < 0)\n        high = mid - 1;\n      else if (cmpval > 0)\n        low = mid + 1;\n      else\n        break;\n    }\n\n    if (cmpval < 0)\n      return mid; // insertion is displacing, so use mid outright.\n    else if (cmpval > 0)\n      return mid + 1;\n    else\n      return mid;\n  },\n\n  /**\n   * Convenience function for debug output\n   * @private\n   */\n  dumpn: /* istanbul ignore next */ function() {\n    if (!ICAL.debug) {\n      return;\n    }\n\n    if (typeof (console) !== 'undefined' && 'log' in console) {\n      ICAL.helpers.dumpn = function consoleDumpn(input) {\n        console.log(input);\n      };\n    } else {\n      ICAL.helpers.dumpn = function geckoDumpn(input) {\n        dump(input + '\\n');\n      };\n    }\n\n    ICAL.helpers.dumpn(arguments[0]);\n  },\n\n  /**\n   * Clone the passed object or primitive. By default a shallow clone will be\n   * executed.\n   *\n   * @param {*} aSrc            The thing to clone\n   * @param {Boolean=} aDeep    If true, a deep clone will be performed\n   * @return {*}                The copy of the thing\n   */\n  clone: function(aSrc, aDeep) {\n    if (!aSrc || typeof aSrc != \"object\") {\n      return aSrc;\n    } else if (aSrc instanceof Date) {\n      return new Date(aSrc.getTime());\n    } else if (\"clone\" in aSrc) {\n      return aSrc.clone();\n    } else if (Array.isArray(aSrc)) {\n      var arr = [];\n      for (var i = 0; i < aSrc.length; i++) {\n        arr.push(aDeep ? ICAL.helpers.clone(aSrc[i], true) : aSrc[i]);\n      }\n      return arr;\n    } else {\n      var obj = {};\n      for (var name in aSrc) {\n        // uses prototype method to allow use of Object.create(null);\n        /* istanbul ignore else */\n        if (Object.prototype.hasOwnProperty.call(aSrc, name)) {\n          if (aDeep) {\n            obj[name] = ICAL.helpers.clone(aSrc[name], true);\n          } else {\n            obj[name] = aSrc[name];\n          }\n        }\n      }\n      return obj;\n    }\n  },\n\n  /**\n   * Performs iCalendar line folding. A line ending character is inserted and\n   * the next line begins with a whitespace.\n   *\n   * @example\n   * SUMMARY:This line will be fold\n   *  ed right in the middle of a word.\n   *\n   * @param {String} aLine      The line to fold\n   * @return {String}           The folded line\n   */\n  foldline: function foldline(aLine) {\n    var result = \"\";\n    var line = aLine || \"\";\n\n    while (line.length) {\n      result += ICAL.newLineChar + \" \" + line.substr(0, ICAL.foldLength);\n      line = line.substr(ICAL.foldLength);\n    }\n    return result.substr(ICAL.newLineChar.length + 1);\n  },\n\n  /**\n   * Pads the given string or number with zeros so it will have at least two\n   * characters.\n   *\n   * @param {String|Number} data    The string or number to pad\n   * @return {String}               The number padded as a string\n   */\n  pad2: function pad(data) {\n    if (typeof(data) !== 'string') {\n      // handle fractions.\n      if (typeof(data) === 'number') {\n        data = parseInt(data);\n      }\n      data = String(data);\n    }\n\n    var len = data.length;\n\n    switch (len) {\n      case 0:\n        return '00';\n      case 1:\n        return '0' + data;\n      default:\n        return data;\n    }\n  },\n\n  /**\n   * Truncates the given number, correctly handling negative numbers.\n   *\n   * @param {Number} number     The number to truncate\n   * @return {Number}           The truncated number\n   */\n  trunc: function trunc(number) {\n    return (number < 0 ? Math.ceil(number) : Math.floor(number));\n  },\n\n  /**\n   * Poor-man's cross-browser inheritance for JavaScript. Doesn't support all\n   * the features, but enough for our usage.\n   *\n   * @param {Function} base     The base class constructor function.\n   * @param {Function} child    The child class constructor function.\n   * @param {Object} extra      Extends the prototype with extra properties\n   *                              and methods\n   */\n  inherits: function(base, child, extra) {\n    function F() {}\n    F.prototype = base.prototype;\n    child.prototype = new F();\n\n    if (extra) {\n      ICAL.helpers.extend(extra, child.prototype);\n    }\n  },\n\n  /**\n   * Poor-man's cross-browser object extension. Doesn't support all the\n   * features, but enough for our usage. Note that the target's properties are\n   * not overwritten with the source properties.\n   *\n   * @example\n   * var child = ICAL.helpers.extend(parent, {\n   *   \"bar\": 123\n   * });\n   *\n   * @param {Object} source     The object to extend\n   * @param {Object} target     The object to extend with\n   * @return {Object}           Returns the target.\n   */\n  extend: function(source, target) {\n    for (var key in source) {\n      var descr = Object.getOwnPropertyDescriptor(source, key);\n      if (descr && !Object.getOwnPropertyDescriptor(target, key)) {\n        Object.defineProperty(target, key, descr);\n      }\n    }\n    return target;\n  }\n};\n/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\n * Portions Copyright (C) Philipp Kewisch, 2011-2015 */\n\n/** @namespace ICAL */\n\n\n/**\n * This symbol is further described later on\n * @ignore\n */\nICAL.design = (function() {\n  'use strict';\n\n  var FROM_ICAL_NEWLINE = /\\\\\\\\|\\\\;|\\\\,|\\\\[Nn]/g;\n  var TO_ICAL_NEWLINE = /\\\\|;|,|\\n/g;\n  var FROM_VCARD_NEWLINE = /\\\\\\\\|\\\\,|\\\\[Nn]/g;\n  var TO_VCARD_NEWLINE = /\\\\|,|\\n/g;\n\n  function createTextType(fromNewline, toNewline) {\n    var result = {\n      matches: /.*/,\n\n      fromICAL: function(aValue, structuredEscape) {\n        return replaceNewline(aValue, fromNewline, structuredEscape);\n      },\n\n      toICAL: function(aValue, structuredEscape) {\n        var regEx = toNewline;\n        if (structuredEscape)\n          regEx = new RegExp(regEx.source + '|' + structuredEscape);\n        return aValue.replace(regEx, function(str) {\n          switch (str) {\n          case \"\\\\\":\n            return \"\\\\\\\\\";\n          case \";\":\n            return \"\\\\;\";\n          case \",\":\n            return \"\\\\,\";\n          case \"\\n\":\n            return \"\\\\n\";\n          /* istanbul ignore next */\n          default:\n            return str;\n          }\n        });\n      }\n    };\n    return result;\n  }\n\n  // default types used multiple times\n  var DEFAULT_TYPE_TEXT = { defaultType: \"text\" };\n  var DEFAULT_TYPE_TEXT_MULTI = { defaultType: \"text\", multiValue: \",\" };\n  var DEFAULT_TYPE_TEXT_STRUCTURED = { defaultType: \"text\", structuredValue: \";\" };\n  var DEFAULT_TYPE_INTEGER = { defaultType: \"integer\" };\n  var DEFAULT_TYPE_DATETIME_DATE = { defaultType: \"date-time\", allowedTypes: [\"date-time\", \"date\"] };\n  var DEFAULT_TYPE_DATETIME = { defaultType: \"date-time\" };\n  var DEFAULT_TYPE_URI = { defaultType: \"uri\" };\n  var DEFAULT_TYPE_UTCOFFSET = { defaultType: \"utc-offset\" };\n  var DEFAULT_TYPE_RECUR = { defaultType: \"recur\" };\n  var DEFAULT_TYPE_DATE_ANDOR_TIME = { defaultType: \"date-and-or-time\", allowedTypes: [\"date-time\", \"date\", \"text\"] };\n\n  function replaceNewlineReplace(string) {\n    switch (string) {\n      case \"\\\\\\\\\":\n        return \"\\\\\";\n      case \"\\\\;\":\n        return \";\";\n      case \"\\\\,\":\n        return \",\";\n      case \"\\\\n\":\n      case \"\\\\N\":\n        return \"\\n\";\n      /* istanbul ignore next */\n      default:\n        return string;\n    }\n  }\n\n  function replaceNewline(value, newline, structuredEscape) {\n    // avoid regex when possible.\n    if (value.indexOf('\\\\') === -1) {\n      return value;\n    }\n    if (structuredEscape)\n      newline = new RegExp(newline.source + '|\\\\\\\\' + structuredEscape);\n    return value.replace(newline, replaceNewlineReplace);\n  }\n\n  var commonProperties = {\n    \"categories\": DEFAULT_TYPE_TEXT_MULTI,\n    \"url\": DEFAULT_TYPE_URI,\n    \"version\": DEFAULT_TYPE_TEXT,\n    \"uid\": DEFAULT_TYPE_TEXT\n  };\n\n  var commonValues = {\n    \"boolean\": {\n      values: [\"TRUE\", \"FALSE\"],\n\n      fromICAL: function(aValue) {\n        switch (aValue) {\n          case 'TRUE':\n            return true;\n          case 'FALSE':\n            return false;\n          default:\n            //TODO: parser warning\n            return false;\n        }\n      },\n\n      toICAL: function(aValue) {\n        if (aValue) {\n          return 'TRUE';\n        }\n        return 'FALSE';\n      }\n\n    },\n    float: {\n      matches: /^[+-]?\\d+\\.\\d+$/,\n\n      fromICAL: function(aValue) {\n        var parsed = parseFloat(aValue);\n        if (ICAL.helpers.isStrictlyNaN(parsed)) {\n          // TODO: parser warning\n          return 0.0;\n        }\n        return parsed;\n      },\n\n      toICAL: function(aValue) {\n        return String(aValue);\n      }\n    },\n    integer: {\n      fromICAL: function(aValue) {\n        var parsed = parseInt(aValue);\n        if (ICAL.helpers.isStrictlyNaN(parsed)) {\n          return 0;\n        }\n        return parsed;\n      },\n\n      toICAL: function(aValue) {\n        return String(aValue);\n      }\n    },\n    \"utc-offset\": {\n      toICAL: function(aValue) {\n        if (aValue.length < 7) {\n          // no seconds\n          // -0500\n          return aValue.substr(0, 3) +\n                 aValue.substr(4, 2);\n        } else {\n          // seconds\n          // -050000\n          return aValue.substr(0, 3) +\n                 aValue.substr(4, 2) +\n                 aValue.substr(7, 2);\n        }\n      },\n\n      fromICAL: function(aValue) {\n        if (aValue.length < 6) {\n          // no seconds\n          // -05:00\n          return aValue.substr(0, 3) + ':' +\n                 aValue.substr(3, 2);\n        } else {\n          // seconds\n          // -05:00:00\n          return aValue.substr(0, 3) + ':' +\n                 aValue.substr(3, 2) + ':' +\n                 aValue.substr(5, 2);\n        }\n      },\n\n      decorate: function(aValue) {\n        return ICAL.UtcOffset.fromString(aValue);\n      },\n\n      undecorate: function(aValue) {\n        return aValue.toString();\n      }\n    }\n  };\n\n  var icalParams = {\n    // Although the syntax is DQUOTE uri DQUOTE, I don't think we should\n    // enfoce anything aside from it being a valid content line.\n    //\n    // At least some params require - if multi values are used - DQUOTEs\n    // for each of its values - e.g. delegated-from=\"uri1\",\"uri2\"\n    // To indicate this, I introduced the new k/v pair\n    // multiValueSeparateDQuote: true\n    //\n    // \"ALTREP\": { ... },\n\n    // CN just wants a param-value\n    // \"CN\": { ... }\n\n    \"cutype\": {\n      values: [\"INDIVIDUAL\", \"GROUP\", \"RESOURCE\", \"ROOM\", \"UNKNOWN\"],\n      allowXName: true,\n      allowIanaToken: true\n    },\n\n    \"delegated-from\": {\n      valueType: \"cal-address\",\n      multiValue: \",\",\n      multiValueSeparateDQuote: true\n    },\n    \"delegated-to\": {\n      valueType: \"cal-address\",\n      multiValue: \",\",\n      multiValueSeparateDQuote: true\n    },\n    // \"DIR\": { ... }, // See ALTREP\n    \"encoding\": {\n      values: [\"8BIT\", \"BASE64\"]\n    },\n    // \"FMTTYPE\": { ... }, // See ALTREP\n    \"fbtype\": {\n      values: [\"FREE\", \"BUSY\", \"BUSY-UNAVAILABLE\", \"BUSY-TENTATIVE\"],\n      allowXName: true,\n      allowIanaToken: true\n    },\n    // \"LANGUAGE\": { ... }, // See ALTREP\n    \"member\": {\n      valueType: \"cal-address\",\n      multiValue: \",\",\n      multiValueSeparateDQuote: true\n    },\n    \"partstat\": {\n      // TODO These values are actually different per-component\n      values: [\"NEEDS-ACTION\", \"ACCEPTED\", \"DECLINED\", \"TENTATIVE\",\n               \"DELEGATED\", \"COMPLETED\", \"IN-PROCESS\"],\n      allowXName: true,\n      allowIanaToken: true\n    },\n    \"range\": {\n      values: [\"THISLANDFUTURE\"]\n    },\n    \"related\": {\n      values: [\"START\", \"END\"]\n    },\n    \"reltype\": {\n      values: [\"PARENT\", \"CHILD\", \"SIBLING\"],\n      allowXName: true,\n      allowIanaToken: true\n    },\n    \"role\": {\n      values: [\"REQ-PARTICIPANT\", \"CHAIR\",\n               \"OPT-PARTICIPANT\", \"NON-PARTICIPANT\"],\n      allowXName: true,\n      allowIanaToken: true\n    },\n    \"rsvp\": {\n      values: [\"TRUE\", \"FALSE\"]\n    },\n    \"sent-by\": {\n      valueType: \"cal-address\"\n    },\n    \"tzid\": {\n      matches: /^\\//\n    },\n    \"value\": {\n      // since the value here is a 'type' lowercase is used.\n      values: [\"binary\", \"boolean\", \"cal-address\", \"date\", \"date-time\",\n               \"duration\", \"float\", \"integer\", \"period\", \"recur\", \"text\",\n               \"time\", \"uri\", \"utc-offset\"],\n      allowXName: true,\n      allowIanaToken: true\n    }\n  };\n\n  // When adding a value here, be sure to add it to the parameter types!\n  var icalValues = ICAL.helpers.extend(commonValues, {\n    text: createTextType(FROM_ICAL_NEWLINE, TO_ICAL_NEWLINE),\n\n    uri: {\n      // TODO\n      /* ... */\n    },\n\n    \"binary\": {\n      decorate: function(aString) {\n        return ICAL.Binary.fromString(aString);\n      },\n\n      undecorate: function(aBinary) {\n        return aBinary.toString();\n      }\n    },\n    \"cal-address\": {\n      // needs to be an uri\n    },\n    \"date\": {\n      decorate: function(aValue, aProp) {\n        if (design.strict) {\n          return ICAL.Time.fromDateString(aValue, aProp);\n        } else {\n          return ICAL.Time.fromString(aValue, aProp);\n        }\n      },\n\n      /**\n       * undecorates a time object.\n       */\n      undecorate: function(aValue) {\n        return aValue.toString();\n      },\n\n      fromICAL: function(aValue) {\n        // from: 20120901\n        // to: 2012-09-01\n        if (!design.strict && aValue.length >= 15) {\n          // This is probably a date-time, e.g. 20120901T130000Z\n          return icalValues[\"date-time\"].fromICAL(aValue);\n        } else {\n          return aValue.substr(0, 4) + '-' +\n                 aValue.substr(4, 2) + '-' +\n                 aValue.substr(6, 2);\n        }\n      },\n\n      toICAL: function(aValue) {\n        // from: 2012-09-01\n        // to: 20120901\n        var len = aValue.length;\n\n        if (len == 10) {\n          return aValue.substr(0, 4) +\n                 aValue.substr(5, 2) +\n                 aValue.substr(8, 2);\n        } else if (len >= 19) {\n          return icalValues[\"date-time\"].toICAL(aValue);\n        } else {\n          //TODO: serialize warning?\n          return aValue;\n        }\n\n      }\n    },\n    \"date-time\": {\n      fromICAL: function(aValue) {\n        // from: 20120901T130000\n        // to: 2012-09-01T13:00:00\n        if (!design.strict && aValue.length == 8) {\n          // This is probably a date, e.g. 20120901\n          return icalValues.date.fromICAL(aValue);\n        } else {\n          var result = aValue.substr(0, 4) + '-' +\n                       aValue.substr(4, 2) + '-' +\n                       aValue.substr(6, 2) + 'T' +\n                       aValue.substr(9, 2) + ':' +\n                       aValue.substr(11, 2) + ':' +\n                       aValue.substr(13, 2);\n\n          if (aValue[15] && aValue[15] === 'Z') {\n            result += 'Z';\n          }\n\n          return result;\n        }\n      },\n\n      toICAL: function(aValue) {\n        // from: 2012-09-01T13:00:00\n        // to: 20120901T130000\n        var len = aValue.length;\n\n        if (len == 10 && !design.strict) {\n          return icalValues.date.toICAL(aValue);\n        } else if (len >= 19) {\n          var result = aValue.substr(0, 4) +\n                       aValue.substr(5, 2) +\n                       // grab the (DDTHH) segment\n                       aValue.substr(8, 5) +\n                       // MM\n                       aValue.substr(14, 2) +\n                       // SS\n                       aValue.substr(17, 2);\n\n          if (aValue[19] && aValue[19] === 'Z') {\n            result += 'Z';\n          }\n          return result;\n        } else {\n          // TODO: error\n          return aValue;\n        }\n      },\n\n      decorate: function(aValue, aProp) {\n        if (design.strict) {\n          return ICAL.Time.fromDateTimeString(aValue, aProp);\n        } else {\n          return ICAL.Time.fromString(aValue, aProp);\n        }\n      },\n\n      undecorate: function(aValue) {\n        return aValue.toString();\n      }\n    },\n    duration: {\n      decorate: function(aValue) {\n        return ICAL.Duration.fromString(aValue);\n      },\n      undecorate: function(aValue) {\n        return aValue.toString();\n      }\n    },\n    period: {\n\n      fromICAL: function(string) {\n        var parts = string.split('/');\n        parts[0] = icalValues['date-time'].fromICAL(parts[0]);\n\n        if (!ICAL.Duration.isValueString(parts[1])) {\n          parts[1] = icalValues['date-time'].fromICAL(parts[1]);\n        }\n\n        return parts;\n      },\n\n      toICAL: function(parts) {\n        if (!design.strict && parts[0].length == 10) {\n          parts[0] = icalValues.date.toICAL(parts[0]);\n        } else {\n          parts[0] = icalValues['date-time'].toICAL(parts[0]);\n        }\n\n        if (!ICAL.Duration.isValueString(parts[1])) {\n          if (!design.strict && parts[1].length == 10) {\n            parts[1] = icalValues.date.toICAL(parts[1]);\n          } else {\n            parts[1] = icalValues['date-time'].toICAL(parts[1]);\n          }\n        }\n\n        return parts.join(\"/\");\n      },\n\n      decorate: function(aValue, aProp) {\n        return ICAL.Period.fromJSON(aValue, aProp, !design.strict);\n      },\n\n      undecorate: function(aValue) {\n        return aValue.toJSON();\n      }\n    },\n    recur: {\n      fromICAL: function(string) {\n        return ICAL.Recur._stringToData(string, true);\n      },\n\n      toICAL: function(data) {\n        var str = \"\";\n        for (var k in data) {\n          /* istanbul ignore if */\n          if (!Object.prototype.hasOwnProperty.call(data, k)) {\n            continue;\n          }\n          var val = data[k];\n          if (k == \"until\") {\n            if (val.length > 10) {\n              val = icalValues['date-time'].toICAL(val);\n            } else {\n              val = icalValues.date.toICAL(val);\n            }\n          } else if (k == \"wkst\") {\n            if (typeof val === 'number') {\n              val = ICAL.Recur.numericDayToIcalDay(val);\n            }\n          } else if (Array.isArray(val)) {\n            val = val.join(\",\");\n          }\n          str += k.toUpperCase() + \"=\" + val + \";\";\n        }\n        return str.substr(0, str.length - 1);\n      },\n\n      decorate: function decorate(aValue) {\n        return ICAL.Recur.fromData(aValue);\n      },\n\n      undecorate: function(aRecur) {\n        return aRecur.toJSON();\n      }\n    },\n\n    time: {\n      fromICAL: function(aValue) {\n        // from: MMHHSS(Z)?\n        // to: HH:MM:SS(Z)?\n        if (aValue.length < 6) {\n          // TODO: parser exception?\n          return aValue;\n        }\n\n        // HH::MM::SSZ?\n        var result = aValue.substr(0, 2) + ':' +\n                     aValue.substr(2, 2) + ':' +\n                     aValue.substr(4, 2);\n\n        if (aValue[6] === 'Z') {\n          result += 'Z';\n        }\n\n        return result;\n      },\n\n      toICAL: function(aValue) {\n        // from: HH:MM:SS(Z)?\n        // to: MMHHSS(Z)?\n        if (aValue.length < 8) {\n          //TODO: error\n          return aValue;\n        }\n\n        var result = aValue.substr(0, 2) +\n                     aValue.substr(3, 2) +\n                     aValue.substr(6, 2);\n\n        if (aValue[8] === 'Z') {\n          result += 'Z';\n        }\n\n        return result;\n      }\n    }\n  });\n\n  var icalProperties = ICAL.helpers.extend(commonProperties, {\n\n    \"action\": DEFAULT_TYPE_TEXT,\n    \"attach\": { defaultType: \"uri\" },\n    \"attendee\": { defaultType: \"cal-address\" },\n    \"calscale\": DEFAULT_TYPE_TEXT,\n    \"class\": DEFAULT_TYPE_TEXT,\n    \"comment\": DEFAULT_TYPE_TEXT,\n    \"completed\": DEFAULT_TYPE_DATETIME,\n    \"contact\": DEFAULT_TYPE_TEXT,\n    \"created\": DEFAULT_TYPE_DATETIME,\n    \"description\": DEFAULT_TYPE_TEXT,\n    \"dtend\": DEFAULT_TYPE_DATETIME_DATE,\n    \"dtstamp\": DEFAULT_TYPE_DATETIME,\n    \"dtstart\": DEFAULT_TYPE_DATETIME_DATE,\n    \"due\": DEFAULT_TYPE_DATETIME_DATE,\n    \"duration\": { defaultType: \"duration\" },\n    \"exdate\": {\n      defaultType: \"date-time\",\n      allowedTypes: [\"date-time\", \"date\"],\n      multiValue: ','\n    },\n    \"exrule\": DEFAULT_TYPE_RECUR,\n    \"freebusy\": { defaultType: \"period\", multiValue: \",\" },\n    \"geo\": { defaultType: \"float\", structuredValue: \";\" },\n    \"last-modified\": DEFAULT_TYPE_DATETIME,\n    \"location\": DEFAULT_TYPE_TEXT,\n    \"method\": DEFAULT_TYPE_TEXT,\n    \"organizer\": { defaultType: \"cal-address\" },\n    \"percent-complete\": DEFAULT_TYPE_INTEGER,\n    \"priority\": DEFAULT_TYPE_INTEGER,\n    \"prodid\": DEFAULT_TYPE_TEXT,\n    \"related-to\": DEFAULT_TYPE_TEXT,\n    \"repeat\": DEFAULT_TYPE_INTEGER,\n    \"rdate\": {\n      defaultType: \"date-time\",\n      allowedTypes: [\"date-time\", \"date\", \"period\"],\n      multiValue: ',',\n      detectType: function(string) {\n        if (string.indexOf('/') !== -1) {\n          return 'period';\n        }\n        return (string.indexOf('T') === -1) ? 'date' : 'date-time';\n      }\n    },\n    \"recurrence-id\": DEFAULT_TYPE_DATETIME_DATE,\n    \"resources\": DEFAULT_TYPE_TEXT_MULTI,\n    \"request-status\": DEFAULT_TYPE_TEXT_STRUCTURED,\n    \"rrule\": DEFAULT_TYPE_RECUR,\n    \"sequence\": DEFAULT_TYPE_INTEGER,\n    \"status\": DEFAULT_TYPE_TEXT,\n    \"summary\": DEFAULT_TYPE_TEXT,\n    \"transp\": DEFAULT_TYPE_TEXT,\n    \"trigger\": { defaultType: \"duration\", allowedTypes: [\"duration\", \"date-time\"] },\n    \"tzoffsetfrom\": DEFAULT_TYPE_UTCOFFSET,\n    \"tzoffsetto\": DEFAULT_TYPE_UTCOFFSET,\n    \"tzurl\": DEFAULT_TYPE_URI,\n    \"tzid\": DEFAULT_TYPE_TEXT,\n    \"tzname\": DEFAULT_TYPE_TEXT\n  });\n\n  // When adding a value here, be sure to add it to the parameter types!\n  var vcardValues = ICAL.helpers.extend(commonValues, {\n    text: createTextType(FROM_VCARD_NEWLINE, TO_VCARD_NEWLINE),\n    uri: createTextType(FROM_VCARD_NEWLINE, TO_VCARD_NEWLINE),\n\n    date: {\n      decorate: function(aValue) {\n        return ICAL.VCardTime.fromDateAndOrTimeString(aValue, \"date\");\n      },\n      undecorate: function(aValue) {\n        return aValue.toString();\n      },\n      fromICAL: function(aValue) {\n        if (aValue.length == 8) {\n          return icalValues.date.fromICAL(aValue);\n        } else if (aValue[0] == '-' && aValue.length == 6) {\n          return aValue.substr(0, 4) + '-' + aValue.substr(4);\n        } else {\n          return aValue;\n        }\n      },\n      toICAL: function(aValue) {\n        if (aValue.length == 10) {\n          return icalValues.date.toICAL(aValue);\n        } else if (aValue[0] == '-' && aValue.length == 7) {\n          return aValue.substr(0, 4) + aValue.substr(5);\n        } else {\n          return aValue;\n        }\n      }\n    },\n\n    time: {\n      decorate: function(aValue) {\n        return ICAL.VCardTime.fromDateAndOrTimeString(\"T\" + aValue, \"time\");\n      },\n      undecorate: function(aValue) {\n        return aValue.toString();\n      },\n      fromICAL: function(aValue) {\n        var splitzone = vcardValues.time._splitZone(aValue, true);\n        var zone = splitzone[0], value = splitzone[1];\n\n        //console.log(\"SPLIT: \",splitzone);\n\n        if (value.length == 6) {\n          value = value.substr(0, 2) + ':' +\n                  value.substr(2, 2) + ':' +\n                  value.substr(4, 2);\n        } else if (value.length == 4 && value[0] != '-') {\n          value = value.substr(0, 2) + ':' + value.substr(2, 2);\n        } else if (value.length == 5) {\n          value = value.substr(0, 3) + ':' + value.substr(3, 2);\n        }\n\n        if (zone.length == 5 && (zone[0] == '-' || zone[0] == '+')) {\n          zone = zone.substr(0, 3) + ':' + zone.substr(3);\n        }\n\n        return value + zone;\n      },\n\n      toICAL: function(aValue) {\n        var splitzone = vcardValues.time._splitZone(aValue);\n        var zone = splitzone[0], value = splitzone[1];\n\n        if (value.length == 8) {\n          value = value.substr(0, 2) +\n                  value.substr(3, 2) +\n                  value.substr(6, 2);\n        } else if (value.length == 5 && value[0] != '-') {\n          value = value.substr(0, 2) + value.substr(3, 2);\n        } else if (value.length == 6) {\n          value = value.substr(0, 3) + value.substr(4, 2);\n        }\n\n        if (zone.length == 6 && (zone[0] == '-' || zone[0] == '+')) {\n          zone = zone.substr(0, 3) + zone.substr(4);\n        }\n\n        return value + zone;\n      },\n\n      _splitZone: function(aValue, isFromIcal) {\n        var lastChar = aValue.length - 1;\n        var signChar = aValue.length - (isFromIcal ? 5 : 6);\n        var sign = aValue[signChar];\n        var zone, value;\n\n        if (aValue[lastChar] == 'Z') {\n          zone = aValue[lastChar];\n          value = aValue.substr(0, lastChar);\n        } else if (aValue.length > 6 && (sign == '-' || sign == '+')) {\n          zone = aValue.substr(signChar);\n          value = aValue.substr(0, signChar);\n        } else {\n          zone = \"\";\n          value = aValue;\n        }\n\n        return [zone, value];\n      }\n    },\n\n    \"date-time\": {\n      decorate: function(aValue) {\n        return ICAL.VCardTime.fromDateAndOrTimeString(aValue, \"date-time\");\n      },\n\n      undecorate: function(aValue) {\n        return aValue.toString();\n      },\n\n      fromICAL: function(aValue) {\n        return vcardValues['date-and-or-time'].fromICAL(aValue);\n      },\n\n      toICAL: function(aValue) {\n        return vcardValues['date-and-or-time'].toICAL(aValue);\n      }\n    },\n\n    \"date-and-or-time\": {\n      decorate: function(aValue) {\n        return ICAL.VCardTime.fromDateAndOrTimeString(aValue, \"date-and-or-time\");\n      },\n\n      undecorate: function(aValue) {\n        return aValue.toString();\n      },\n\n      fromICAL: function(aValue) {\n        var parts = aValue.split('T');\n        return (parts[0] ? vcardValues.date.fromICAL(parts[0]) : '') +\n               (parts[1] ? 'T' + vcardValues.time.fromICAL(parts[1]) : '');\n      },\n\n      toICAL: function(aValue) {\n        var parts = aValue.split('T');\n        return vcardValues.date.toICAL(parts[0]) +\n               (parts[1] ? 'T' + vcardValues.time.toICAL(parts[1]) : '');\n\n      }\n    },\n    timestamp: icalValues['date-time'],\n    \"language-tag\": {\n      matches: /^[a-zA-Z0-9-]+$/ // Could go with a more strict regex here\n    }\n  });\n\n  var vcardParams = {\n    \"type\": {\n      valueType: \"text\",\n      multiValue: \",\"\n    },\n    \"value\": {\n      // since the value here is a 'type' lowercase is used.\n      values: [\"text\", \"uri\", \"date\", \"time\", \"date-time\", \"date-and-or-time\",\n               \"timestamp\", \"boolean\", \"integer\", \"float\", \"utc-offset\",\n               \"language-tag\"],\n      allowXName: true,\n      allowIanaToken: true\n    }\n  };\n\n  var vcardProperties = ICAL.helpers.extend(commonProperties, {\n    \"adr\": { defaultType: \"text\", structuredValue: \";\", multiValue: \",\" },\n    \"anniversary\": DEFAULT_TYPE_DATE_ANDOR_TIME,\n    \"bday\": DEFAULT_TYPE_DATE_ANDOR_TIME,\n    \"caladruri\": DEFAULT_TYPE_URI,\n    \"caluri\": DEFAULT_TYPE_URI,\n    \"clientpidmap\": DEFAULT_TYPE_TEXT_STRUCTURED,\n    \"email\": DEFAULT_TYPE_TEXT,\n    \"fburl\": DEFAULT_TYPE_URI,\n    \"fn\": DEFAULT_TYPE_TEXT,\n    \"gender\": DEFAULT_TYPE_TEXT_STRUCTURED,\n    \"geo\": DEFAULT_TYPE_URI,\n    \"impp\": DEFAULT_TYPE_URI,\n    \"key\": DEFAULT_TYPE_URI,\n    \"kind\": DEFAULT_TYPE_TEXT,\n    \"lang\": { defaultType: \"language-tag\" },\n    \"logo\": DEFAULT_TYPE_URI,\n    \"member\": DEFAULT_TYPE_URI,\n    \"n\": { defaultType: \"text\", structuredValue: \";\", multiValue: \",\" },\n    \"nickname\": DEFAULT_TYPE_TEXT_MULTI,\n    \"note\": DEFAULT_TYPE_TEXT,\n    \"org\": { defaultType: \"text\", structuredValue: \";\" },\n    \"photo\": DEFAULT_TYPE_URI,\n    \"related\": DEFAULT_TYPE_URI,\n    \"rev\": { defaultType: \"timestamp\" },\n    \"role\": DEFAULT_TYPE_TEXT,\n    \"sound\": DEFAULT_TYPE_URI,\n    \"source\": DEFAULT_TYPE_URI,\n    \"tel\": { defaultType: \"uri\", allowedTypes: [\"uri\", \"text\"] },\n    \"title\": DEFAULT_TYPE_TEXT,\n    \"tz\": { defaultType: \"text\", allowedTypes: [\"text\", \"utc-offset\", \"uri\"] },\n    \"xml\": DEFAULT_TYPE_TEXT\n  });\n\n  var vcard3Values = ICAL.helpers.extend(commonValues, {\n    binary: icalValues.binary,\n    date: vcardValues.date,\n    \"date-time\": vcardValues[\"date-time\"],\n    \"phone-number\": {\n      // TODO\n      /* ... */\n    },\n    uri: icalValues.uri,\n    text: icalValues.text,\n    time: icalValues.time,\n    vcard: icalValues.text,\n    \"utc-offset\": {\n      toICAL: function(aValue) {\n        return aValue.substr(0, 7);\n      },\n\n      fromICAL: function(aValue) {\n        return aValue.substr(0, 7);\n      },\n\n      decorate: function(aValue) {\n        return ICAL.UtcOffset.fromString(aValue);\n      },\n\n      undecorate: function(aValue) {\n        return aValue.toString();\n      }\n    }\n  });\n\n  var vcard3Params = {\n    \"type\": {\n      valueType: \"text\",\n      multiValue: \",\"\n    },\n    \"value\": {\n      // since the value here is a 'type' lowercase is used.\n      values: [\"text\", \"uri\", \"date\", \"date-time\", \"phone-number\", \"time\",\n               \"boolean\", \"integer\", \"float\", \"utc-offset\", \"vcard\", \"binary\"],\n      allowXName: true,\n      allowIanaToken: true\n    }\n  };\n\n  var vcard3Properties = ICAL.helpers.extend(commonProperties, {\n    fn: DEFAULT_TYPE_TEXT,\n    n: { defaultType: \"text\", structuredValue: \";\", multiValue: \",\" },\n    nickname: DEFAULT_TYPE_TEXT_MULTI,\n    photo: { defaultType: \"binary\", allowedTypes: [\"binary\", \"uri\"] },\n    bday: {\n      defaultType: \"date-time\",\n      allowedTypes: [\"date-time\", \"date\"],\n      detectType: function(string) {\n        return (string.indexOf('T') === -1) ? 'date' : 'date-time';\n      }\n    },\n\n    adr: { defaultType: \"text\", structuredValue: \";\", multiValue: \",\" },\n    label: DEFAULT_TYPE_TEXT,\n\n    tel: { defaultType: \"phone-number\" },\n    email: DEFAULT_TYPE_TEXT,\n    mailer: DEFAULT_TYPE_TEXT,\n\n    tz: { defaultType: \"utc-offset\", allowedTypes: [\"utc-offset\", \"text\"] },\n    geo: { defaultType: \"float\", structuredValue: \";\" },\n\n    title: DEFAULT_TYPE_TEXT,\n    role: DEFAULT_TYPE_TEXT,\n    logo: { defaultType: \"binary\", allowedTypes: [\"binary\", \"uri\"] },\n    agent: { defaultType: \"vcard\", allowedTypes: [\"vcard\", \"text\", \"uri\"] },\n    org: DEFAULT_TYPE_TEXT_STRUCTURED,\n\n    note: DEFAULT_TYPE_TEXT_MULTI,\n    prodid: DEFAULT_TYPE_TEXT,\n    rev: {\n      defaultType: \"date-time\",\n      allowedTypes: [\"date-time\", \"date\"],\n      detectType: function(string) {\n        return (string.indexOf('T') === -1) ? 'date' : 'date-time';\n      }\n    },\n    \"sort-string\": DEFAULT_TYPE_TEXT,\n    sound: { defaultType: \"binary\", allowedTypes: [\"binary\", \"uri\"] },\n\n    class: DEFAULT_TYPE_TEXT,\n    key: { defaultType: \"binary\", allowedTypes: [\"binary\", \"text\"] }\n  });\n\n  /**\n   * iCalendar design set\n   * @type {ICAL.design.designSet}\n   */\n  var icalSet = {\n    value: icalValues,\n    param: icalParams,\n    property: icalProperties\n  };\n\n  /**\n   * vCard 4.0 design set\n   * @type {ICAL.design.designSet}\n   */\n  var vcardSet = {\n    value: vcardValues,\n    param: vcardParams,\n    property: vcardProperties\n  };\n\n  /**\n   * vCard 3.0 design set\n   * @type {ICAL.design.designSet}\n   */\n  var vcard3Set = {\n    value: vcard3Values,\n    param: vcard3Params,\n    property: vcard3Properties\n  };\n\n  /**\n   * The design data, used by the parser to determine types for properties and\n   * other metadata needed to produce correct jCard/jCal data.\n   *\n   * @alias ICAL.design\n   * @namespace\n   */\n  var design = {\n    /**\n     * A designSet describes value, parameter and property data. It is used by\n     * ther parser and stringifier in components and properties to determine they\n     * should be represented.\n     *\n     * @typedef {Object} designSet\n     * @memberOf ICAL.design\n     * @property {Object} value       Definitions for value types, keys are type names\n     * @property {Object} param       Definitions for params, keys are param names\n     * @property {Object} property    Defintions for properties, keys are property names\n     */\n\n    /**\n     * Can be set to false to make the parser more lenient.\n     */\n    strict: true,\n\n    /**\n     * The default set for new properties and components if none is specified.\n     * @type {ICAL.design.designSet}\n     */\n    defaultSet: icalSet,\n\n    /**\n     * The default type for unknown properties\n     * @type {String}\n     */\n    defaultType: 'unknown',\n\n    /**\n     * Holds the design set for known top-level components\n     *\n     * @type {Object}\n     * @property {ICAL.design.designSet} vcard       vCard VCARD\n     * @property {ICAL.design.designSet} vevent      iCalendar VEVENT\n     * @property {ICAL.design.designSet} vtodo       iCalendar VTODO\n     * @property {ICAL.design.designSet} vjournal    iCalendar VJOURNAL\n     * @property {ICAL.design.designSet} valarm      iCalendar VALARM\n     * @property {ICAL.design.designSet} vtimezone   iCalendar VTIMEZONE\n     * @property {ICAL.design.designSet} daylight    iCalendar DAYLIGHT\n     * @property {ICAL.design.designSet} standard    iCalendar STANDARD\n     *\n     * @example\n     * var propertyName = 'fn';\n     * var componentDesign = ICAL.design.components.vcard;\n     * var propertyDetails = componentDesign.property[propertyName];\n     * if (propertyDetails.defaultType == 'text') {\n     *   // Yep, sure is...\n     * }\n     */\n    components: {\n      vcard: vcardSet,\n      vcard3: vcard3Set,\n      vevent: icalSet,\n      vtodo: icalSet,\n      vjournal: icalSet,\n      valarm: icalSet,\n      vtimezone: icalSet,\n      daylight: icalSet,\n      standard: icalSet\n    },\n\n\n    /**\n     * The design set for iCalendar (rfc5545/rfc7265) components.\n     * @type {ICAL.design.designSet}\n     */\n    icalendar: icalSet,\n\n    /**\n     * The design set for vCard (rfc6350/rfc7095) components.\n     * @type {ICAL.design.designSet}\n     */\n    vcard: vcardSet,\n\n    /**\n     * The design set for vCard (rfc2425/rfc2426/rfc7095) components.\n     * @type {ICAL.design.designSet}\n     */\n    vcard3: vcard3Set,\n\n    /**\n     * Gets the design set for the given component name.\n     *\n     * @param {String} componentName        The name of the component\n     * @return {ICAL.design.designSet}      The design set for the component\n     */\n    getDesignSet: function(componentName) {\n      var isInDesign = componentName && componentName in design.components;\n      return isInDesign ? design.components[componentName] : design.defaultSet;\n    }\n  };\n\n  return design;\n}());\n/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\n * Portions Copyright (C) Philipp Kewisch, 2011-2015 */\n\n\n/**\n * Contains various functions to convert jCal and jCard data back into\n * iCalendar and vCard.\n * @namespace\n */\nICAL.stringify = (function() {\n  'use strict';\n\n  var LINE_ENDING = '\\r\\n';\n  var DEFAULT_VALUE_TYPE = 'unknown';\n\n  var design = ICAL.design;\n  var helpers = ICAL.helpers;\n\n  /**\n   * Convert a full jCal/jCard array into a iCalendar/vCard string.\n   *\n   * @function ICAL.stringify\n   * @variation function\n   * @param {Array} jCal    The jCal/jCard document\n   * @return {String}       The stringified iCalendar/vCard document\n   */\n  function stringify(jCal) {\n    if (typeof jCal[0] == \"string\") {\n      // This is a single component\n      jCal = [jCal];\n    }\n\n    var i = 0;\n    var len = jCal.length;\n    var result = '';\n\n    for (; i < len; i++) {\n      result += stringify.component(jCal[i]) + LINE_ENDING;\n    }\n\n    return result;\n  }\n\n  /**\n   * Converts an jCal component array into a ICAL string.\n   * Recursive will resolve sub-components.\n   *\n   * Exact component/property order is not saved all\n   * properties will come before subcomponents.\n   *\n   * @function ICAL.stringify.component\n   * @param {Array} component\n   *        jCal/jCard fragment of a component\n   * @param {ICAL.design.designSet} designSet\n   *        The design data to use for this component\n   * @return {String}       The iCalendar/vCard string\n   */\n  stringify.component = function(component, designSet) {\n    var name = component[0].toUpperCase();\n    var result = 'BEGIN:' + name + LINE_ENDING;\n\n    var props = component[1];\n    var propIdx = 0;\n    var propLen = props.length;\n\n    var designSetName = component[0];\n    // rfc6350 requires that in vCard 4.0 the first component is the VERSION\n    // component with as value 4.0, note that 3.0 does not have this requirement.\n    if (designSetName === 'vcard' && component[1].length > 0 &&\n            !(component[1][0][0] === \"version\" && component[1][0][3] === \"4.0\")) {\n      designSetName = \"vcard3\";\n    }\n    designSet = designSet || design.getDesignSet(designSetName);\n\n    for (; propIdx < propLen; propIdx++) {\n      result += stringify.property(props[propIdx], designSet) + LINE_ENDING;\n    }\n\n    // Ignore subcomponents if none exist, e.g. in vCard.\n    var comps = component[2] || [];\n    var compIdx = 0;\n    var compLen = comps.length;\n\n    for (; compIdx < compLen; compIdx++) {\n      result += stringify.component(comps[compIdx], designSet) + LINE_ENDING;\n    }\n\n    result += 'END:' + name;\n    return result;\n  };\n\n  /**\n   * Converts a single jCal/jCard property to a iCalendar/vCard string.\n   *\n   * @function ICAL.stringify.property\n   * @param {Array} property\n   *        jCal/jCard property array\n   * @param {ICAL.design.designSet} designSet\n   *        The design data to use for this property\n   * @param {Boolean} noFold\n   *        If true, the line is not folded\n   * @return {String}       The iCalendar/vCard string\n   */\n  stringify.property = function(property, designSet, noFold) {\n    var name = property[0].toUpperCase();\n    var jsName = property[0];\n    var params = property[1];\n\n    var line = name;\n\n    var paramName;\n    for (paramName in params) {\n      var value = params[paramName];\n\n      /* istanbul ignore else */\n      if (params.hasOwnProperty(paramName)) {\n        var multiValue = (paramName in designSet.param) && designSet.param[paramName].multiValue;\n        if (multiValue && Array.isArray(value)) {\n          if (designSet.param[paramName].multiValueSeparateDQuote) {\n            multiValue = '\"' + multiValue + '\"';\n          }\n          value = value.map(stringify._rfc6868Unescape);\n          value = stringify.multiValue(value, multiValue, \"unknown\", null, designSet);\n        } else {\n          value = stringify._rfc6868Unescape(value);\n        }\n\n\n        line += ';' + paramName.toUpperCase();\n        line += '=' + stringify.propertyValue(value);\n      }\n    }\n\n    if (property.length === 3) {\n      // If there are no values, we must assume a blank value\n      return line + ':';\n    }\n\n    var valueType = property[2];\n\n    if (!designSet) {\n      designSet = design.defaultSet;\n    }\n\n    var propDetails;\n    var multiValue = false;\n    var structuredValue = false;\n    var isDefault = false;\n\n    if (jsName in designSet.property) {\n      propDetails = designSet.property[jsName];\n\n      if ('multiValue' in propDetails) {\n        multiValue = propDetails.multiValue;\n      }\n\n      if (('structuredValue' in propDetails) && Array.isArray(property[3])) {\n        structuredValue = propDetails.structuredValue;\n      }\n\n      if ('defaultType' in propDetails) {\n        if (valueType === propDetails.defaultType) {\n          isDefault = true;\n        }\n      } else {\n        if (valueType === DEFAULT_VALUE_TYPE) {\n          isDefault = true;\n        }\n      }\n    } else {\n      if (valueType === DEFAULT_VALUE_TYPE) {\n        isDefault = true;\n      }\n    }\n\n    // push the VALUE property if type is not the default\n    // for the current property.\n    if (!isDefault) {\n      // value will never contain ;/:/, so we don't escape it here.\n      line += ';VALUE=' + valueType.toUpperCase();\n    }\n\n    line += ':';\n\n    if (multiValue && structuredValue) {\n      line += stringify.multiValue(\n        property[3], structuredValue, valueType, multiValue, designSet, structuredValue\n      );\n    } else if (multiValue) {\n      line += stringify.multiValue(\n        property.slice(3), multiValue, valueType, null, designSet, false\n      );\n    } else if (structuredValue) {\n      line += stringify.multiValue(\n        property[3], structuredValue, valueType, null, designSet, structuredValue\n      );\n    } else {\n      line += stringify.value(property[3], valueType, designSet, false);\n    }\n\n    return noFold ? line : ICAL.helpers.foldline(line);\n  };\n\n  /**\n   * Handles escaping of property values that may contain:\n   *\n   *    COLON (:), SEMICOLON (;), or COMMA (,)\n   *\n   * If any of the above are present the result is wrapped\n   * in double quotes.\n   *\n   * @function ICAL.stringify.propertyValue\n   * @param {String} value      Raw property value\n   * @return {String}           Given or escaped value when needed\n   */\n  stringify.propertyValue = function(value) {\n\n    if ((helpers.unescapedIndexOf(value, ',') === -1) &&\n        (helpers.unescapedIndexOf(value, ':') === -1) &&\n        (helpers.unescapedIndexOf(value, ';') === -1)) {\n\n      return value;\n    }\n\n    return '\"' + value + '\"';\n  };\n\n  /**\n   * Converts an array of ical values into a single\n   * string based on a type and a delimiter value (like \",\").\n   *\n   * @function ICAL.stringify.multiValue\n   * @param {Array} values      List of values to convert\n   * @param {String} delim      Used to join the values (\",\", \";\", \":\")\n   * @param {String} type       Lowecase ical value type\n   *        (like boolean, date-time, etc..)\n   * @param {?String} innerMulti If set, each value will again be processed\n   *        Used for structured values\n   * @param {ICAL.design.designSet} designSet\n   *        The design data to use for this property\n   *\n   * @return {String}           iCalendar/vCard string for value\n   */\n  stringify.multiValue = function(values, delim, type, innerMulti, designSet, structuredValue) {\n    var result = '';\n    var len = values.length;\n    var i = 0;\n\n    for (; i < len; i++) {\n      if (innerMulti && Array.isArray(values[i])) {\n        result += stringify.multiValue(values[i], innerMulti, type, null, designSet, structuredValue);\n      } else {\n        result += stringify.value(values[i], type, designSet, structuredValue);\n      }\n\n      if (i !== (len - 1)) {\n        result += delim;\n      }\n    }\n\n    return result;\n  };\n\n  /**\n   * Processes a single ical value runs the associated \"toICAL\" method from the\n   * design value type if available to convert the value.\n   *\n   * @function ICAL.stringify.value\n   * @param {String|Number} value       A formatted value\n   * @param {String} type               Lowercase iCalendar/vCard value type\n   *  (like boolean, date-time, etc..)\n   * @return {String}                   iCalendar/vCard value for single value\n   */\n  stringify.value = function(value, type, designSet, structuredValue) {\n    if (type in designSet.value && 'toICAL' in designSet.value[type]) {\n      return designSet.value[type].toICAL(value, structuredValue);\n    }\n    return value;\n  };\n\n  /**\n   * Internal helper for rfc6868. Exposing this on ICAL.stringify so that\n   * hackers can disable the rfc6868 parsing if the really need to.\n   *\n   * @param {String} val        The value to unescape\n   * @return {String}           The escaped value\n   */\n  stringify._rfc6868Unescape = function(val) {\n    return val.replace(/[\\n^\"]/g, function(x) {\n      return RFC6868_REPLACE_MAP[x];\n    });\n  };\n  var RFC6868_REPLACE_MAP = { '\"': \"^'\", \"\\n\": \"^n\", \"^\": \"^^\" };\n\n  return stringify;\n}());\n/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\n * Portions Copyright (C) Philipp Kewisch, 2011-2015 */\n\n\n/**\n * Contains various functions to parse iCalendar and vCard data.\n * @namespace\n */\nICAL.parse = (function() {\n  'use strict';\n\n  var CHAR = /[^ \\t]/;\n  var MULTIVALUE_DELIMITER = ',';\n  var VALUE_DELIMITER = ':';\n  var PARAM_DELIMITER = ';';\n  var PARAM_NAME_DELIMITER = '=';\n  var DEFAULT_VALUE_TYPE = 'unknown';\n  var DEFAULT_PARAM_TYPE = 'text';\n\n  var design = ICAL.design;\n  var helpers = ICAL.helpers;\n\n  /**\n   * An error that occurred during parsing.\n   *\n   * @param {String} message        The error message\n   * @memberof ICAL.parse\n   * @extends {Error}\n   * @class\n   */\n  function ParserError(message) {\n    this.message = message;\n    this.name = 'ParserError';\n\n    try {\n      throw new Error();\n    } catch (e) {\n      if (e.stack) {\n        var split = e.stack.split('\\n');\n        split.shift();\n        this.stack = split.join('\\n');\n      }\n    }\n  }\n\n  ParserError.prototype = Error.prototype;\n\n  /**\n   * Parses iCalendar or vCard data into a raw jCal object. Consult\n   * documentation on the {@tutorial layers|layers of parsing} for more\n   * details.\n   *\n   * @function ICAL.parse\n   * @variation function\n   * @todo Fix the API to be more clear on the return type\n   * @param {String} input      The string data to parse\n   * @return {Object|Object[]}  A single jCal object, or an array thereof\n   */\n  function parser(input) {\n    var state = {};\n    var root = state.component = [];\n\n    state.stack = [root];\n\n    parser._eachLine(input, function(err, line) {\n      parser._handleContentLine(line, state);\n    });\n\n\n    // when there are still items on the stack\n    // throw a fatal error, a component was not closed\n    // correctly in that case.\n    if (state.stack.length > 1) {\n      throw new ParserError(\n        'invalid ical body. component began but did not end'\n      );\n    }\n\n    state = null;\n\n    return (root.length == 1 ? root[0] : root);\n  }\n\n  /**\n   * Parse an iCalendar property value into the jCal for a single property\n   *\n   * @function ICAL.parse.property\n   * @param {String} str\n   *   The iCalendar property string to parse\n   * @param {ICAL.design.designSet=} designSet\n   *   The design data to use for this property\n   * @return {Object}\n   *   The jCal Object containing the property\n   */\n  parser.property = function(str, designSet) {\n    var state = {\n      component: [[], []],\n      designSet: designSet || design.defaultSet\n    };\n    parser._handleContentLine(str, state);\n    return state.component[1][0];\n  };\n\n  /**\n   * Convenience method to parse a component. You can use ICAL.parse() directly\n   * instead.\n   *\n   * @function ICAL.parse.component\n   * @see ICAL.parse(function)\n   * @param {String} str    The iCalendar component string to parse\n   * @return {Object}       The jCal Object containing the component\n   */\n  parser.component = function(str) {\n    return parser(str);\n  };\n\n  // classes & constants\n  parser.ParserError = ParserError;\n\n  /**\n   * The state for parsing content lines from an iCalendar/vCard string.\n   *\n   * @private\n   * @memberof ICAL.parse\n   * @typedef {Object} parserState\n   * @property {ICAL.design.designSet} designSet    The design set to use for parsing\n   * @property {ICAL.Component[]} stack             The stack of components being processed\n   * @property {ICAL.Component} component           The currently active component\n   */\n\n\n  /**\n   * Handles a single line of iCalendar/vCard, updating the state.\n   *\n   * @private\n   * @function ICAL.parse._handleContentLine\n   * @param {String} line               The content line to process\n   * @param {ICAL.parse.parserState}    The current state of the line parsing\n   */\n  parser._handleContentLine = function(line, state) {\n    // break up the parts of the line\n    var valuePos = line.indexOf(VALUE_DELIMITER);\n    var paramPos = line.indexOf(PARAM_DELIMITER);\n\n    var lastParamIndex;\n    var lastValuePos;\n\n    // name of property or begin/end\n    var name;\n    var value;\n    // params is only overridden if paramPos !== -1.\n    // we can't do params = params || {} later on\n    // because it sacrifices ops.\n    var params = {};\n\n    /**\n     * Different property cases\n     *\n     *\n     * 1. RRULE:FREQ=foo\n     *    // FREQ= is not a param but the value\n     *\n     * 2. ATTENDEE;ROLE=REQ-PARTICIPANT;\n     *    // ROLE= is a param because : has not happened yet\n     */\n      // when the parameter delimiter is after the\n      // value delimiter then its not a parameter.\n\n    if ((paramPos !== -1 && valuePos !== -1)) {\n      // when the parameter delimiter is after the\n      // value delimiter then its not a parameter.\n      if (paramPos > valuePos) {\n        paramPos = -1;\n      }\n    }\n\n    var parsedParams;\n    if (paramPos !== -1) {\n      name = line.substring(0, paramPos).toLowerCase();\n      parsedParams = parser._parseParameters(line.substring(paramPos), 0, state.designSet);\n      if (parsedParams[2] == -1) {\n        throw new ParserError(\"Invalid parameters in '\" + line + \"'\");\n      }\n      params = parsedParams[0];\n      lastParamIndex = parsedParams[1].length + parsedParams[2] + paramPos;\n      if ((lastValuePos =\n        line.substring(lastParamIndex).indexOf(VALUE_DELIMITER)) !== -1) {\n        value = line.substring(lastParamIndex + lastValuePos + 1);\n      } else {\n        throw new ParserError(\"Missing parameter value in '\" + line + \"'\");\n      }\n    } else if (valuePos !== -1) {\n      // without parmeters (BEGIN:VCAENDAR, CLASS:PUBLIC)\n      name = line.substring(0, valuePos).toLowerCase();\n      value = line.substring(valuePos + 1);\n\n      if (name === 'begin') {\n        var newComponent = [value.toLowerCase(), [], []];\n        if (state.stack.length === 1) {\n          state.component.push(newComponent);\n        } else {\n          state.component[2].push(newComponent);\n        }\n        state.stack.push(state.component);\n        state.component = newComponent;\n        if (!state.designSet) {\n          state.designSet = design.getDesignSet(state.component[0]);\n        }\n        return;\n      } else if (name === 'end') {\n        state.component = state.stack.pop();\n        return;\n      }\n      // If its not begin/end, then this is a property with an empty value,\n      // which should be considered valid.\n    } else {\n      /**\n       * Invalid line.\n       * The rational to throw an error is we will\n       * never be certain that the rest of the file\n       * is sane and its unlikely that we can serialize\n       * the result correctly either.\n       */\n      throw new ParserError(\n        'invalid line (no token \";\" or \":\") \"' + line + '\"'\n      );\n    }\n\n    var valueType;\n    var multiValue = false;\n    var structuredValue = false;\n    var propertyDetails;\n\n    if (name in state.designSet.property) {\n      propertyDetails = state.designSet.property[name];\n\n      if ('multiValue' in propertyDetails) {\n        multiValue = propertyDetails.multiValue;\n      }\n\n      if ('structuredValue' in propertyDetails) {\n        structuredValue = propertyDetails.structuredValue;\n      }\n\n      if (value && 'detectType' in propertyDetails) {\n        valueType = propertyDetails.detectType(value);\n      }\n    }\n\n    // attempt to determine value\n    if (!valueType) {\n      if (!('value' in params)) {\n        if (propertyDetails) {\n          valueType = propertyDetails.defaultType;\n        } else {\n          valueType = DEFAULT_VALUE_TYPE;\n        }\n      } else {\n        // possible to avoid this?\n        valueType = params.value.toLowerCase();\n      }\n    }\n\n    delete params.value;\n\n    /**\n     * Note on `var result` juggling:\n     *\n     * I observed that building the array in pieces has adverse\n     * effects on performance, so where possible we inline the creation.\n     * Its a little ugly but resulted in ~2000 additional ops/sec.\n     */\n\n    var result;\n    if (multiValue && structuredValue) {\n      value = parser._parseMultiValue(value, structuredValue, valueType, [], multiValue, state.designSet, structuredValue);\n      result = [name, params, valueType, value];\n    } else if (multiValue) {\n      result = [name, params, valueType];\n      parser._parseMultiValue(value, multiValue, valueType, result, null, state.designSet, false);\n    } else if (structuredValue) {\n      value = parser._parseMultiValue(value, structuredValue, valueType, [], null, state.designSet, structuredValue);\n      result = [name, params, valueType, value];\n    } else {\n      value = parser._parseValue(value, valueType, state.designSet, false);\n      result = [name, params, valueType, value];\n    }\n    // rfc6350 requires that in vCard 4.0 the first component is the VERSION\n    // component with as value 4.0, note that 3.0 does not have this requirement.\n    if (state.component[0] === 'vcard' && state.component[1].length === 0 &&\n            !(name === 'version' && value === '4.0')) {\n      state.designSet = design.getDesignSet(\"vcard3\");\n    }\n    state.component[1].push(result);\n  };\n\n  /**\n   * Parse a value from the raw value into the jCard/jCal value.\n   *\n   * @private\n   * @function ICAL.parse._parseValue\n   * @param {String} value          Original value\n   * @param {String} type           Type of value\n   * @param {Object} designSet      The design data to use for this value\n   * @return {Object} varies on type\n   */\n  parser._parseValue = function(value, type, designSet, structuredValue) {\n    if (type in designSet.value && 'fromICAL' in designSet.value[type]) {\n      return designSet.value[type].fromICAL(value, structuredValue);\n    }\n    return value;\n  };\n\n  /**\n   * Parse parameters from a string to object.\n   *\n   * @function ICAL.parse._parseParameters\n   * @private\n   * @param {String} line           A single unfolded line\n   * @param {Numeric} start         Position to start looking for properties\n   * @param {Object} designSet      The design data to use for this property\n   * @return {Object} key/value pairs\n   */\n  parser._parseParameters = function(line, start, designSet) {\n    var lastParam = start;\n    var pos = 0;\n    var delim = PARAM_NAME_DELIMITER;\n    var result = {};\n    var name, lcname;\n    var value, valuePos = -1;\n    var type, multiValue, mvdelim;\n\n    // find the next '=' sign\n    // use lastParam and pos to find name\n    // check if \" is used if so get value from \"->\"\n    // then increment pos to find next ;\n\n    while ((pos !== false) &&\n           (pos = helpers.unescapedIndexOf(line, delim, pos + 1)) !== -1) {\n\n      name = line.substr(lastParam + 1, pos - lastParam - 1);\n      if (name.length == 0) {\n        throw new ParserError(\"Empty parameter name in '\" + line + \"'\");\n      }\n      lcname = name.toLowerCase();\n      mvdelim = false;\n      multiValue = false;\n\n      if (lcname in designSet.param && designSet.param[lcname].valueType) {\n        type = designSet.param[lcname].valueType;\n      } else {\n        type = DEFAULT_PARAM_TYPE;\n      }\n\n      if (lcname in designSet.param) {\n        multiValue = designSet.param[lcname].multiValue;\n        if (designSet.param[lcname].multiValueSeparateDQuote) {\n          mvdelim = parser._rfc6868Escape('\"' + multiValue + '\"');\n        }\n      }\n\n      var nextChar = line[pos + 1];\n      if (nextChar === '\"') {\n        valuePos = pos + 2;\n        pos = helpers.unescapedIndexOf(line, '\"', valuePos);\n        if (multiValue && pos != -1) {\n            var extendedValue = true;\n            while (extendedValue) {\n              if (line[pos + 1] == multiValue && line[pos + 2] == '\"') {\n                pos = helpers.unescapedIndexOf(line, '\"', pos + 3);\n              } else {\n                extendedValue = false;\n              }\n            }\n          }\n        if (pos === -1) {\n          throw new ParserError(\n            'invalid line (no matching double quote) \"' + line + '\"'\n          );\n        }\n        value = line.substr(valuePos, pos - valuePos);\n        lastParam = helpers.unescapedIndexOf(line, PARAM_DELIMITER, pos);\n        if (lastParam === -1) {\n          pos = false;\n        }\n      } else {\n        valuePos = pos + 1;\n\n        // move to next \";\"\n        var nextPos = helpers.unescapedIndexOf(line, PARAM_DELIMITER, valuePos);\n        var propValuePos = helpers.unescapedIndexOf(line, VALUE_DELIMITER, valuePos);\n        if (propValuePos !== -1 && nextPos > propValuePos) {\n          // this is a delimiter in the property value, let's stop here\n          nextPos = propValuePos;\n          pos = false;\n        } else if (nextPos === -1) {\n          // no \";\"\n          if (propValuePos === -1) {\n            nextPos = line.length;\n          } else {\n            nextPos = propValuePos;\n          }\n          pos = false;\n        } else {\n          lastParam = nextPos;\n          pos = nextPos;\n        }\n\n        value = line.substr(valuePos, nextPos - valuePos);\n      }\n\n      value = parser._rfc6868Escape(value);\n      if (multiValue) {\n        var delimiter = mvdelim || multiValue;\n        value = parser._parseMultiValue(value, delimiter, type, [], null, designSet);\n      } else {\n        value = parser._parseValue(value, type, designSet);\n      }\n\n      if (multiValue && (lcname in result)) {\n        if (Array.isArray(result[lcname])) {\n          result[lcname].push(value);\n        } else {\n          result[lcname] = [\n            result[lcname],\n            value\n          ];\n        }\n      } else {\n        result[lcname] = value;\n      }\n    }\n    return [result, value, valuePos];\n  };\n\n  /**\n   * Internal helper for rfc6868. Exposing this on ICAL.parse so that\n   * hackers can disable the rfc6868 parsing if the really need to.\n   *\n   * @function ICAL.parse._rfc6868Escape\n   * @param {String} val        The value to escape\n   * @return {String}           The escaped value\n   */\n  parser._rfc6868Escape = function(val) {\n    return val.replace(/\\^['n^]/g, function(x) {\n      return RFC6868_REPLACE_MAP[x];\n    });\n  };\n  var RFC6868_REPLACE_MAP = { \"^'\": '\"', \"^n\": \"\\n\", \"^^\": \"^\" };\n\n  /**\n   * Parse a multi value string. This function is used either for parsing\n   * actual multi-value property's values, or for handling parameter values. It\n   * can be used for both multi-value properties and structured value properties.\n   *\n   * @private\n   * @function ICAL.parse._parseMultiValue\n   * @param {String} buffer     The buffer containing the full value\n   * @param {String} delim      The multi-value delimiter\n   * @param {String} type       The value type to be parsed\n   * @param {Array.<?>} result        The array to append results to, varies on value type\n   * @param {String} innerMulti The inner delimiter to split each value with\n   * @param {ICAL.design.designSet} designSet   The design data for this value\n   * @return {?|Array.<?>}            Either an array of results, or the first result\n   */\n  parser._parseMultiValue = function(buffer, delim, type, result, innerMulti, designSet, structuredValue) {\n    var pos = 0;\n    var lastPos = 0;\n    var value;\n    if (delim.length === 0) {\n      return buffer;\n    }\n\n    // split each piece\n    while ((pos = helpers.unescapedIndexOf(buffer, delim, lastPos)) !== -1) {\n      value = buffer.substr(lastPos, pos - lastPos);\n      if (innerMulti) {\n        value = parser._parseMultiValue(value, innerMulti, type, [], null, designSet, structuredValue);\n      } else {\n        value = parser._parseValue(value, type, designSet, structuredValue);\n      }\n      result.push(value);\n      lastPos = pos + delim.length;\n    }\n\n    // on the last piece take the rest of string\n    value = buffer.substr(lastPos);\n    if (innerMulti) {\n      value = parser._parseMultiValue(value, innerMulti, type, [], null, designSet, structuredValue);\n    } else {\n      value = parser._parseValue(value, type, designSet, structuredValue);\n    }\n    result.push(value);\n\n    return result.length == 1 ? result[0] : result;\n  };\n\n  /**\n   * Process a complete buffer of iCalendar/vCard data line by line, correctly\n   * unfolding content. Each line will be processed with the given callback\n   *\n   * @private\n   * @function ICAL.parse._eachLine\n   * @param {String} buffer                         The buffer to process\n   * @param {function(?String, String)} callback    The callback for each line\n   */\n  parser._eachLine = function(buffer, callback) {\n    var len = buffer.length;\n    var lastPos = buffer.search(CHAR);\n    var pos = lastPos;\n    var line;\n    var firstChar;\n\n    var newlineOffset;\n\n    do {\n      pos = buffer.indexOf('\\n', lastPos) + 1;\n\n      if (pos > 1 && buffer[pos - 2] === '\\r') {\n        newlineOffset = 2;\n      } else {\n        newlineOffset = 1;\n      }\n\n      if (pos === 0) {\n        pos = len;\n        newlineOffset = 0;\n      }\n\n      firstChar = buffer[lastPos];\n\n      if (firstChar === ' ' || firstChar === '\\t') {\n        // add to line\n        line += buffer.substr(\n          lastPos + 1,\n          pos - lastPos - (newlineOffset + 1)\n        );\n      } else {\n        if (line)\n          callback(null, line);\n        // push line\n        line = buffer.substr(\n          lastPos,\n          pos - lastPos - newlineOffset\n        );\n      }\n\n      lastPos = pos;\n    } while (pos !== len);\n\n    // extra ending line\n    line = line.trim();\n\n    if (line.length)\n      callback(null, line);\n  };\n\n  return parser;\n\n}());\n/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\n * Portions Copyright (C) Philipp Kewisch, 2011-2015 */\n\n\n/**\n * This symbol is further described later on\n * @ignore\n */\nICAL.Component = (function() {\n  'use strict';\n\n  var PROPERTY_INDEX = 1;\n  var COMPONENT_INDEX = 2;\n  var NAME_INDEX = 0;\n\n  /**\n   * @classdesc\n   * Wraps a jCal component, adding convenience methods to add, remove and\n   * update subcomponents and properties.\n   *\n   * @class\n   * @alias ICAL.Component\n   * @param {Array|String} jCal         Raw jCal component data OR name of new\n   *                                      component\n   * @param {ICAL.Component} parent     Parent component to associate\n   */\n  function Component(jCal, parent) {\n    if (typeof(jCal) === 'string') {\n      // jCal spec (name, properties, components)\n      jCal = [jCal, [], []];\n    }\n\n    // mostly for legacy reasons.\n    this.jCal = jCal;\n\n    this.parent = parent || null;\n  }\n\n  Component.prototype = {\n    /**\n     * Hydrated properties are inserted into the _properties array at the same\n     * position as in the jCal array, so its possible the array contains\n     * undefined values for unhydrdated properties. To avoid iterating the\n     * array when checking if all properties have been hydrated, we save the\n     * count here.\n     *\n     * @type {Number}\n     * @private\n     */\n    _hydratedPropertyCount: 0,\n\n    /**\n     * The same count as for _hydratedPropertyCount, but for subcomponents\n     *\n     * @type {Number}\n     * @private\n     */\n    _hydratedComponentCount: 0,\n\n    /**\n     * The name of this component\n     * @readonly\n     */\n    get name() {\n      return this.jCal[NAME_INDEX];\n    },\n\n    /**\n     * The design set for this component, e.g. icalendar vs vcard\n     *\n     * @type {ICAL.design.designSet}\n     * @private\n     */\n    get _designSet() {\n      var parentDesign = this.parent && this.parent._designSet;\n      return parentDesign || ICAL.design.getDesignSet(this.name);\n    },\n\n    _hydrateComponent: function(index) {\n      if (!this._components) {\n        this._components = [];\n        this._hydratedComponentCount = 0;\n      }\n\n      if (this._components[index]) {\n        return this._components[index];\n      }\n\n      var comp = new Component(\n        this.jCal[COMPONENT_INDEX][index],\n        this\n      );\n\n      this._hydratedComponentCount++;\n      return (this._components[index] = comp);\n    },\n\n    _hydrateProperty: function(index) {\n      if (!this._properties) {\n        this._properties = [];\n        this._hydratedPropertyCount = 0;\n      }\n\n      if (this._properties[index]) {\n        return this._properties[index];\n      }\n\n      var prop = new ICAL.Property(\n        this.jCal[PROPERTY_INDEX][index],\n        this\n      );\n\n      this._hydratedPropertyCount++;\n      return (this._properties[index] = prop);\n    },\n\n    /**\n     * Finds first sub component, optionally filtered by name.\n     *\n     * @param {String=} name        Optional name to filter by\n     * @return {?ICAL.Component}     The found subcomponent\n     */\n    getFirstSubcomponent: function(name) {\n      if (name) {\n        var i = 0;\n        var comps = this.jCal[COMPONENT_INDEX];\n        var len = comps.length;\n\n        for (; i < len; i++) {\n          if (comps[i][NAME_INDEX] === name) {\n            var result = this._hydrateComponent(i);\n            return result;\n          }\n        }\n      } else {\n        if (this.jCal[COMPONENT_INDEX].length) {\n          return this._hydrateComponent(0);\n        }\n      }\n\n      // ensure we return a value (strict mode)\n      return null;\n    },\n\n    /**\n     * Finds all sub components, optionally filtering by name.\n     *\n     * @param {String=} name            Optional name to filter by\n     * @return {ICAL.Component[]}       The found sub components\n     */\n    getAllSubcomponents: function(name) {\n      var jCalLen = this.jCal[COMPONENT_INDEX].length;\n      var i = 0;\n\n      if (name) {\n        var comps = this.jCal[COMPONENT_INDEX];\n        var result = [];\n\n        for (; i < jCalLen; i++) {\n          if (name === comps[i][NAME_INDEX]) {\n            result.push(\n              this._hydrateComponent(i)\n            );\n          }\n        }\n        return result;\n      } else {\n        if (!this._components ||\n            (this._hydratedComponentCount !== jCalLen)) {\n          for (; i < jCalLen; i++) {\n            this._hydrateComponent(i);\n          }\n        }\n\n        return this._components || [];\n      }\n    },\n\n    /**\n     * Returns true when a named property exists.\n     *\n     * @param {String} name     The property name\n     * @return {Boolean}        True, when property is found\n     */\n    hasProperty: function(name) {\n      var props = this.jCal[PROPERTY_INDEX];\n      var len = props.length;\n\n      var i = 0;\n      for (; i < len; i++) {\n        // 0 is property name\n        if (props[i][NAME_INDEX] === name) {\n          return true;\n        }\n      }\n\n      return false;\n    },\n\n    /**\n     * Finds the first property, optionally with the given name.\n     *\n     * @param {String=} name        Lowercase property name\n     * @return {?ICAL.Property}     The found property\n     */\n    getFirstProperty: function(name) {\n      if (name) {\n        var i = 0;\n        var props = this.jCal[PROPERTY_INDEX];\n        var len = props.length;\n\n        for (; i < len; i++) {\n          if (props[i][NAME_INDEX] === name) {\n            var result = this._hydrateProperty(i);\n            return result;\n          }\n        }\n      } else {\n        if (this.jCal[PROPERTY_INDEX].length) {\n          return this._hydrateProperty(0);\n        }\n      }\n\n      return null;\n    },\n\n    /**\n     * Returns first property's value, if available.\n     *\n     * @param {String=} name    Lowercase property name\n     * @return {?String}        The found property value.\n     */\n    getFirstPropertyValue: function(name) {\n      var prop = this.getFirstProperty(name);\n      if (prop) {\n        return prop.getFirstValue();\n      }\n\n      return null;\n    },\n\n    /**\n     * Get all properties in the component, optionally filtered by name.\n     *\n     * @param {String=} name        Lowercase property name\n     * @return {ICAL.Property[]}    List of properties\n     */\n    getAllProperties: function(name) {\n      var jCalLen = this.jCal[PROPERTY_INDEX].length;\n      var i = 0;\n\n      if (name) {\n        var props = this.jCal[PROPERTY_INDEX];\n        var result = [];\n\n        for (; i < jCalLen; i++) {\n          if (name === props[i][NAME_INDEX]) {\n            result.push(\n              this._hydrateProperty(i)\n            );\n          }\n        }\n        return result;\n      } else {\n        if (!this._properties ||\n            (this._hydratedPropertyCount !== jCalLen)) {\n          for (; i < jCalLen; i++) {\n            this._hydrateProperty(i);\n          }\n        }\n\n        return this._properties || [];\n      }\n    },\n\n    _removeObjectByIndex: function(jCalIndex, cache, index) {\n      cache = cache || [];\n      // remove cached version\n      if (cache[index]) {\n        var obj = cache[index];\n        if (\"parent\" in obj) {\n            obj.parent = null;\n        }\n      }\n\n      cache.splice(index, 1);\n\n      // remove it from the jCal\n      this.jCal[jCalIndex].splice(index, 1);\n    },\n\n    _removeObject: function(jCalIndex, cache, nameOrObject) {\n      var i = 0;\n      var objects = this.jCal[jCalIndex];\n      var len = objects.length;\n      var cached = this[cache];\n\n      if (typeof(nameOrObject) === 'string') {\n        for (; i < len; i++) {\n          if (objects[i][NAME_INDEX] === nameOrObject) {\n            this._removeObjectByIndex(jCalIndex, cached, i);\n            return true;\n          }\n        }\n      } else if (cached) {\n        for (; i < len; i++) {\n          if (cached[i] && cached[i] === nameOrObject) {\n            this._removeObjectByIndex(jCalIndex, cached, i);\n            return true;\n          }\n        }\n      }\n\n      return false;\n    },\n\n    _removeAllObjects: function(jCalIndex, cache, name) {\n      var cached = this[cache];\n\n      // Unfortunately we have to run through all children to reset their\n      // parent property.\n      var objects = this.jCal[jCalIndex];\n      var i = objects.length - 1;\n\n      // descending search required because splice\n      // is used and will effect the indices.\n      for (; i >= 0; i--) {\n        if (!name || objects[i][NAME_INDEX] === name) {\n          this._removeObjectByIndex(jCalIndex, cached, i);\n        }\n      }\n    },\n\n    /**\n     * Adds a single sub component.\n     *\n     * @param {ICAL.Component} component        The component to add\n     * @return {ICAL.Component}                 The passed in component\n     */\n    addSubcomponent: function(component) {\n      if (!this._components) {\n        this._components = [];\n        this._hydratedComponentCount = 0;\n      }\n\n      if (component.parent) {\n        component.parent.removeSubcomponent(component);\n      }\n\n      var idx = this.jCal[COMPONENT_INDEX].push(component.jCal);\n      this._components[idx - 1] = component;\n      this._hydratedComponentCount++;\n      component.parent = this;\n      return component;\n    },\n\n    /**\n     * Removes a single component by name or the instance of a specific\n     * component.\n     *\n     * @param {ICAL.Component|String} nameOrComp    Name of component, or component\n     * @return {Boolean}                            True when comp is removed\n     */\n    removeSubcomponent: function(nameOrComp) {\n      var removed = this._removeObject(COMPONENT_INDEX, '_components', nameOrComp);\n      if (removed) {\n        this._hydratedComponentCount--;\n      }\n      return removed;\n    },\n\n    /**\n     * Removes all components or (if given) all components by a particular\n     * name.\n     *\n     * @param {String=} name            Lowercase component name\n     */\n    removeAllSubcomponents: function(name) {\n      var removed = this._removeAllObjects(COMPONENT_INDEX, '_components', name);\n      this._hydratedComponentCount = 0;\n      return removed;\n    },\n\n    /**\n     * Adds an {@link ICAL.Property} to the component.\n     *\n     * @param {ICAL.Property} property      The property to add\n     * @return {ICAL.Property}              The passed in property\n     */\n    addProperty: function(property) {\n      if (!(property instanceof ICAL.Property)) {\n        throw new TypeError('must instance of ICAL.Property');\n      }\n\n      if (!this._properties) {\n        this._properties = [];\n        this._hydratedPropertyCount = 0;\n      }\n\n      if (property.parent) {\n        property.parent.removeProperty(property);\n      }\n\n      var idx = this.jCal[PROPERTY_INDEX].push(property.jCal);\n      this._properties[idx - 1] = property;\n      this._hydratedPropertyCount++;\n      property.parent = this;\n      return property;\n    },\n\n    /**\n     * Helper method to add a property with a value to the component.\n     *\n     * @param {String}               name         Property name to add\n     * @param {String|Number|Object} value        Property value\n     * @return {ICAL.Property}                    The created property\n     */\n    addPropertyWithValue: function(name, value) {\n      var prop = new ICAL.Property(name);\n      prop.setValue(value);\n\n      this.addProperty(prop);\n\n      return prop;\n    },\n\n    /**\n     * Helper method that will update or create a property of the given name\n     * and sets its value. If multiple properties with the given name exist,\n     * only the first is updated.\n     *\n     * @param {String}               name         Property name to update\n     * @param {String|Number|Object} value        Property value\n     * @return {ICAL.Property}                    The created property\n     */\n    updatePropertyWithValue: function(name, value) {\n      var prop = this.getFirstProperty(name);\n\n      if (prop) {\n        prop.setValue(value);\n      } else {\n        prop = this.addPropertyWithValue(name, value);\n      }\n\n      return prop;\n    },\n\n    /**\n     * Removes a single property by name or the instance of the specific\n     * property.\n     *\n     * @param {String|ICAL.Property} nameOrProp     Property name or instance to remove\n     * @return {Boolean}                            True, when deleted\n     */\n    removeProperty: function(nameOrProp) {\n      var removed = this._removeObject(PROPERTY_INDEX, '_properties', nameOrProp);\n      if (removed) {\n        this._hydratedPropertyCount--;\n      }\n      return removed;\n    },\n\n    /**\n     * Removes all properties associated with this component, optionally\n     * filtered by name.\n     *\n     * @param {String=} name        Lowercase property name\n     * @return {Boolean}            True, when deleted\n     */\n    removeAllProperties: function(name) {\n      var removed = this._removeAllObjects(PROPERTY_INDEX, '_properties', name);\n      this._hydratedPropertyCount = 0;\n      return removed;\n    },\n\n    /**\n     * Returns the Object representation of this component. The returned object\n     * is a live jCal object and should be cloned if modified.\n     * @return {Object}\n     */\n    toJSON: function() {\n      return this.jCal;\n    },\n\n    /**\n     * The string representation of this component.\n     * @return {String}\n     */\n    toString: function() {\n      return ICAL.stringify.component(\n        this.jCal, this._designSet\n      );\n    }\n  };\n\n  /**\n   * Create an {@link ICAL.Component} by parsing the passed iCalendar string.\n   *\n   * @param {String} str        The iCalendar string to parse\n   */\n  Component.fromString = function(str) {\n    return new Component(ICAL.parse.component(str));\n  };\n\n  return Component;\n}());\n/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\n * Portions Copyright (C) Philipp Kewisch, 2011-2015 */\n\n\n/**\n * This symbol is further described later on\n * @ignore\n */\nICAL.Property = (function() {\n  'use strict';\n\n  var NAME_INDEX = 0;\n  var PROP_INDEX = 1;\n  var TYPE_INDEX = 2;\n  var VALUE_INDEX = 3;\n\n  var design = ICAL.design;\n\n  /**\n   * @classdesc\n   * Provides a layer on top of the raw jCal object for manipulating a single\n   * property, with its parameters and value.\n   *\n   * @description\n   * Its important to note that mutations done in the wrapper\n   * directly mutate the jCal object used to initialize.\n   *\n   * Can also be used to create new properties by passing\n   * the name of the property (as a String).\n   *\n   * @class\n   * @alias ICAL.Property\n   * @param {Array|String} jCal         Raw jCal representation OR\n   *  the new name of the property\n   *\n   * @param {ICAL.Component=} parent    Parent component\n   */\n  function Property(jCal, parent) {\n    this._parent = parent || null;\n\n    if (typeof(jCal) === 'string') {\n      // We are creating the property by name and need to detect the type\n      this.jCal = [jCal, {}, design.defaultType];\n      this.jCal[TYPE_INDEX] = this.getDefaultType();\n    } else {\n      this.jCal = jCal;\n    }\n    this._updateType();\n  }\n\n  Property.prototype = {\n\n    /**\n     * The value type for this property\n     * @readonly\n     * @type {String}\n     */\n    get type() {\n      return this.jCal[TYPE_INDEX];\n    },\n\n    /**\n     * The name of this property, in lowercase.\n     * @readonly\n     * @type {String}\n     */\n    get name() {\n      return this.jCal[NAME_INDEX];\n    },\n\n    /**\n     * The parent component for this property.\n     * @type {ICAL.Component}\n     */\n    get parent() {\n      return this._parent;\n    },\n\n    set parent(p) {\n      // Before setting the parent, check if the design set has changed. If it\n      // has, we later need to update the type if it was unknown before.\n      var designSetChanged = !this._parent || (p && p._designSet != this._parent._designSet);\n\n      this._parent = p;\n\n      if (this.type == design.defaultType && designSetChanged) {\n        this.jCal[TYPE_INDEX] = this.getDefaultType();\n        this._updateType();\n      }\n\n      return p;\n    },\n\n    /**\n     * The design set for this property, e.g. icalendar vs vcard\n     *\n     * @type {ICAL.design.designSet}\n     * @private\n     */\n    get _designSet() {\n      return this.parent ? this.parent._designSet : design.defaultSet;\n    },\n\n    /**\n     * Updates the type metadata from the current jCal type and design set.\n     *\n     * @private\n     */\n    _updateType: function() {\n      var designSet = this._designSet;\n\n      if (this.type in designSet.value) {\n        var designType = designSet.value[this.type];\n\n        if ('decorate' in designSet.value[this.type]) {\n          this.isDecorated = true;\n        } else {\n          this.isDecorated = false;\n        }\n\n        if (this.name in designSet.property) {\n          this.isMultiValue = ('multiValue' in designSet.property[this.name]);\n          this.isStructuredValue = ('structuredValue' in designSet.property[this.name]);\n        }\n      }\n    },\n\n    /**\n     * Hydrate a single value. The act of hydrating means turning the raw jCal\n     * value into a potentially wrapped object, for example {@link ICAL.Time}.\n     *\n     * @private\n     * @param {Number} index        The index of the value to hydrate\n     * @return {Object}             The decorated value.\n     */\n    _hydrateValue: function(index) {\n      if (this._values && this._values[index]) {\n        return this._values[index];\n      }\n\n      // for the case where there is no value.\n      if (this.jCal.length <= (VALUE_INDEX + index)) {\n        return null;\n      }\n\n      if (this.isDecorated) {\n        if (!this._values) {\n          this._values = [];\n        }\n        return (this._values[index] = this._decorate(\n          this.jCal[VALUE_INDEX + index]\n        ));\n      } else {\n        return this.jCal[VALUE_INDEX + index];\n      }\n    },\n\n    /**\n     * Decorate a single value, returning its wrapped object. This is used by\n     * the hydrate function to actually wrap the value.\n     *\n     * @private\n     * @param {?} value         The value to decorate\n     * @return {Object}         The decorated value\n     */\n    _decorate: function(value) {\n      return this._designSet.value[this.type].decorate(value, this);\n    },\n\n    /**\n     * Undecorate a single value, returning its raw jCal data.\n     *\n     * @private\n     * @param {Object} value         The value to undecorate\n     * @return {?}                   The undecorated value\n     */\n    _undecorate: function(value) {\n      return this._designSet.value[this.type].undecorate(value, this);\n    },\n\n    /**\n     * Sets the value at the given index while also hydrating it. The passed\n     * value can either be a decorated or undecorated value.\n     *\n     * @private\n     * @param {?} value             The value to set\n     * @param {Number} index        The index to set it at\n     */\n    _setDecoratedValue: function(value, index) {\n      if (!this._values) {\n        this._values = [];\n      }\n\n      if (typeof(value) === 'object' && 'icaltype' in value) {\n        // decorated value\n        this.jCal[VALUE_INDEX + index] = this._undecorate(value);\n        this._values[index] = value;\n      } else {\n        // undecorated value\n        this.jCal[VALUE_INDEX + index] = value;\n        this._values[index] = this._decorate(value);\n      }\n    },\n\n    /**\n     * Gets a parameter on the property.\n     *\n     * @param {String}        name   Property name (lowercase)\n     * @return {Array|String}        Property value\n     */\n    getParameter: function(name) {\n      if (name in this.jCal[PROP_INDEX]) {\n        return this.jCal[PROP_INDEX][name];\n      } else {\n        return undefined;\n      }\n    },\n\n    /**\n     * Gets first parameter on the property.\n     *\n     * @param {String}        name   Property name (lowercase)\n     * @return {String}        Property value\n     */\n    getFirstParameter: function(name) {\n      var parameters = this.getParameter(name);\n\n      if (Array.isArray(parameters)) {\n        return parameters[0];\n      }\n\n      return parameters;\n    },\n\n    /**\n     * Sets a parameter on the property.\n     *\n     * @param {String}       name     The parameter name\n     * @param {Array|String} value    The parameter value\n     */\n    setParameter: function(name, value) {\n      var lcname = name.toLowerCase();\n      if (typeof value === \"string\" &&\n          lcname in this._designSet.param &&\n          'multiValue' in this._designSet.param[lcname]) {\n          value = [value];\n      }\n      this.jCal[PROP_INDEX][name] = value;\n    },\n\n    /**\n     * Removes a parameter\n     *\n     * @param {String} name     The parameter name\n     */\n    removeParameter: function(name) {\n      delete this.jCal[PROP_INDEX][name];\n    },\n\n    /**\n     * Get the default type based on this property's name.\n     *\n     * @return {String}     The default type for this property\n     */\n    getDefaultType: function() {\n      var name = this.jCal[NAME_INDEX];\n      var designSet = this._designSet;\n\n      if (name in designSet.property) {\n        var details = designSet.property[name];\n        if ('defaultType' in details) {\n          return details.defaultType;\n        }\n      }\n      return design.defaultType;\n    },\n\n    /**\n     * Sets type of property and clears out any existing values of the current\n     * type.\n     *\n     * @param {String} type     New iCAL type (see design.*.values)\n     */\n    resetType: function(type) {\n      this.removeAllValues();\n      this.jCal[TYPE_INDEX] = type;\n      this._updateType();\n    },\n\n    /**\n     * Finds the first property value.\n     *\n     * @return {String}         First property value\n     */\n    getFirstValue: function() {\n      return this._hydrateValue(0);\n    },\n\n    /**\n     * Gets all values on the property.\n     *\n     * NOTE: this creates an array during each call.\n     *\n     * @return {Array}          List of values\n     */\n    getValues: function() {\n      var len = this.jCal.length - VALUE_INDEX;\n\n      if (len < 1) {\n        // its possible for a property to have no value.\n        return [];\n      }\n\n      var i = 0;\n      var result = [];\n\n      for (; i < len; i++) {\n        result[i] = this._hydrateValue(i);\n      }\n\n      return result;\n    },\n\n    /**\n     * Removes all values from this property\n     */\n    removeAllValues: function() {\n      if (this._values) {\n        this._values.length = 0;\n      }\n      this.jCal.length = 3;\n    },\n\n    /**\n     * Sets the values of the property.  Will overwrite the existing values.\n     * This can only be used for multi-value properties.\n     *\n     * @param {Array} values    An array of values\n     */\n    setValues: function(values) {\n      if (!this.isMultiValue) {\n        throw new Error(\n          this.name + ': does not not support mulitValue.\\n' +\n          'override isMultiValue'\n        );\n      }\n\n      var len = values.length;\n      var i = 0;\n      this.removeAllValues();\n\n      if (len > 0 &&\n          typeof(values[0]) === 'object' &&\n          'icaltype' in values[0]) {\n        this.resetType(values[0].icaltype);\n      }\n\n      if (this.isDecorated) {\n        for (; i < len; i++) {\n          this._setDecoratedValue(values[i], i);\n        }\n      } else {\n        for (; i < len; i++) {\n          this.jCal[VALUE_INDEX + i] = values[i];\n        }\n      }\n    },\n\n    /**\n     * Sets the current value of the property. If this is a multi-value\n     * property, all other values will be removed.\n     *\n     * @param {String|Object} value     New property value.\n     */\n    setValue: function(value) {\n      this.removeAllValues();\n      if (typeof(value) === 'object' && 'icaltype' in value) {\n        this.resetType(value.icaltype);\n      }\n\n      if (this.isDecorated) {\n        this._setDecoratedValue(value, 0);\n      } else {\n        this.jCal[VALUE_INDEX] = value;\n      }\n    },\n\n    /**\n     * Returns the Object representation of this component. The returned object\n     * is a live jCal object and should be cloned if modified.\n     * @return {Object}\n     */\n    toJSON: function() {\n      return this.jCal;\n    },\n\n    /**\n     * The string representation of this component.\n     * @return {String}\n     */\n    toICALString: function() {\n      return ICAL.stringify.property(\n        this.jCal, this._designSet, true\n      );\n    }\n  };\n\n  /**\n   * Create an {@link ICAL.Property} by parsing the passed iCalendar string.\n   *\n   * @param {String} str                        The iCalendar string to parse\n   * @param {ICAL.design.designSet=} designSet  The design data to use for this property\n   * @return {ICAL.Property}                    The created iCalendar property\n   */\n  Property.fromString = function(str, designSet) {\n    return new Property(ICAL.parse.property(str, designSet));\n  };\n\n  return Property;\n}());\n/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\n * Portions Copyright (C) Philipp Kewisch, 2011-2015 */\n\n\n/**\n * This symbol is further described later on\n * @ignore\n */\nICAL.UtcOffset = (function() {\n\n  /**\n   * @classdesc\n   * This class represents the \"duration\" value type, with various calculation\n   * and manipulation methods.\n   *\n   * @class\n   * @alias ICAL.UtcOffset\n   * @param {Object} aData          An object with members of the utc offset\n   * @param {Number=} aData.hours   The hours for the utc offset\n   * @param {Number=} aData.minutes The minutes in the utc offset\n   * @param {Number=} aData.factor  The factor for the utc-offset, either -1 or 1\n   */\n  function UtcOffset(aData) {\n    this.fromData(aData);\n  }\n\n  UtcOffset.prototype = {\n\n    /**\n     * The hours in the utc-offset\n     * @type {Number}\n     */\n    hours: 0,\n\n    /**\n     * The minutes in the utc-offset\n     * @type {Number}\n     */\n    minutes: 0,\n\n    /**\n     * The sign of the utc offset, 1 for positive offset, -1 for negative\n     * offsets.\n     * @type {Number}\n     */\n    factor: 1,\n\n    /**\n     * The type name, to be used in the jCal object.\n     * @constant\n     * @type {String}\n     * @default \"utc-offset\"\n     */\n    icaltype: \"utc-offset\",\n\n    /**\n     * Returns a clone of the utc offset object.\n     *\n     * @return {ICAL.UtcOffset}     The cloned object\n     */\n    clone: function() {\n      return ICAL.UtcOffset.fromSeconds(this.toSeconds());\n    },\n\n    /**\n     * Sets up the current instance using members from the passed data object.\n     *\n     * @param {Object} aData          An object with members of the utc offset\n     * @param {Number=} aData.hours   The hours for the utc offset\n     * @param {Number=} aData.minutes The minutes in the utc offset\n     * @param {Number=} aData.factor  The factor for the utc-offset, either -1 or 1\n     */\n    fromData: function(aData) {\n      if (aData) {\n        for (var key in aData) {\n          /* istanbul ignore else */\n          if (aData.hasOwnProperty(key)) {\n            this[key] = aData[key];\n          }\n        }\n      }\n      this._normalize();\n    },\n\n    /**\n     * Sets up the current instance from the given seconds value. The seconds\n     * value is truncated to the minute. Offsets are wrapped when the world\n     * ends, the hour after UTC+14:00 is UTC-12:00.\n     *\n     * @param {Number} aSeconds         The seconds to convert into an offset\n     */\n    fromSeconds: function(aSeconds) {\n      var secs = Math.abs(aSeconds);\n\n      this.factor = aSeconds < 0 ? -1 : 1;\n      this.hours = ICAL.helpers.trunc(secs / 3600);\n\n      secs -= (this.hours * 3600);\n      this.minutes = ICAL.helpers.trunc(secs / 60);\n      return this;\n    },\n\n    /**\n     * Convert the current offset to a value in seconds\n     *\n     * @return {Number}                 The offset in seconds\n     */\n    toSeconds: function() {\n      return this.factor * (60 * this.minutes + 3600 * this.hours);\n    },\n\n    /**\n     * Compare this utc offset with another one.\n     *\n     * @param {ICAL.UtcOffset} other        The other offset to compare with\n     * @return {Number}                     -1, 0 or 1 for less/equal/greater\n     */\n    compare: function icaltime_compare(other) {\n      var a = this.toSeconds();\n      var b = other.toSeconds();\n      return (a > b) - (b > a);\n    },\n\n    _normalize: function() {\n      // Range: 97200 seconds (with 1 hour inbetween)\n      var secs = this.toSeconds();\n      var factor = this.factor;\n      while (secs < -43200) { // = UTC-12:00\n        secs += 97200;\n      }\n      while (secs > 50400) { // = UTC+14:00\n        secs -= 97200;\n      }\n\n      this.fromSeconds(secs);\n\n      // Avoid changing the factor when on zero seconds\n      if (secs == 0) {\n        this.factor = factor;\n      }\n    },\n\n    /**\n     * The iCalendar string representation of this utc-offset.\n     * @return {String}\n     */\n    toICALString: function() {\n      return ICAL.design.icalendar.value['utc-offset'].toICAL(this.toString());\n    },\n\n    /**\n     * The string representation of this utc-offset.\n     * @return {String}\n     */\n    toString: function toString() {\n      return (this.factor == 1 ? \"+\" : \"-\") +\n              ICAL.helpers.pad2(this.hours) + ':' +\n              ICAL.helpers.pad2(this.minutes);\n    }\n  };\n\n  /**\n   * Creates a new {@link ICAL.UtcOffset} instance from the passed string.\n   *\n   * @param {String} aString    The string to parse\n   * @return {ICAL.Duration}    The created utc-offset instance\n   */\n  UtcOffset.fromString = function(aString) {\n    // -05:00\n    var options = {};\n    //TODO: support seconds per rfc5545 ?\n    options.factor = (aString[0] === '+') ? 1 : -1;\n    options.hours = ICAL.helpers.strictParseInt(aString.substr(1, 2));\n    options.minutes = ICAL.helpers.strictParseInt(aString.substr(4, 2));\n\n    return new ICAL.UtcOffset(options);\n  };\n\n  /**\n   * Creates a new {@link ICAL.UtcOffset} instance from the passed seconds\n   * value.\n   *\n   * @param {Number} aSeconds       The number of seconds to convert\n   */\n  UtcOffset.fromSeconds = function(aSeconds) {\n    var instance = new UtcOffset();\n    instance.fromSeconds(aSeconds);\n    return instance;\n  };\n\n  return UtcOffset;\n}());\n/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\n * Portions Copyright (C) Philipp Kewisch, 2011-2015 */\n\n\n/**\n * This symbol is further described later on\n * @ignore\n */\nICAL.Binary = (function() {\n\n  /**\n   * @classdesc\n   * Represents the BINARY value type, which contains extra methods for\n   * encoding and decoding.\n   *\n   * @class\n   * @alias ICAL.Binary\n   * @param {String} aValue     The binary data for this value\n   */\n  function Binary(aValue) {\n    this.value = aValue;\n  }\n\n  Binary.prototype = {\n    /**\n     * The type name, to be used in the jCal object.\n     * @default \"binary\"\n     * @constant\n     */\n    icaltype: \"binary\",\n\n    /**\n     * Base64 decode the current value\n     *\n     * @return {String}         The base64-decoded value\n     */\n    decodeValue: function decodeValue() {\n      return this._b64_decode(this.value);\n    },\n\n    /**\n     * Encodes the passed parameter with base64 and sets the internal\n     * value to the result.\n     *\n     * @param {String} aValue      The raw binary value to encode\n     */\n    setEncodedValue: function setEncodedValue(aValue) {\n      this.value = this._b64_encode(aValue);\n    },\n\n    _b64_encode: function base64_encode(data) {\n      // http://kevin.vanzonneveld.net\n      // +   original by: Tyler Akins (http://rumkin.com)\n      // +   improved by: Bayron Guevara\n      // +   improved by: Thunder.m\n      // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)\n      // +   bugfixed by: Pellentesque Malesuada\n      // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)\n      // +   improved by: Rafa\u0142 Kukawski (http://kukawski.pl)\n      // *     example 1: base64_encode('Kevin van Zonneveld');\n      // *     returns 1: 'S2V2aW4gdmFuIFpvbm5ldmVsZA=='\n      // mozilla has this native\n      // - but breaks in 2.0.0.12!\n      //if (typeof this.window['atob'] == 'function') {\n      //    return atob(data);\n      //}\n      var b64 = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\" +\n                \"abcdefghijklmnopqrstuvwxyz0123456789+/=\";\n      var o1, o2, o3, h1, h2, h3, h4, bits, i = 0,\n        ac = 0,\n        enc = \"\",\n        tmp_arr = [];\n\n      if (!data) {\n        return data;\n      }\n\n      do { // pack three octets into four hexets\n        o1 = data.charCodeAt(i++);\n        o2 = data.charCodeAt(i++);\n        o3 = data.charCodeAt(i++);\n\n        bits = o1 << 16 | o2 << 8 | o3;\n\n        h1 = bits >> 18 & 0x3f;\n        h2 = bits >> 12 & 0x3f;\n        h3 = bits >> 6 & 0x3f;\n        h4 = bits & 0x3f;\n\n        // use hexets to index into b64, and append result to encoded string\n        tmp_arr[ac++] = b64.charAt(h1) + b64.charAt(h2) + b64.charAt(h3) + b64.charAt(h4);\n      } while (i < data.length);\n\n      enc = tmp_arr.join('');\n\n      var r = data.length % 3;\n\n      return (r ? enc.slice(0, r - 3) : enc) + '==='.slice(r || 3);\n\n    },\n\n    _b64_decode: function base64_decode(data) {\n      // http://kevin.vanzonneveld.net\n      // +   original by: Tyler Akins (http://rumkin.com)\n      // +   improved by: Thunder.m\n      // +      input by: Aman Gupta\n      // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)\n      // +   bugfixed by: Onno Marsman\n      // +   bugfixed by: Pellentesque Malesuada\n      // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)\n      // +      input by: Brett Zamir (http://brett-zamir.me)\n      // +   bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)\n      // *     example 1: base64_decode('S2V2aW4gdmFuIFpvbm5ldmVsZA==');\n      // *     returns 1: 'Kevin van Zonneveld'\n      // mozilla has this native\n      // - but breaks in 2.0.0.12!\n      //if (typeof this.window['btoa'] == 'function') {\n      //    return btoa(data);\n      //}\n      var b64 = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\" +\n                \"abcdefghijklmnopqrstuvwxyz0123456789+/=\";\n      var o1, o2, o3, h1, h2, h3, h4, bits, i = 0,\n        ac = 0,\n        dec = \"\",\n        tmp_arr = [];\n\n      if (!data) {\n        return data;\n      }\n\n      data += '';\n\n      do { // unpack four hexets into three octets using index points in b64\n        h1 = b64.indexOf(data.charAt(i++));\n        h2 = b64.indexOf(data.charAt(i++));\n        h3 = b64.indexOf(data.charAt(i++));\n        h4 = b64.indexOf(data.charAt(i++));\n\n        bits = h1 << 18 | h2 << 12 | h3 << 6 | h4;\n\n        o1 = bits >> 16 & 0xff;\n        o2 = bits >> 8 & 0xff;\n        o3 = bits & 0xff;\n\n        if (h3 == 64) {\n          tmp_arr[ac++] = String.fromCharCode(o1);\n        } else if (h4 == 64) {\n          tmp_arr[ac++] = String.fromCharCode(o1, o2);\n        } else {\n          tmp_arr[ac++] = String.fromCharCode(o1, o2, o3);\n        }\n      } while (i < data.length);\n\n      dec = tmp_arr.join('');\n\n      return dec;\n    },\n\n    /**\n     * The string representation of this value\n     * @return {String}\n     */\n    toString: function() {\n      return this.value;\n    }\n  };\n\n  /**\n   * Creates a binary value from the given string.\n   *\n   * @param {String} aString        The binary value string\n   * @return {ICAL.Binary}          The binary value instance\n   */\n  Binary.fromString = function(aString) {\n    return new Binary(aString);\n  };\n\n  return Binary;\n}());\n/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\n * Portions Copyright (C) Philipp Kewisch, 2011-2015 */\n\n\n\n(function() {\n  /**\n   * @classdesc\n   * This class represents the \"period\" value type, with various calculation\n   * and manipulation methods.\n   *\n   * @description\n   * The passed data object cannot contain both and end date and a duration.\n   *\n   * @class\n   * @param {Object} aData                  An object with members of the period\n   * @param {ICAL.Time=} aData.start        The start of the period\n   * @param {ICAL.Time=} aData.end          The end of the period\n   * @param {ICAL.Duration=} aData.duration The duration of the period\n   */\n  ICAL.Period = function icalperiod(aData) {\n    this.wrappedJSObject = this;\n\n    if (aData && 'start' in aData) {\n      if (aData.start && !(aData.start instanceof ICAL.Time)) {\n        throw new TypeError('.start must be an instance of ICAL.Time');\n      }\n      this.start = aData.start;\n    }\n\n    if (aData && aData.end && aData.duration) {\n      throw new Error('cannot accept both end and duration');\n    }\n\n    if (aData && 'end' in aData) {\n      if (aData.end && !(aData.end instanceof ICAL.Time)) {\n        throw new TypeError('.end must be an instance of ICAL.Time');\n      }\n      this.end = aData.end;\n    }\n\n    if (aData && 'duration' in aData) {\n      if (aData.duration && !(aData.duration instanceof ICAL.Duration)) {\n        throw new TypeError('.duration must be an instance of ICAL.Duration');\n      }\n      this.duration = aData.duration;\n    }\n  };\n\n  ICAL.Period.prototype = {\n\n    /**\n     * The start of the period\n     * @type {ICAL.Time}\n     */\n    start: null,\n\n    /**\n     * The end of the period\n     * @type {ICAL.Time}\n     */\n    end: null,\n\n    /**\n     * The duration of the period\n     * @type {ICAL.Duration}\n     */\n    duration: null,\n\n    /**\n     * The class identifier.\n     * @constant\n     * @type {String}\n     * @default \"icalperiod\"\n     */\n    icalclass: \"icalperiod\",\n\n    /**\n     * The type name, to be used in the jCal object.\n     * @constant\n     * @type {String}\n     * @default \"period\"\n     */\n    icaltype: \"period\",\n\n    /**\n     * Returns a clone of the duration object.\n     *\n     * @return {ICAL.Period}      The cloned object\n     */\n    clone: function() {\n      return ICAL.Period.fromData({\n        start: this.start ? this.start.clone() : null,\n        end: this.end ? this.end.clone() : null,\n        duration: this.duration ? this.duration.clone() : null\n      });\n    },\n\n    /**\n     * Calculates the duration of the period, either directly or by subtracting\n     * start from end date.\n     *\n     * @return {ICAL.Duration}      The calculated duration\n     */\n    getDuration: function duration() {\n      if (this.duration) {\n        return this.duration;\n      } else {\n        return this.end.subtractDate(this.start);\n      }\n    },\n\n    /**\n     * Calculates the end date of the period, either directly or by adding\n     * duration to start date.\n     *\n     * @return {ICAL.Time}          The calculated end date\n     */\n    getEnd: function() {\n      if (this.end) {\n        return this.end;\n      } else {\n        var end = this.start.clone();\n        end.addDuration(this.duration);\n        return end;\n      }\n    },\n\n    /**\n     * The string representation of this period.\n     * @return {String}\n     */\n    toString: function toString() {\n      return this.start + \"/\" + (this.end || this.duration);\n    },\n\n    /**\n     * The jCal representation of this period type.\n     * @return {Object}\n     */\n    toJSON: function() {\n      return [this.start.toString(), (this.end || this.duration).toString()];\n    },\n\n    /**\n     * The iCalendar string representation of this period.\n     * @return {String}\n     */\n    toICALString: function() {\n      return this.start.toICALString() + \"/\" +\n             (this.end || this.duration).toICALString();\n    }\n  };\n\n  /**\n   * Creates a new {@link ICAL.Period} instance from the passed string.\n   *\n   * @param {String} str            The string to parse\n   * @param {ICAL.Property} prop    The property this period will be on\n   * @return {ICAL.Period}          The created period instance\n   */\n  ICAL.Period.fromString = function fromString(str, prop) {\n    var parts = str.split('/');\n\n    if (parts.length !== 2) {\n      throw new Error(\n        'Invalid string value: \"' + str + '\" must contain a \"/\" char.'\n      );\n    }\n\n    var options = {\n      start: ICAL.Time.fromDateTimeString(parts[0], prop)\n    };\n\n    var end = parts[1];\n\n    if (ICAL.Duration.isValueString(end)) {\n      options.duration = ICAL.Duration.fromString(end);\n    } else {\n      options.end = ICAL.Time.fromDateTimeString(end, prop);\n    }\n\n    return new ICAL.Period(options);\n  };\n\n  /**\n   * Creates a new {@link ICAL.Period} instance from the given data object.\n   * The passed data object cannot contain both and end date and a duration.\n   *\n   * @param {Object} aData                  An object with members of the period\n   * @param {ICAL.Time=} aData.start        The start of the period\n   * @param {ICAL.Time=} aData.end          The end of the period\n   * @param {ICAL.Duration=} aData.duration The duration of the period\n   * @return {ICAL.Period}                  The period instance\n   */\n  ICAL.Period.fromData = function fromData(aData) {\n    return new ICAL.Period(aData);\n  };\n\n  /**\n   * Returns a new period instance from the given jCal data array. The first\n   * member is always the start date string, the second member is either a\n   * duration or end date string.\n   *\n   * @param {Array<String,String>} aData    The jCal data array\n   * @param {ICAL.Property} aProp           The property this jCal data is on\n   * @param {Boolean} aLenient              If true, data value can be both date and date-time\n   * @return {ICAL.Period}                  The period instance\n   */\n  ICAL.Period.fromJSON = function(aData, aProp, aLenient) {\n    function fromDateOrDateTimeString(aValue, aProp) {\n      if (aLenient) {\n        return ICAL.Time.fromString(aValue, aProp);\n      } else {\n        return ICAL.Time.fromDateTimeString(aValue, aProp);\n      }\n    }\n\n    if (ICAL.Duration.isValueString(aData[1])) {\n      return ICAL.Period.fromData({\n        start: fromDateOrDateTimeString(aData[0], aProp),\n        duration: ICAL.Duration.fromString(aData[1])\n      });\n    } else {\n      return ICAL.Period.fromData({\n        start: fromDateOrDateTimeString(aData[0], aProp),\n        end: fromDateOrDateTimeString(aData[1], aProp)\n      });\n    }\n  };\n})();\n/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\n * Portions Copyright (C) Philipp Kewisch, 2011-2015 */\n\n\n\n(function() {\n  var DURATION_LETTERS = /([PDWHMTS]{1,1})/;\n\n  /**\n   * @classdesc\n   * This class represents the \"duration\" value type, with various calculation\n   * and manipulation methods.\n   *\n   * @class\n   * @alias ICAL.Duration\n   * @param {Object} data               An object with members of the duration\n   * @param {Number} data.weeks         Duration in weeks\n   * @param {Number} data.days          Duration in days\n   * @param {Number} data.hours         Duration in hours\n   * @param {Number} data.minutes       Duration in minutes\n   * @param {Number} data.seconds       Duration in seconds\n   * @param {Boolean} data.isNegative   If true, the duration is negative\n   */\n  ICAL.Duration = function icalduration(data) {\n    this.wrappedJSObject = this;\n    this.fromData(data);\n  };\n\n  ICAL.Duration.prototype = {\n    /**\n     * The weeks in this duration\n     * @type {Number}\n     * @default 0\n     */\n    weeks: 0,\n\n    /**\n     * The days in this duration\n     * @type {Number}\n     * @default 0\n     */\n    days: 0,\n\n    /**\n     * The days in this duration\n     * @type {Number}\n     * @default 0\n     */\n    hours: 0,\n\n    /**\n     * The minutes in this duration\n     * @type {Number}\n     * @default 0\n     */\n    minutes: 0,\n\n    /**\n     * The seconds in this duration\n     * @type {Number}\n     * @default 0\n     */\n    seconds: 0,\n\n    /**\n     * The seconds in this duration\n     * @type {Boolean}\n     * @default false\n     */\n    isNegative: false,\n\n    /**\n     * The class identifier.\n     * @constant\n     * @type {String}\n     * @default \"icalduration\"\n     */\n    icalclass: \"icalduration\",\n\n    /**\n     * The type name, to be used in the jCal object.\n     * @constant\n     * @type {String}\n     * @default \"duration\"\n     */\n    icaltype: \"duration\",\n\n    /**\n     * Returns a clone of the duration object.\n     *\n     * @return {ICAL.Duration}      The cloned object\n     */\n    clone: function clone() {\n      return ICAL.Duration.fromData(this);\n    },\n\n    /**\n     * The duration value expressed as a number of seconds.\n     *\n     * @return {Number}             The duration value in seconds\n     */\n    toSeconds: function toSeconds() {\n      var seconds = this.seconds + 60 * this.minutes + 3600 * this.hours +\n                    86400 * this.days + 7 * 86400 * this.weeks;\n      return (this.isNegative ? -seconds : seconds);\n    },\n\n    /**\n     * Reads the passed seconds value into this duration object. Afterwards,\n     * members like {@link ICAL.Duration#days days} and {@link ICAL.Duration#weeks weeks} will be set up\n     * accordingly.\n     *\n     * @param {Number} aSeconds     The duration value in seconds\n     * @return {ICAL.Duration}      Returns this instance\n     */\n    fromSeconds: function fromSeconds(aSeconds) {\n      var secs = Math.abs(aSeconds);\n\n      this.isNegative = (aSeconds < 0);\n      this.days = ICAL.helpers.trunc(secs / 86400);\n\n      // If we have a flat number of weeks, use them.\n      if (this.days % 7 == 0) {\n        this.weeks = this.days / 7;\n        this.days = 0;\n      } else {\n        this.weeks = 0;\n      }\n\n      secs -= (this.days + 7 * this.weeks) * 86400;\n\n      this.hours = ICAL.helpers.trunc(secs / 3600);\n      secs -= this.hours * 3600;\n\n      this.minutes = ICAL.helpers.trunc(secs / 60);\n      secs -= this.minutes * 60;\n\n      this.seconds = secs;\n      return this;\n    },\n\n    /**\n     * Sets up the current instance using members from the passed data object.\n     *\n     * @param {Object} aData               An object with members of the duration\n     * @param {Number} aData.weeks         Duration in weeks\n     * @param {Number} aData.days          Duration in days\n     * @param {Number} aData.hours         Duration in hours\n     * @param {Number} aData.minutes       Duration in minutes\n     * @param {Number} aData.seconds       Duration in seconds\n     * @param {Boolean} aData.isNegative   If true, the duration is negative\n     */\n    fromData: function fromData(aData) {\n      var propsToCopy = [\"weeks\", \"days\", \"hours\",\n                         \"minutes\", \"seconds\", \"isNegative\"];\n      for (var key in propsToCopy) {\n        /* istanbul ignore if */\n        if (!propsToCopy.hasOwnProperty(key)) {\n          continue;\n        }\n        var prop = propsToCopy[key];\n        if (aData && prop in aData) {\n          this[prop] = aData[prop];\n        } else {\n          this[prop] = 0;\n        }\n      }\n    },\n\n    /**\n     * Resets the duration instance to the default values, i.e. PT0S\n     */\n    reset: function reset() {\n      this.isNegative = false;\n      this.weeks = 0;\n      this.days = 0;\n      this.hours = 0;\n      this.minutes = 0;\n      this.seconds = 0;\n    },\n\n    /**\n     * Compares the duration instance with another one.\n     *\n     * @param {ICAL.Duration} aOther        The instance to compare with\n     * @return {Number}                     -1, 0 or 1 for less/equal/greater\n     */\n    compare: function compare(aOther) {\n      var thisSeconds = this.toSeconds();\n      var otherSeconds = aOther.toSeconds();\n      return (thisSeconds > otherSeconds) - (thisSeconds < otherSeconds);\n    },\n\n    /**\n     * Normalizes the duration instance. For example, a duration with a value\n     * of 61 seconds will be normalized to 1 minute and 1 second.\n     */\n    normalize: function normalize() {\n      this.fromSeconds(this.toSeconds());\n    },\n\n    /**\n     * The string representation of this duration.\n     * @return {String}\n     */\n    toString: function toString() {\n      if (this.toSeconds() == 0) {\n        return \"PT0S\";\n      } else {\n        var str = \"\";\n        if (this.isNegative) str += \"-\";\n        str += \"P\";\n        if (this.weeks) str += this.weeks + \"W\";\n        if (this.days) str += this.days + \"D\";\n\n        if (this.hours || this.minutes || this.seconds) {\n          str += \"T\";\n          if (this.hours) str += this.hours + \"H\";\n          if (this.minutes) str += this.minutes + \"M\";\n          if (this.seconds) str += this.seconds + \"S\";\n        }\n        return str;\n      }\n    },\n\n    /**\n     * The iCalendar string representation of this duration.\n     * @return {String}\n     */\n    toICALString: function() {\n      return this.toString();\n    }\n  };\n\n  /**\n   * Returns a new ICAL.Duration instance from the passed seconds value.\n   *\n   * @param {Number} aSeconds       The seconds to create the instance from\n   * @return {ICAL.Duration}        The newly created duration instance\n   */\n  ICAL.Duration.fromSeconds = function icalduration_from_seconds(aSeconds) {\n    return (new ICAL.Duration()).fromSeconds(aSeconds);\n  };\n\n  /**\n   * Internal helper function to handle a chunk of a duration.\n   *\n   * @param {String} letter type of duration chunk\n   * @param {String} number numeric value or -/+\n   * @param {Object} dict target to assign values to\n   */\n  function parseDurationChunk(letter, number, object) {\n    var type;\n    switch (letter) {\n      case 'P':\n        if (number && number === '-') {\n          object.isNegative = true;\n        } else {\n          object.isNegative = false;\n        }\n        // period\n        break;\n      case 'D':\n        type = 'days';\n        break;\n      case 'W':\n        type = 'weeks';\n        break;\n      case 'H':\n        type = 'hours';\n        break;\n      case 'M':\n        type = 'minutes';\n        break;\n      case 'S':\n        type = 'seconds';\n        break;\n      default:\n        // Not a valid chunk\n        return 0;\n    }\n\n    if (type) {\n      if (!number && number !== 0) {\n        throw new Error(\n          'invalid duration value: Missing number before \"' + letter + '\"'\n        );\n      }\n      var num = parseInt(number, 10);\n      if (ICAL.helpers.isStrictlyNaN(num)) {\n        throw new Error(\n          'invalid duration value: Invalid number \"' + number + '\" before \"' + letter + '\"'\n        );\n      }\n      object[type] = num;\n    }\n\n    return 1;\n  }\n\n  /**\n   * Checks if the given string is an iCalendar duration value.\n   *\n   * @param {String} value      The raw ical value\n   * @return {Boolean}          True, if the given value is of the\n   *                              duration ical type\n   */\n  ICAL.Duration.isValueString = function(string) {\n    return (string[0] === 'P' || string[1] === 'P');\n  };\n\n  /**\n   * Creates a new {@link ICAL.Duration} instance from the passed string.\n   *\n   * @param {String} aStr       The string to parse\n   * @return {ICAL.Duration}    The created duration instance\n   */\n  ICAL.Duration.fromString = function icalduration_from_string(aStr) {\n    var pos = 0;\n    var dict = Object.create(null);\n    var chunks = 0;\n\n    while ((pos = aStr.search(DURATION_LETTERS)) !== -1) {\n      var type = aStr[pos];\n      var numeric = aStr.substr(0, pos);\n      aStr = aStr.substr(pos + 1);\n\n      chunks += parseDurationChunk(type, numeric, dict);\n    }\n\n    if (chunks < 2) {\n      // There must be at least a chunk with \"P\" and some unit chunk\n      throw new Error(\n        'invalid duration value: Not enough duration components in \"' + aStr + '\"'\n      );\n    }\n\n    return new ICAL.Duration(dict);\n  };\n\n  /**\n   * Creates a new ICAL.Duration instance from the given data object.\n   *\n   * @param {Object} aData               An object with members of the duration\n   * @param {Number} aData.weeks         Duration in weeks\n   * @param {Number} aData.days          Duration in days\n   * @param {Number} aData.hours         Duration in hours\n   * @param {Number} aData.minutes       Duration in minutes\n   * @param {Number} aData.seconds       Duration in seconds\n   * @param {Boolean} aData.isNegative   If true, the duration is negative\n   * @return {ICAL.Duration}             The createad duration instance\n   */\n  ICAL.Duration.fromData = function icalduration_from_data(aData) {\n    return new ICAL.Duration(aData);\n  };\n})();\n/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\n * Portions Copyright (C) Philipp Kewisch, 2011-2012 */\n\n\n\n(function() {\n  var OPTIONS = [\"tzid\", \"location\", \"tznames\",\n                 \"latitude\", \"longitude\"];\n\n  /**\n   * @classdesc\n   * Timezone representation, created by passing in a tzid and component.\n   *\n   * @example\n   * var vcalendar;\n   * var timezoneComp = vcalendar.getFirstSubcomponent('vtimezone');\n   * var tzid = timezoneComp.getFirstPropertyValue('tzid');\n   *\n   * var timezone = new ICAL.Timezone({\n   *   component: timezoneComp,\n   *   tzid\n   * });\n   *\n   * @class\n   * @param {ICAL.Component|Object} data options for class\n   * @param {String|ICAL.Component} data.component\n   *        If data is a simple object, then this member can be set to either a\n   *        string containing the component data, or an already parsed\n   *        ICAL.Component\n   * @param {String} data.tzid      The timezone identifier\n   * @param {String} data.location  The timezone locationw\n   * @param {String} data.tznames   An alternative string representation of the\n   *                                  timezone\n   * @param {Number} data.latitude  The latitude of the timezone\n   * @param {Number} data.longitude The longitude of the timezone\n   */\n  ICAL.Timezone = function icaltimezone(data) {\n    this.wrappedJSObject = this;\n    this.fromData(data);\n  };\n\n  ICAL.Timezone.prototype = {\n\n    /**\n     * Timezone identifier\n     * @type {String}\n     */\n    tzid: \"\",\n\n    /**\n     * Timezone location\n     * @type {String}\n     */\n    location: \"\",\n\n    /**\n     * Alternative timezone name, for the string representation\n     * @type {String}\n     */\n    tznames: \"\",\n\n    /**\n     * The primary latitude for the timezone.\n     * @type {Number}\n     */\n    latitude: 0.0,\n\n    /**\n     * The primary longitude for the timezone.\n     * @type {Number}\n     */\n    longitude: 0.0,\n\n    /**\n     * The vtimezone component for this timezone.\n     * @type {ICAL.Component}\n     */\n    component: null,\n\n    /**\n     * The year this timezone has been expanded to. All timezone transition\n     * dates until this year are known and can be used for calculation\n     *\n     * @private\n     * @type {Number}\n     */\n    expandedUntilYear: 0,\n\n    /**\n     * The class identifier.\n     * @constant\n     * @type {String}\n     * @default \"icaltimezone\"\n     */\n    icalclass: \"icaltimezone\",\n\n    /**\n     * Sets up the current instance using members from the passed data object.\n     *\n     * @param {ICAL.Component|Object} aData options for class\n     * @param {String|ICAL.Component} aData.component\n     *        If aData is a simple object, then this member can be set to either a\n     *        string containing the component data, or an already parsed\n     *        ICAL.Component\n     * @param {String} aData.tzid      The timezone identifier\n     * @param {String} aData.location  The timezone locationw\n     * @param {String} aData.tznames   An alternative string representation of the\n     *                                  timezone\n     * @param {Number} aData.latitude  The latitude of the timezone\n     * @param {Number} aData.longitude The longitude of the timezone\n     */\n    fromData: function fromData(aData) {\n      this.expandedUntilYear = 0;\n      this.changes = [];\n\n      if (aData instanceof ICAL.Component) {\n        // Either a component is passed directly\n        this.component = aData;\n      } else {\n        // Otherwise the component may be in the data object\n        if (aData && \"component\" in aData) {\n          if (typeof aData.component == \"string\") {\n            // If a string was passed, parse it as a component\n            var jCal = ICAL.parse(aData.component);\n            this.component = new ICAL.Component(jCal);\n          } else if (aData.component instanceof ICAL.Component) {\n            // If it was a component already, then just set it\n            this.component = aData.component;\n          } else {\n            // Otherwise just null out the component\n            this.component = null;\n          }\n        }\n\n        // Copy remaining passed properties\n        for (var key in OPTIONS) {\n          /* istanbul ignore else */\n          if (OPTIONS.hasOwnProperty(key)) {\n            var prop = OPTIONS[key];\n            if (aData && prop in aData) {\n              this[prop] = aData[prop];\n            }\n          }\n        }\n      }\n\n      // If we have a component but no TZID, attempt to get it from the\n      // component's properties.\n      if (this.component instanceof ICAL.Component && !this.tzid) {\n        this.tzid = this.component.getFirstPropertyValue('tzid');\n      }\n\n      return this;\n    },\n\n    /**\n     * Finds the utcOffset the given time would occur in this timezone.\n     *\n     * @param {ICAL.Time} tt        The time to check for\n     * @return {Number} utc offset in seconds\n     */\n    utcOffset: function utcOffset(tt) {\n      if (this == ICAL.Timezone.utcTimezone || this == ICAL.Timezone.localTimezone) {\n        return 0;\n      }\n\n      this._ensureCoverage(tt.year);\n\n      if (!this.changes.length) {\n        return 0;\n      }\n\n      var tt_change = {\n        year: tt.year,\n        month: tt.month,\n        day: tt.day,\n        hour: tt.hour,\n        minute: tt.minute,\n        second: tt.second\n      };\n\n      var change_num = this._findNearbyChange(tt_change);\n      var change_num_to_use = -1;\n      var step = 1;\n\n      // TODO: replace with bin search?\n      for (;;) {\n        var change = ICAL.helpers.clone(this.changes[change_num], true);\n        if (change.utcOffset < change.prevUtcOffset) {\n          ICAL.Timezone.adjust_change(change, 0, 0, 0, change.utcOffset);\n        } else {\n          ICAL.Timezone.adjust_change(change, 0, 0, 0,\n                                          change.prevUtcOffset);\n        }\n\n        var cmp = ICAL.Timezone._compare_change_fn(tt_change, change);\n\n        if (cmp >= 0) {\n          change_num_to_use = change_num;\n        } else {\n          step = -1;\n        }\n\n        if (step == -1 && change_num_to_use != -1) {\n          break;\n        }\n\n        change_num += step;\n\n        if (change_num < 0) {\n          return 0;\n        }\n\n        if (change_num >= this.changes.length) {\n          break;\n        }\n      }\n\n      var zone_change = this.changes[change_num_to_use];\n      var utcOffset_change = zone_change.utcOffset - zone_change.prevUtcOffset;\n\n      if (utcOffset_change < 0 && change_num_to_use > 0) {\n        var tmp_change = ICAL.helpers.clone(zone_change, true);\n        ICAL.Timezone.adjust_change(tmp_change, 0, 0, 0,\n                                        tmp_change.prevUtcOffset);\n\n        if (ICAL.Timezone._compare_change_fn(tt_change, tmp_change) < 0) {\n          var prev_zone_change = this.changes[change_num_to_use - 1];\n\n          var want_daylight = false; // TODO\n\n          if (zone_change.is_daylight != want_daylight &&\n              prev_zone_change.is_daylight == want_daylight) {\n            zone_change = prev_zone_change;\n          }\n        }\n      }\n\n      // TODO return is_daylight?\n      return zone_change.utcOffset;\n    },\n\n    _findNearbyChange: function icaltimezone_find_nearby_change(change) {\n      // find the closest match\n      var idx = ICAL.helpers.binsearchInsert(\n        this.changes,\n        change,\n        ICAL.Timezone._compare_change_fn\n      );\n\n      if (idx >= this.changes.length) {\n        return this.changes.length - 1;\n      }\n\n      return idx;\n    },\n\n    _ensureCoverage: function(aYear) {\n      if (ICAL.Timezone._minimumExpansionYear == -1) {\n        var today = ICAL.Time.now();\n        ICAL.Timezone._minimumExpansionYear = today.year;\n      }\n\n      var changesEndYear = aYear;\n      if (changesEndYear < ICAL.Timezone._minimumExpansionYear) {\n        changesEndYear = ICAL.Timezone._minimumExpansionYear;\n      }\n\n      changesEndYear += ICAL.Timezone.EXTRA_COVERAGE;\n\n      if (changesEndYear > ICAL.Timezone.MAX_YEAR) {\n        changesEndYear = ICAL.Timezone.MAX_YEAR;\n      }\n\n      if (!this.changes.length || this.expandedUntilYear < aYear) {\n        var subcomps = this.component.getAllSubcomponents();\n        var compLen = subcomps.length;\n        var compIdx = 0;\n\n        for (; compIdx < compLen; compIdx++) {\n          this._expandComponent(\n            subcomps[compIdx], changesEndYear, this.changes\n          );\n        }\n\n        this.changes.sort(ICAL.Timezone._compare_change_fn);\n        this.expandedUntilYear = changesEndYear;\n      }\n    },\n\n    _expandComponent: function(aComponent, aYear, changes) {\n      if (!aComponent.hasProperty(\"dtstart\") ||\n          !aComponent.hasProperty(\"tzoffsetto\") ||\n          !aComponent.hasProperty(\"tzoffsetfrom\")) {\n        return null;\n      }\n\n      var dtstart = aComponent.getFirstProperty(\"dtstart\").getFirstValue();\n      var change;\n\n      function convert_tzoffset(offset) {\n        return offset.factor * (offset.hours * 3600 + offset.minutes * 60);\n      }\n\n      function init_changes() {\n        var changebase = {};\n        changebase.is_daylight = (aComponent.name == \"daylight\");\n        changebase.utcOffset = convert_tzoffset(\n          aComponent.getFirstProperty(\"tzoffsetto\").getFirstValue()\n        );\n\n        changebase.prevUtcOffset = convert_tzoffset(\n          aComponent.getFirstProperty(\"tzoffsetfrom\").getFirstValue()\n        );\n\n        return changebase;\n      }\n\n      if (!aComponent.hasProperty(\"rrule\") && !aComponent.hasProperty(\"rdate\")) {\n        change = init_changes();\n        change.year = dtstart.year;\n        change.month = dtstart.month;\n        change.day = dtstart.day;\n        change.hour = dtstart.hour;\n        change.minute = dtstart.minute;\n        change.second = dtstart.second;\n\n        ICAL.Timezone.adjust_change(change, 0, 0, 0,\n                                        -change.prevUtcOffset);\n        changes.push(change);\n      } else {\n        var props = aComponent.getAllProperties(\"rdate\");\n        for (var rdatekey in props) {\n          /* istanbul ignore if */\n          if (!props.hasOwnProperty(rdatekey)) {\n            continue;\n          }\n          var rdate = props[rdatekey];\n          var time = rdate.getFirstValue();\n          change = init_changes();\n\n          change.year = time.year;\n          change.month = time.month;\n          change.day = time.day;\n\n          if (time.isDate) {\n            change.hour = dtstart.hour;\n            change.minute = dtstart.minute;\n            change.second = dtstart.second;\n\n            if (dtstart.zone != ICAL.Timezone.utcTimezone) {\n              ICAL.Timezone.adjust_change(change, 0, 0, 0,\n                                              -change.prevUtcOffset);\n            }\n          } else {\n            change.hour = time.hour;\n            change.minute = time.minute;\n            change.second = time.second;\n\n            if (time.zone != ICAL.Timezone.utcTimezone) {\n              ICAL.Timezone.adjust_change(change, 0, 0, 0,\n                                              -change.prevUtcOffset);\n            }\n          }\n\n          changes.push(change);\n        }\n\n        var rrule = aComponent.getFirstProperty(\"rrule\");\n\n        if (rrule) {\n          rrule = rrule.getFirstValue();\n          change = init_changes();\n\n          if (rrule.until && rrule.until.zone == ICAL.Timezone.utcTimezone) {\n            rrule.until.adjust(0, 0, 0, change.prevUtcOffset);\n            rrule.until.zone = ICAL.Timezone.localTimezone;\n          }\n\n          var iterator = rrule.iterator(dtstart);\n\n          var occ;\n          while ((occ = iterator.next())) {\n            change = init_changes();\n            if (occ.year > aYear || !occ) {\n              break;\n            }\n\n            change.year = occ.year;\n            change.month = occ.month;\n            change.day = occ.day;\n            change.hour = occ.hour;\n            change.minute = occ.minute;\n            change.second = occ.second;\n            change.isDate = occ.isDate;\n\n            ICAL.Timezone.adjust_change(change, 0, 0, 0,\n                                            -change.prevUtcOffset);\n            changes.push(change);\n          }\n        }\n      }\n\n      return changes;\n    },\n\n    /**\n     * The string representation of this timezone.\n     * @return {String}\n     */\n    toString: function toString() {\n      return (this.tznames ? this.tznames : this.tzid);\n    }\n  };\n\n  ICAL.Timezone._compare_change_fn = function icaltimezone_compare_change_fn(a, b) {\n    if (a.year < b.year) return -1;\n    else if (a.year > b.year) return 1;\n\n    if (a.month < b.month) return -1;\n    else if (a.month > b.month) return 1;\n\n    if (a.day < b.day) return -1;\n    else if (a.day > b.day) return 1;\n\n    if (a.hour < b.hour) return -1;\n    else if (a.hour > b.hour) return 1;\n\n    if (a.minute < b.minute) return -1;\n    else if (a.minute > b.minute) return 1;\n\n    if (a.second < b.second) return -1;\n    else if (a.second > b.second) return 1;\n\n    return 0;\n  };\n\n  /**\n   * Convert the date/time from one zone to the next.\n   *\n   * @param {ICAL.Time} tt                  The time to convert\n   * @param {ICAL.Timezone} from_zone       The source zone to convert from\n   * @param {ICAL.Timezone} to_zone         The target zone to convert to\n   * @return {ICAL.Time}                    The converted date/time object\n   */\n  ICAL.Timezone.convert_time = function icaltimezone_convert_time(tt, from_zone, to_zone) {\n    if (tt.isDate ||\n        from_zone.tzid == to_zone.tzid ||\n        from_zone == ICAL.Timezone.localTimezone ||\n        to_zone == ICAL.Timezone.localTimezone) {\n      tt.zone = to_zone;\n      return tt;\n    }\n\n    var utcOffset = from_zone.utcOffset(tt);\n    tt.adjust(0, 0, 0, - utcOffset);\n\n    utcOffset = to_zone.utcOffset(tt);\n    tt.adjust(0, 0, 0, utcOffset);\n\n    return null;\n  };\n\n  /**\n   * Creates a new ICAL.Timezone instance from the passed data object.\n   *\n   * @param {ICAL.Component|Object} aData options for class\n   * @param {String|ICAL.Component} aData.component\n   *        If aData is a simple object, then this member can be set to either a\n   *        string containing the component data, or an already parsed\n   *        ICAL.Component\n   * @param {String} aData.tzid      The timezone identifier\n   * @param {String} aData.location  The timezone locationw\n   * @param {String} aData.tznames   An alternative string representation of the\n   *                                  timezone\n   * @param {Number} aData.latitude  The latitude of the timezone\n   * @param {Number} aData.longitude The longitude of the timezone\n   */\n  ICAL.Timezone.fromData = function icaltimezone_fromData(aData) {\n    var tt = new ICAL.Timezone();\n    return tt.fromData(aData);\n  };\n\n  /**\n   * The instance describing the UTC timezone\n   * @type {ICAL.Timezone}\n   * @constant\n   * @instance\n   */\n  ICAL.Timezone.utcTimezone = ICAL.Timezone.fromData({\n    tzid: \"UTC\"\n  });\n\n  /**\n   * The instance describing the local timezone\n   * @type {ICAL.Timezone}\n   * @constant\n   * @instance\n   */\n  ICAL.Timezone.localTimezone = ICAL.Timezone.fromData({\n    tzid: \"floating\"\n  });\n\n  /**\n   * Adjust a timezone change object.\n   * @private\n   * @param {Object} change     The timezone change object\n   * @param {Number} days       The extra amount of days\n   * @param {Number} hours      The extra amount of hours\n   * @param {Number} minutes    The extra amount of minutes\n   * @param {Number} seconds    The extra amount of seconds\n   */\n  ICAL.Timezone.adjust_change = function icaltimezone_adjust_change(change, days, hours, minutes, seconds) {\n    return ICAL.Time.prototype.adjust.call(\n      change,\n      days,\n      hours,\n      minutes,\n      seconds,\n      change\n    );\n  };\n\n  ICAL.Timezone._minimumExpansionYear = -1;\n  ICAL.Timezone.MAX_YEAR = 2035; // TODO this is because of time_t, which we don't need. Still usefull?\n  ICAL.Timezone.EXTRA_COVERAGE = 5;\n})();\n/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\n * Portions Copyright (C) Philipp Kewisch, 2011-2015 */\n\n\n/**\n * This symbol is further described later on\n * @ignore\n */\nICAL.TimezoneService = (function() {\n  var zones;\n\n  /**\n   * @classdesc\n   * Singleton class to contain timezones.  Right now its all manual registry in\n   * the future we may use this class to download timezone information or handle\n   * loading pre-expanded timezones.\n   *\n   * @namespace\n   * @alias ICAL.TimezoneService\n   */\n  var TimezoneService = {\n    get count() {\n      return Object.keys(zones).length;\n    },\n\n    reset: function() {\n      zones = Object.create(null);\n      var utc = ICAL.Timezone.utcTimezone;\n\n      zones.Z = utc;\n      zones.UTC = utc;\n      zones.GMT = utc;\n    },\n\n    /**\n     * Checks if timezone id has been registered.\n     *\n     * @param {String} tzid     Timezone identifier (e.g. America/Los_Angeles)\n     * @return {Boolean}        False, when not present\n     */\n    has: function(tzid) {\n      return !!zones[tzid];\n    },\n\n    /**\n     * Returns a timezone by its tzid if present.\n     *\n     * @param {String} tzid     Timezone identifier (e.g. America/Los_Angeles)\n     * @return {?ICAL.Timezone} The timezone, or null if not found\n     */\n    get: function(tzid) {\n      return zones[tzid];\n    },\n\n    /**\n     * Registers a timezone object or component.\n     *\n     * @param {String=} name\n     *        The name of the timezone. Defaults to the component's TZID if not\n     *        passed.\n     * @param {ICAL.Component|ICAL.Timezone} zone\n     *        The initialized zone or vtimezone.\n     */\n    register: function(name, timezone) {\n      if (name instanceof ICAL.Component) {\n        if (name.name === 'vtimezone') {\n          timezone = new ICAL.Timezone(name);\n          name = timezone.tzid;\n        }\n      }\n\n      if (timezone instanceof ICAL.Timezone) {\n        zones[name] = timezone;\n      } else {\n        throw new TypeError('timezone must be ICAL.Timezone or ICAL.Component');\n      }\n    },\n\n    /**\n     * Removes a timezone by its tzid from the list.\n     *\n     * @param {String} tzid     Timezone identifier (e.g. America/Los_Angeles)\n     * @return {?ICAL.Timezone} The removed timezone, or null if not registered\n     */\n    remove: function(tzid) {\n      return (delete zones[tzid]);\n    }\n  };\n\n  // initialize defaults\n  TimezoneService.reset();\n\n  return TimezoneService;\n}());\n/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\n * Portions Copyright (C) Philipp Kewisch, 2011-2015 */\n\n\n\n(function() {\n\n  /**\n   * @classdesc\n   * iCalendar Time representation (similar to JS Date object).  Fully\n   * independent of system (OS) timezone / time.  Unlike JS Date, the month\n   * January is 1, not zero.\n   *\n   * @example\n   * var time = new ICAL.Time({\n   *   year: 2012,\n   *   month: 10,\n   *   day: 11\n   *   minute: 0,\n   *   second: 0,\n   *   isDate: false\n   * });\n   *\n   *\n   * @alias ICAL.Time\n   * @class\n   * @param {Object} data           Time initialization\n   * @param {Number=} data.year     The year for this date\n   * @param {Number=} data.month    The month for this date\n   * @param {Number=} data.day      The day for this date\n   * @param {Number=} data.hour     The hour for this date\n   * @param {Number=} data.minute   The minute for this date\n   * @param {Number=} data.second   The second for this date\n   * @param {Boolean=} data.isDate  If true, the instance represents a date (as\n   *                                  opposed to a date-time)\n   * @param {ICAL.Timezone} zone timezone this position occurs in\n   */\n  ICAL.Time = function icaltime(data, zone) {\n    this.wrappedJSObject = this;\n    var time = this._time = Object.create(null);\n\n    /* time defaults */\n    time.year = 0;\n    time.month = 1;\n    time.day = 1;\n    time.hour = 0;\n    time.minute = 0;\n    time.second = 0;\n    time.isDate = false;\n\n    this.fromData(data, zone);\n  };\n\n  ICAL.Time._dowCache = {};\n  ICAL.Time._wnCache = {};\n\n  ICAL.Time.prototype = {\n\n    /**\n     * The class identifier.\n     * @constant\n     * @type {String}\n     * @default \"icaltime\"\n     */\n    icalclass: \"icaltime\",\n    _cachedUnixTime: null,\n\n    /**\n     * The type name, to be used in the jCal object. This value may change and\n     * is strictly defined by the {@link ICAL.Time#isDate isDate} member.\n     * @readonly\n     * @type {String}\n     * @default \"date-time\"\n     */\n    get icaltype() {\n      return this.isDate ? 'date' : 'date-time';\n    },\n\n    /**\n     * The timezone for this time.\n     * @type {ICAL.Timezone}\n     */\n    zone: null,\n\n    /**\n     * Internal uses to indicate that a change has been made and the next read\n     * operation must attempt to normalize the value (for example changing the\n     * day to 33).\n     *\n     * @type {Boolean}\n     * @private\n     */\n    _pendingNormalization: false,\n\n    /**\n     * Returns a clone of the time object.\n     *\n     * @return {ICAL.Time}              The cloned object\n     */\n    clone: function() {\n      return new ICAL.Time(this._time, this.zone);\n    },\n\n    /**\n     * Reset the time instance to epoch time\n     */\n    reset: function icaltime_reset() {\n      this.fromData(ICAL.Time.epochTime);\n      this.zone = ICAL.Timezone.utcTimezone;\n    },\n\n    /**\n     * Reset the time instance to the given date/time values.\n     *\n     * @param {Number} year             The year to set\n     * @param {Number} month            The month to set\n     * @param {Number} day              The day to set\n     * @param {Number} hour             The hour to set\n     * @param {Number} minute           The minute to set\n     * @param {Number} second           The second to set\n     * @param {ICAL.Timezone} timezone  The timezone to set\n     */\n    resetTo: function icaltime_resetTo(year, month, day,\n                                       hour, minute, second, timezone) {\n      this.fromData({\n        year: year,\n        month: month,\n        day: day,\n        hour: hour,\n        minute: minute,\n        second: second,\n        zone: timezone\n      });\n    },\n\n    /**\n     * Set up the current instance from the Javascript date value.\n     *\n     * @param {?Date} aDate     The Javascript Date to read, or null to reset\n     * @param {Boolean} useUTC  If true, the UTC values of the date will be used\n     */\n    fromJSDate: function icaltime_fromJSDate(aDate, useUTC) {\n      if (!aDate) {\n        this.reset();\n      } else {\n        if (useUTC) {\n          this.zone = ICAL.Timezone.utcTimezone;\n          this.year = aDate.getUTCFullYear();\n          this.month = aDate.getUTCMonth() + 1;\n          this.day = aDate.getUTCDate();\n          this.hour = aDate.getUTCHours();\n          this.minute = aDate.getUTCMinutes();\n          this.second = aDate.getUTCSeconds();\n        } else {\n          this.zone = ICAL.Timezone.localTimezone;\n          this.year = aDate.getFullYear();\n          this.month = aDate.getMonth() + 1;\n          this.day = aDate.getDate();\n          this.hour = aDate.getHours();\n          this.minute = aDate.getMinutes();\n          this.second = aDate.getSeconds();\n        }\n      }\n      this._cachedUnixTime = null;\n      return this;\n    },\n\n    /**\n     * Sets up the current instance using members from the passed data object.\n     *\n     * @param {Object} aData            Time initialization\n     * @param {Number=} aData.year      The year for this date\n     * @param {Number=} aData.month     The month for this date\n     * @param {Number=} aData.day       The day for this date\n     * @param {Number=} aData.hour      The hour for this date\n     * @param {Number=} aData.minute    The minute for this date\n     * @param {Number=} aData.second    The second for this date\n     * @param {Boolean=} aData.isDate   If true, the instance represents a date\n     *                                    (as opposed to a date-time)\n     * @param {ICAL.Timezone=} aZone    Timezone this position occurs in\n     */\n    fromData: function fromData(aData, aZone) {\n      if (aData) {\n        for (var key in aData) {\n          /* istanbul ignore else */\n          if (Object.prototype.hasOwnProperty.call(aData, key)) {\n            // ical type cannot be set\n            if (key === 'icaltype') continue;\n            this[key] = aData[key];\n          }\n        }\n      }\n\n      if (aZone) {\n        this.zone = aZone;\n      }\n\n      if (aData && !(\"isDate\" in aData)) {\n        this.isDate = !(\"hour\" in aData);\n      } else if (aData && (\"isDate\" in aData)) {\n        this.isDate = aData.isDate;\n      }\n\n      if (aData && \"timezone\" in aData) {\n        var zone = ICAL.TimezoneService.get(\n          aData.timezone\n        );\n\n        this.zone = zone || ICAL.Timezone.localTimezone;\n      }\n\n      if (aData && \"zone\" in aData) {\n        this.zone = aData.zone;\n      }\n\n      if (!this.zone) {\n        this.zone = ICAL.Timezone.localTimezone;\n      }\n\n      this._cachedUnixTime = null;\n      return this;\n    },\n\n    /**\n     * Calculate the day of week.\n     * @param {ICAL.Time.weekDay=} aWeekStart\n     *        The week start weekday, defaults to SUNDAY\n     * @return {ICAL.Time.weekDay}\n     */\n    dayOfWeek: function icaltime_dayOfWeek(aWeekStart) {\n      var firstDow = aWeekStart || ICAL.Time.SUNDAY;\n      var dowCacheKey = (this.year << 12) + (this.month << 8) + (this.day << 3) + firstDow;\n      if (dowCacheKey in ICAL.Time._dowCache) {\n        return ICAL.Time._dowCache[dowCacheKey];\n      }\n\n      // Using Zeller's algorithm\n      var q = this.day;\n      var m = this.month + (this.month < 3 ? 12 : 0);\n      var Y = this.year - (this.month < 3 ? 1 : 0);\n\n      var h = (q + Y + ICAL.helpers.trunc(((m + 1) * 26) / 10) + ICAL.helpers.trunc(Y / 4));\n      /* istanbul ignore else */\n      if (true /* gregorian */) {\n        h += ICAL.helpers.trunc(Y / 100) * 6 + ICAL.helpers.trunc(Y / 400);\n      } else {\n        h += 5;\n      }\n\n      // Normalize to 1 = wkst\n      h = ((h + 7 - firstDow) % 7) + 1;\n      ICAL.Time._dowCache[dowCacheKey] = h;\n      return h;\n    },\n\n    /**\n     * Calculate the day of year.\n     * @return {Number}\n     */\n    dayOfYear: function dayOfYear() {\n      var is_leap = (ICAL.Time.isLeapYear(this.year) ? 1 : 0);\n      var diypm = ICAL.Time.daysInYearPassedMonth;\n      return diypm[is_leap][this.month - 1] + this.day;\n    },\n\n    /**\n     * Returns a copy of the current date/time, rewound to the start of the\n     * week. The resulting ICAL.Time instance is of icaltype date, even if this\n     * is a date-time.\n     *\n     * @param {ICAL.Time.weekDay=} aWeekStart\n     *        The week start weekday, defaults to SUNDAY\n     * @return {ICAL.Time}      The start of the week (cloned)\n     */\n    startOfWeek: function startOfWeek(aWeekStart) {\n      var firstDow = aWeekStart || ICAL.Time.SUNDAY;\n      var result = this.clone();\n      result.day -= ((this.dayOfWeek() + 7 - firstDow) % 7);\n      result.isDate = true;\n      result.hour = 0;\n      result.minute = 0;\n      result.second = 0;\n      return result;\n    },\n\n    /**\n     * Returns a copy of the current date/time, shifted to the end of the week.\n     * The resulting ICAL.Time instance is of icaltype date, even if this is a\n     * date-time.\n     *\n     * @param {ICAL.Time.weekDay=} aWeekStart\n     *        The week start weekday, defaults to SUNDAY\n     * @return {ICAL.Time}      The end of the week (cloned)\n     */\n    endOfWeek: function endOfWeek(aWeekStart) {\n      var firstDow = aWeekStart || ICAL.Time.SUNDAY;\n      var result = this.clone();\n      result.day += (7 - this.dayOfWeek() + firstDow - ICAL.Time.SUNDAY) % 7;\n      result.isDate = true;\n      result.hour = 0;\n      result.minute = 0;\n      result.second = 0;\n      return result;\n    },\n\n    /**\n     * Returns a copy of the current date/time, rewound to the start of the\n     * month. The resulting ICAL.Time instance is of icaltype date, even if\n     * this is a date-time.\n     *\n     * @return {ICAL.Time}      The start of the month (cloned)\n     */\n    startOfMonth: function startOfMonth() {\n      var result = this.clone();\n      result.day = 1;\n      result.isDate = true;\n      result.hour = 0;\n      result.minute = 0;\n      result.second = 0;\n      return result;\n    },\n\n    /**\n     * Returns a copy of the current date/time, shifted to the end of the\n     * month.  The resulting ICAL.Time instance is of icaltype date, even if\n     * this is a date-time.\n     *\n     * @return {ICAL.Time}      The end of the month (cloned)\n     */\n    endOfMonth: function endOfMonth() {\n      var result = this.clone();\n      result.day = ICAL.Time.daysInMonth(result.month, result.year);\n      result.isDate = true;\n      result.hour = 0;\n      result.minute = 0;\n      result.second = 0;\n      return result;\n    },\n\n    /**\n     * Returns a copy of the current date/time, rewound to the start of the\n     * year. The resulting ICAL.Time instance is of icaltype date, even if\n     * this is a date-time.\n     *\n     * @return {ICAL.Time}      The start of the year (cloned)\n     */\n    startOfYear: function startOfYear() {\n      var result = this.clone();\n      result.day = 1;\n      result.month = 1;\n      result.isDate = true;\n      result.hour = 0;\n      result.minute = 0;\n      result.second = 0;\n      return result;\n    },\n\n    /**\n     * Returns a copy of the current date/time, shifted to the end of the\n     * year.  The resulting ICAL.Time instance is of icaltype date, even if\n     * this is a date-time.\n     *\n     * @return {ICAL.Time}      The end of the year (cloned)\n     */\n    endOfYear: function endOfYear() {\n      var result = this.clone();\n      result.day = 31;\n      result.month = 12;\n      result.isDate = true;\n      result.hour = 0;\n      result.minute = 0;\n      result.second = 0;\n      return result;\n    },\n\n    /**\n     * First calculates the start of the week, then returns the day of year for\n     * this date. If the day falls into the previous year, the day is zero or negative.\n     *\n     * @param {ICAL.Time.weekDay=} aFirstDayOfWeek\n     *        The week start weekday, defaults to SUNDAY\n     * @return {Number}     The calculated day of year\n     */\n    startDoyWeek: function startDoyWeek(aFirstDayOfWeek) {\n      var firstDow = aFirstDayOfWeek || ICAL.Time.SUNDAY;\n      var delta = this.dayOfWeek() - firstDow;\n      if (delta < 0) delta += 7;\n      return this.dayOfYear() - delta;\n    },\n\n    /**\n     * Get the dominical letter for the current year. Letters range from A - G\n     * for common years, and AG to GF for leap years.\n     *\n     * @param {Number} yr           The year to retrieve the letter for\n     * @return {String}             The dominical letter.\n     */\n    getDominicalLetter: function() {\n      return ICAL.Time.getDominicalLetter(this.year);\n    },\n\n    /**\n     * Finds the nthWeekDay relative to the current month (not day).  The\n     * returned value is a day relative the month that this month belongs to so\n     * 1 would indicate the first of the month and 40 would indicate a day in\n     * the following month.\n     *\n     * @param {Number} aDayOfWeek   Day of the week see the day name constants\n     * @param {Number} aPos         Nth occurrence of a given week day values\n     *        of 1 and 0 both indicate the first weekday of that type. aPos may\n     *        be either positive or negative\n     *\n     * @return {Number} numeric value indicating a day relative\n     *                   to the current month of this time object\n     */\n    nthWeekDay: function icaltime_nthWeekDay(aDayOfWeek, aPos) {\n      var daysInMonth = ICAL.Time.daysInMonth(this.month, this.year);\n      var weekday;\n      var pos = aPos;\n\n      var start = 0;\n\n      var otherDay = this.clone();\n\n      if (pos >= 0) {\n        otherDay.day = 1;\n\n        // because 0 means no position has been given\n        // 1 and 0 indicate the same day.\n        if (pos != 0) {\n          // remove the extra numeric value\n          pos--;\n        }\n\n        // set current start offset to current day.\n        start = otherDay.day;\n\n        // find the current day of week\n        var startDow = otherDay.dayOfWeek();\n\n        // calculate the difference between current\n        // day of the week and desired day of the week\n        var offset = aDayOfWeek - startDow;\n\n\n        // if the offset goes into the past\n        // week we add 7 so its goes into the next\n        // week. We only want to go forward in time here.\n        if (offset < 0)\n          // this is really important otherwise we would\n          // end up with dates from in the past.\n          offset += 7;\n\n        // add offset to start so start is the same\n        // day of the week as the desired day of week.\n        start += offset;\n\n        // because we are going to add (and multiply)\n        // the numeric value of the day we subtract it\n        // from the start position so not to add it twice.\n        start -= aDayOfWeek;\n\n        // set week day\n        weekday = aDayOfWeek;\n      } else {\n\n        // then we set it to the last day in the current month\n        otherDay.day = daysInMonth;\n\n        // find the ends weekday\n        var endDow = otherDay.dayOfWeek();\n\n        pos++;\n\n        weekday = (endDow - aDayOfWeek);\n\n        if (weekday < 0) {\n          weekday += 7;\n        }\n\n        weekday = daysInMonth - weekday;\n      }\n\n      weekday += pos * 7;\n\n      return start + weekday;\n    },\n\n    /**\n     * Checks if current time is the nth weekday, relative to the current\n     * month.  Will always return false when rule resolves outside of current\n     * month.\n     *\n     * @param {ICAL.Time.weekDay} aDayOfWeek       Day of week to check\n     * @param {Number} aPos                        Relative position\n     * @return {Boolean}                           True, if its the nth weekday\n     */\n    isNthWeekDay: function(aDayOfWeek, aPos) {\n      var dow = this.dayOfWeek();\n\n      if (aPos === 0 && dow === aDayOfWeek) {\n        return true;\n      }\n\n      // get pos\n      var day = this.nthWeekDay(aDayOfWeek, aPos);\n\n      if (day === this.day) {\n        return true;\n      }\n\n      return false;\n    },\n\n    /**\n     * Calculates the ISO 8601 week number. The first week of a year is the\n     * week that contains the first Thursday. The year can have 53 weeks, if\n     * January 1st is a Friday.\n     *\n     * Note there are regions where the first week of the year is the one that\n     * starts on January 1st, which may offset the week number. Also, if a\n     * different week start is specified, this will also affect the week\n     * number.\n     *\n     * @see ICAL.Time.weekOneStarts\n     * @param {ICAL.Time.weekDay} aWeekStart        The weekday the week starts with\n     * @return {Number}                             The ISO week number\n     */\n    weekNumber: function weekNumber(aWeekStart) {\n      var wnCacheKey = (this.year << 12) + (this.month << 8) + (this.day << 3) + aWeekStart;\n      if (wnCacheKey in ICAL.Time._wnCache) {\n        return ICAL.Time._wnCache[wnCacheKey];\n      }\n      // This function courtesty of Julian Bucknall, published under the MIT license\n      // http://www.boyet.com/articles/publishedarticles/calculatingtheisoweeknumb.html\n      // plus some fixes to be able to use different week starts.\n      var week1;\n\n      var dt = this.clone();\n      dt.isDate = true;\n      var isoyear = this.year;\n\n      if (dt.month == 12 && dt.day > 25) {\n        week1 = ICAL.Time.weekOneStarts(isoyear + 1, aWeekStart);\n        if (dt.compare(week1) < 0) {\n          week1 = ICAL.Time.weekOneStarts(isoyear, aWeekStart);\n        } else {\n          isoyear++;\n        }\n      } else {\n        week1 = ICAL.Time.weekOneStarts(isoyear, aWeekStart);\n        if (dt.compare(week1) < 0) {\n          week1 = ICAL.Time.weekOneStarts(--isoyear, aWeekStart);\n        }\n      }\n\n      var daysBetween = (dt.subtractDate(week1).toSeconds() / 86400);\n      var answer = ICAL.helpers.trunc(daysBetween / 7) + 1;\n      ICAL.Time._wnCache[wnCacheKey] = answer;\n      return answer;\n    },\n\n    /**\n     * Adds the duration to the current time. The instance is modified in\n     * place.\n     *\n     * @param {ICAL.Duration} aDuration         The duration to add\n     */\n    addDuration: function icaltime_add(aDuration) {\n      var mult = (aDuration.isNegative ? -1 : 1);\n\n      // because of the duration optimizations it is much\n      // more efficient to grab all the values up front\n      // then set them directly (which will avoid a normalization call).\n      // So we don't actually normalize until we need it.\n      var second = this.second;\n      var minute = this.minute;\n      var hour = this.hour;\n      var day = this.day;\n\n      second += mult * aDuration.seconds;\n      minute += mult * aDuration.minutes;\n      hour += mult * aDuration.hours;\n      day += mult * aDuration.days;\n      day += mult * 7 * aDuration.weeks;\n\n      this.second = second;\n      this.minute = minute;\n      this.hour = hour;\n      this.day = day;\n\n      this._cachedUnixTime = null;\n    },\n\n    /**\n     * Subtract the date details (_excluding_ timezone).  Useful for finding\n     * the relative difference between two time objects excluding their\n     * timezone differences.\n     *\n     * @param {ICAL.Time} aDate     The date to substract\n     * @return {ICAL.Duration}      The difference as a duration\n     */\n    subtractDate: function icaltime_subtract(aDate) {\n      var unixTime = this.toUnixTime() + this.utcOffset();\n      var other = aDate.toUnixTime() + aDate.utcOffset();\n      return ICAL.Duration.fromSeconds(unixTime - other);\n    },\n\n    /**\n     * Subtract the date details, taking timezones into account.\n     *\n     * @param {ICAL.Time} aDate  The date to subtract\n     * @return {ICAL.Duration}  The difference in duration\n     */\n    subtractDateTz: function icaltime_subtract_abs(aDate) {\n      var unixTime = this.toUnixTime();\n      var other = aDate.toUnixTime();\n      return ICAL.Duration.fromSeconds(unixTime - other);\n    },\n\n    /**\n     * Compares the ICAL.Time instance with another one.\n     *\n     * @param {ICAL.Duration} aOther        The instance to compare with\n     * @return {Number}                     -1, 0 or 1 for less/equal/greater\n     */\n    compare: function icaltime_compare(other) {\n      var a = this.toUnixTime();\n      var b = other.toUnixTime();\n\n      if (a > b) return 1;\n      if (b > a) return -1;\n      return 0;\n    },\n\n    /**\n     * Compares only the date part of this instance with another one.\n     *\n     * @param {ICAL.Duration} other         The instance to compare with\n     * @param {ICAL.Timezone} tz            The timezone to compare in\n     * @return {Number}                     -1, 0 or 1 for less/equal/greater\n     */\n    compareDateOnlyTz: function icaltime_compareDateOnlyTz(other, tz) {\n      function cmp(attr) {\n        return ICAL.Time._cmp_attr(a, b, attr);\n      }\n      var a = this.convertToZone(tz);\n      var b = other.convertToZone(tz);\n      var rc = 0;\n\n      if ((rc = cmp(\"year\")) != 0) return rc;\n      if ((rc = cmp(\"month\")) != 0) return rc;\n      if ((rc = cmp(\"day\")) != 0) return rc;\n\n      return rc;\n    },\n\n    /**\n     * Convert the instance into another timzone. The returned ICAL.Time\n     * instance is always a copy.\n     *\n     * @param {ICAL.Timezone} zone      The zone to convert to\n     * @return {ICAL.Time}              The copy, converted to the zone\n     */\n    convertToZone: function convertToZone(zone) {\n      var copy = this.clone();\n      var zone_equals = (this.zone.tzid == zone.tzid);\n\n      if (!this.isDate && !zone_equals) {\n        ICAL.Timezone.convert_time(copy, this.zone, zone);\n      }\n\n      copy.zone = zone;\n      return copy;\n    },\n\n    /**\n     * Calculates the UTC offset of the current date/time in the timezone it is\n     * in.\n     *\n     * @return {Number}     UTC offset in seconds\n     */\n    utcOffset: function utc_offset() {\n      if (this.zone == ICAL.Timezone.localTimezone ||\n          this.zone == ICAL.Timezone.utcTimezone) {\n        return 0;\n      } else {\n        return this.zone.utcOffset(this);\n      }\n    },\n\n    /**\n     * Returns an RFC 5545 compliant ical representation of this object.\n     *\n     * @return {String} ical date/date-time\n     */\n    toICALString: function() {\n      var string = this.toString();\n\n      if (string.length > 10) {\n        return ICAL.design.icalendar.value['date-time'].toICAL(string);\n      } else {\n        return ICAL.design.icalendar.value.date.toICAL(string);\n      }\n    },\n\n    /**\n     * The string representation of this date/time, in jCal form\n     * (including : and - separators).\n     * @return {String}\n     */\n    toString: function toString() {\n      var result = this.year + '-' +\n                   ICAL.helpers.pad2(this.month) + '-' +\n                   ICAL.helpers.pad2(this.day);\n\n      if (!this.isDate) {\n          result += 'T' + ICAL.helpers.pad2(this.hour) + ':' +\n                    ICAL.helpers.pad2(this.minute) + ':' +\n                    ICAL.helpers.pad2(this.second);\n\n        if (this.zone === ICAL.Timezone.utcTimezone) {\n          result += 'Z';\n        }\n      }\n\n      return result;\n    },\n\n    /**\n     * Converts the current instance to a Javascript date\n     * @return {Date}\n     */\n    toJSDate: function toJSDate() {\n      if (this.zone == ICAL.Timezone.localTimezone) {\n        if (this.isDate) {\n          return new Date(this.year, this.month - 1, this.day);\n        } else {\n          return new Date(this.year, this.month - 1, this.day,\n                          this.hour, this.minute, this.second, 0);\n        }\n      } else {\n        return new Date(this.toUnixTime() * 1000);\n      }\n    },\n\n    _normalize: function icaltime_normalize() {\n      var isDate = this._time.isDate;\n      if (this._time.isDate) {\n        this._time.hour = 0;\n        this._time.minute = 0;\n        this._time.second = 0;\n      }\n      this.adjust(0, 0, 0, 0);\n\n      return this;\n    },\n\n    /**\n     * Adjust the date/time by the given offset\n     *\n     * @param {Number} aExtraDays       The extra amount of days\n     * @param {Number} aExtraHours      The extra amount of hours\n     * @param {Number} aExtraMinutes    The extra amount of minutes\n     * @param {Number} aExtraSeconds    The extra amount of seconds\n     * @param {Number=} aTime           The time to adjust, defaults to the\n     *                                    current instance.\n     */\n    adjust: function icaltime_adjust(aExtraDays, aExtraHours,\n                                     aExtraMinutes, aExtraSeconds, aTime) {\n\n      var minutesOverflow, hoursOverflow,\n          daysOverflow = 0, yearsOverflow = 0;\n\n      var second, minute, hour, day;\n      var daysInMonth;\n\n      var time = aTime || this._time;\n\n      if (!time.isDate) {\n        second = time.second + aExtraSeconds;\n        time.second = second % 60;\n        minutesOverflow = ICAL.helpers.trunc(second / 60);\n        if (time.second < 0) {\n          time.second += 60;\n          minutesOverflow--;\n        }\n\n        minute = time.minute + aExtraMinutes + minutesOverflow;\n        time.minute = minute % 60;\n        hoursOverflow = ICAL.helpers.trunc(minute / 60);\n        if (time.minute < 0) {\n          time.minute += 60;\n          hoursOverflow--;\n        }\n\n        hour = time.hour + aExtraHours + hoursOverflow;\n\n        time.hour = hour % 24;\n        daysOverflow = ICAL.helpers.trunc(hour / 24);\n        if (time.hour < 0) {\n          time.hour += 24;\n          daysOverflow--;\n        }\n      }\n\n\n      // Adjust month and year first, because we need to know what month the day\n      // is in before adjusting it.\n      if (time.month > 12) {\n        yearsOverflow = ICAL.helpers.trunc((time.month - 1) / 12);\n      } else if (time.month < 1) {\n        yearsOverflow = ICAL.helpers.trunc(time.month / 12) - 1;\n      }\n\n      time.year += yearsOverflow;\n      time.month -= 12 * yearsOverflow;\n\n      // Now take care of the days (and adjust month if needed)\n      day = time.day + aExtraDays + daysOverflow;\n\n      if (day > 0) {\n        for (;;) {\n          daysInMonth = ICAL.Time.daysInMonth(time.month, time.year);\n          if (day <= daysInMonth) {\n            break;\n          }\n\n          time.month++;\n          if (time.month > 12) {\n            time.year++;\n            time.month = 1;\n          }\n\n          day -= daysInMonth;\n        }\n      } else {\n        while (day <= 0) {\n          if (time.month == 1) {\n            time.year--;\n            time.month = 12;\n          } else {\n            time.month--;\n          }\n\n          day += ICAL.Time.daysInMonth(time.month, time.year);\n        }\n      }\n\n      time.day = day;\n\n      this._cachedUnixTime = null;\n      return this;\n    },\n\n    /**\n     * Sets up the current instance from unix time, the number of seconds since\n     * January 1st, 1970.\n     *\n     * @param {Number} seconds      The seconds to set up with\n     */\n    fromUnixTime: function fromUnixTime(seconds) {\n      this.zone = ICAL.Timezone.utcTimezone;\n      var epoch = ICAL.Time.epochTime.clone();\n      epoch.adjust(0, 0, 0, seconds);\n\n      this.year = epoch.year;\n      this.month = epoch.month;\n      this.day = epoch.day;\n      this.hour = epoch.hour;\n      this.minute = epoch.minute;\n      this.second = Math.floor(epoch.second);\n\n      this._cachedUnixTime = null;\n    },\n\n    /**\n     * Converts the current instance to seconds since January 1st 1970.\n     *\n     * @return {Number}         Seconds since 1970\n     */\n    toUnixTime: function toUnixTime() {\n      if (this._cachedUnixTime !== null) {\n        return this._cachedUnixTime;\n      }\n      var offset = this.utcOffset();\n\n      // we use the offset trick to ensure\n      // that we are getting the actual UTC time\n      var ms = Date.UTC(\n        this.year,\n        this.month - 1,\n        this.day,\n        this.hour,\n        this.minute,\n        this.second - offset\n      );\n\n      // seconds\n      this._cachedUnixTime = ms / 1000;\n      return this._cachedUnixTime;\n    },\n\n    /**\n     * Converts time to into Object which can be serialized then re-created\n     * using the constructor.\n     *\n     * @example\n     * // toJSON will automatically be called\n     * var json = JSON.stringify(mytime);\n     *\n     * var deserialized = JSON.parse(json);\n     *\n     * var time = new ICAL.Time(deserialized);\n     *\n     * @return {Object}\n     */\n    toJSON: function() {\n      var copy = [\n        'year',\n        'month',\n        'day',\n        'hour',\n        'minute',\n        'second',\n        'isDate'\n      ];\n\n      var result = Object.create(null);\n\n      var i = 0;\n      var len = copy.length;\n      var prop;\n\n      for (; i < len; i++) {\n        prop = copy[i];\n        result[prop] = this[prop];\n      }\n\n      if (this.zone) {\n        result.timezone = this.zone.tzid;\n      }\n\n      return result;\n    }\n\n  };\n\n  (function setupNormalizeAttributes() {\n    // This needs to run before any instances are created!\n    function defineAttr(attr) {\n      Object.defineProperty(ICAL.Time.prototype, attr, {\n        get: function getTimeAttr() {\n          if (this._pendingNormalization) {\n            this._normalize();\n            this._pendingNormalization = false;\n          }\n\n          return this._time[attr];\n        },\n        set: function setTimeAttr(val) {\n          // Check if isDate will be set and if was not set to normalize date.\n          // This avoids losing days when seconds, minutes and hours are zeroed\n          // what normalize will do when time is a date.\n          if (attr === \"isDate\" && val && !this._time.isDate) {\n            this.adjust(0, 0, 0, 0);\n          }\n          this._cachedUnixTime = null;\n          this._pendingNormalization = true;\n          this._time[attr] = val;\n\n          return val;\n        }\n      });\n\n    }\n\n    /* istanbul ignore else */\n    if (\"defineProperty\" in Object) {\n      defineAttr(\"year\");\n      defineAttr(\"month\");\n      defineAttr(\"day\");\n      defineAttr(\"hour\");\n      defineAttr(\"minute\");\n      defineAttr(\"second\");\n      defineAttr(\"isDate\");\n    }\n  })();\n\n  /**\n   * Returns the days in the given month\n   *\n   * @param {Number} month      The month to check\n   * @param {Number} year       The year to check\n   * @return {Number}           The number of days in the month\n   */\n  ICAL.Time.daysInMonth = function icaltime_daysInMonth(month, year) {\n    var _daysInMonth = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n    var days = 30;\n\n    if (month < 1 || month > 12) return days;\n\n    days = _daysInMonth[month];\n\n    if (month == 2) {\n      days += ICAL.Time.isLeapYear(year);\n    }\n\n    return days;\n  };\n\n  /**\n   * Checks if the year is a leap year\n   *\n   * @param {Number} year       The year to check\n   * @return {Boolean}          True, if the year is a leap year\n   */\n  ICAL.Time.isLeapYear = function isLeapYear(year) {\n    if (year <= 1752) {\n      return ((year % 4) == 0);\n    } else {\n      return (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0));\n    }\n  };\n\n  /**\n   * Create a new ICAL.Time from the day of year and year. The date is returned\n   * in floating timezone.\n   *\n   * @param {Number} aDayOfYear     The day of year\n   * @param {Number} aYear          The year to create the instance in\n   * @return {ICAL.Time}            The created instance with the calculated date\n   */\n  ICAL.Time.fromDayOfYear = function icaltime_fromDayOfYear(aDayOfYear, aYear) {\n    var year = aYear;\n    var doy = aDayOfYear;\n    var tt = new ICAL.Time();\n    tt.auto_normalize = false;\n    var is_leap = (ICAL.Time.isLeapYear(year) ? 1 : 0);\n\n    if (doy < 1) {\n      year--;\n      is_leap = (ICAL.Time.isLeapYear(year) ? 1 : 0);\n      doy += ICAL.Time.daysInYearPassedMonth[is_leap][12];\n      return ICAL.Time.fromDayOfYear(doy, year);\n    } else if (doy > ICAL.Time.daysInYearPassedMonth[is_leap][12]) {\n      is_leap = (ICAL.Time.isLeapYear(year) ? 1 : 0);\n      doy -= ICAL.Time.daysInYearPassedMonth[is_leap][12];\n      year++;\n      return ICAL.Time.fromDayOfYear(doy, year);\n    }\n\n    tt.year = year;\n    tt.isDate = true;\n\n    for (var month = 11; month >= 0; month--) {\n      if (doy > ICAL.Time.daysInYearPassedMonth[is_leap][month]) {\n        tt.month = month + 1;\n        tt.day = doy - ICAL.Time.daysInYearPassedMonth[is_leap][month];\n        break;\n      }\n    }\n\n    tt.auto_normalize = true;\n    return tt;\n  };\n\n  /**\n   * Returns a new ICAL.Time instance from a date string, e.g 2015-01-02.\n   *\n   * @deprecated                Use {@link ICAL.Time.fromDateString} instead\n   * @param {String} str        The string to create from\n   * @return {ICAL.Time}        The date/time instance\n   */\n  ICAL.Time.fromStringv2 = function fromString(str) {\n    return new ICAL.Time({\n      year: parseInt(str.substr(0, 4), 10),\n      month: parseInt(str.substr(5, 2), 10),\n      day: parseInt(str.substr(8, 2), 10),\n      isDate: true\n    });\n  };\n\n  /**\n   * Returns a new ICAL.Time instance from a date string, e.g 2015-01-02.\n   *\n   * @param {String} aValue     The string to create from\n   * @return {ICAL.Time}        The date/time instance\n   */\n  ICAL.Time.fromDateString = function(aValue) {\n    // Dates should have no timezone.\n    // Google likes to sometimes specify Z on dates\n    // we specifically ignore that to avoid issues.\n\n    // YYYY-MM-DD\n    // 2012-10-10\n    return new ICAL.Time({\n      year: ICAL.helpers.strictParseInt(aValue.substr(0, 4)),\n      month: ICAL.helpers.strictParseInt(aValue.substr(5, 2)),\n      day: ICAL.helpers.strictParseInt(aValue.substr(8, 2)),\n      isDate: true\n    });\n  };\n\n  /**\n   * Returns a new ICAL.Time instance from a date-time string, e.g\n   * 2015-01-02T03:04:05. If a property is specified, the timezone is set up\n   * from the property's TZID parameter.\n   *\n   * @param {String} aValue         The string to create from\n   * @param {ICAL.Property=} prop   The property the date belongs to\n   * @return {ICAL.Time}            The date/time instance\n   */\n  ICAL.Time.fromDateTimeString = function(aValue, prop) {\n    if (aValue.length < 19) {\n      throw new Error(\n        'invalid date-time value: \"' + aValue + '\"'\n      );\n    }\n\n    var zone;\n\n    if (aValue[19] && aValue[19] === 'Z') {\n      zone = 'Z';\n    } else if (prop) {\n      zone = prop.getParameter('tzid');\n    }\n\n    // 2012-10-10T10:10:10(Z)?\n    var time = new ICAL.Time({\n      year: ICAL.helpers.strictParseInt(aValue.substr(0, 4)),\n      month: ICAL.helpers.strictParseInt(aValue.substr(5, 2)),\n      day: ICAL.helpers.strictParseInt(aValue.substr(8, 2)),\n      hour: ICAL.helpers.strictParseInt(aValue.substr(11, 2)),\n      minute: ICAL.helpers.strictParseInt(aValue.substr(14, 2)),\n      second: ICAL.helpers.strictParseInt(aValue.substr(17, 2)),\n      timezone: zone\n    });\n\n    return time;\n  };\n\n  /**\n   * Returns a new ICAL.Time instance from a date or date-time string,\n   *\n   * @param {String} aValue         The string to create from\n   * @param {ICAL.Property=} prop   The property the date belongs to\n   * @return {ICAL.Time}            The date/time instance\n   */\n  ICAL.Time.fromString = function fromString(aValue, aProperty) {\n    if (aValue.length > 10) {\n      return ICAL.Time.fromDateTimeString(aValue, aProperty);\n    } else {\n      return ICAL.Time.fromDateString(aValue);\n    }\n  };\n\n  /**\n   * Creates a new ICAL.Time instance from the given Javascript Date.\n   *\n   * @param {?Date} aDate     The Javascript Date to read, or null to reset\n   * @param {Boolean} useUTC  If true, the UTC values of the date will be used\n   */\n  ICAL.Time.fromJSDate = function fromJSDate(aDate, useUTC) {\n    var tt = new ICAL.Time();\n    return tt.fromJSDate(aDate, useUTC);\n  };\n\n  /**\n   * Creates a new ICAL.Time instance from the the passed data object.\n   *\n   * @param {Object} aData            Time initialization\n   * @param {Number=} aData.year      The year for this date\n   * @param {Number=} aData.month     The month for this date\n   * @param {Number=} aData.day       The day for this date\n   * @param {Number=} aData.hour      The hour for this date\n   * @param {Number=} aData.minute    The minute for this date\n   * @param {Number=} aData.second    The second for this date\n   * @param {Boolean=} aData.isDate   If true, the instance represents a date\n   *                                    (as opposed to a date-time)\n   * @param {ICAL.Timezone=} aZone    Timezone this position occurs in\n   */\n  ICAL.Time.fromData = function fromData(aData, aZone) {\n    var t = new ICAL.Time();\n    return t.fromData(aData, aZone);\n  };\n\n  /**\n   * Creates a new ICAL.Time instance from the current moment.\n   * @return {ICAL.Time}\n   */\n  ICAL.Time.now = function icaltime_now() {\n    return ICAL.Time.fromJSDate(new Date(), false);\n  };\n\n  /**\n   * Returns the date on which ISO week number 1 starts.\n   *\n   * @see ICAL.Time#weekNumber\n   * @param {Number} aYear                  The year to search in\n   * @param {ICAL.Time.weekDay=} aWeekStart The week start weekday, used for calculation.\n   * @return {ICAL.Time}                    The date on which week number 1 starts\n   */\n  ICAL.Time.weekOneStarts = function weekOneStarts(aYear, aWeekStart) {\n    var t = ICAL.Time.fromData({\n      year: aYear,\n      month: 1,\n      day: 1,\n      isDate: true\n    });\n\n    var dow = t.dayOfWeek();\n    var wkst = aWeekStart || ICAL.Time.DEFAULT_WEEK_START;\n    if (dow > ICAL.Time.THURSDAY) {\n      t.day += 7;\n    }\n    if (wkst > ICAL.Time.THURSDAY) {\n      t.day -= 7;\n    }\n\n    t.day -= dow - wkst;\n\n    return t;\n  };\n\n  /**\n   * Get the dominical letter for the given year. Letters range from A - G for\n   * common years, and AG to GF for leap years.\n   *\n   * @param {Number} yr           The year to retrieve the letter for\n   * @return {String}             The dominical letter.\n   */\n  ICAL.Time.getDominicalLetter = function(yr) {\n    var LTRS = \"GFEDCBA\";\n    var dom = (yr + (yr / 4 | 0) + (yr / 400 | 0) - (yr / 100 | 0) - 1) % 7;\n    var isLeap = ICAL.Time.isLeapYear(yr);\n    if (isLeap) {\n      return LTRS[(dom + 6) % 7] + LTRS[dom];\n    } else {\n      return LTRS[dom];\n    }\n  };\n\n  /**\n   * January 1st, 1970 as an ICAL.Time.\n   * @type {ICAL.Time}\n   * @constant\n   * @instance\n   */\n  ICAL.Time.epochTime = ICAL.Time.fromData({\n    year: 1970,\n    month: 1,\n    day: 1,\n    hour: 0,\n    minute: 0,\n    second: 0,\n    isDate: false,\n    timezone: \"Z\"\n  });\n\n  ICAL.Time._cmp_attr = function _cmp_attr(a, b, attr) {\n    if (a[attr] > b[attr]) return 1;\n    if (a[attr] < b[attr]) return -1;\n    return 0;\n  };\n\n  /**\n   * The days that have passed in the year after a given month. The array has\n   * two members, one being an array of passed days for non-leap years, the\n   * other analog for leap years.\n   * @example\n   * var isLeapYear = ICAL.Time.isLeapYear(year);\n   * var passedDays = ICAL.Time.daysInYearPassedMonth[isLeapYear][month];\n   * @type {Array.<Array.<Number>>}\n   */\n  ICAL.Time.daysInYearPassedMonth = [\n    [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365],\n    [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366]\n  ];\n\n  /**\n   * The weekday, 1 = SUNDAY, 7 = SATURDAY. Access via\n   * ICAL.Time.MONDAY, ICAL.Time.TUESDAY, ...\n   *\n   * @typedef {Number} weekDay\n   * @memberof ICAL.Time\n   */\n\n  ICAL.Time.SUNDAY = 1;\n  ICAL.Time.MONDAY = 2;\n  ICAL.Time.TUESDAY = 3;\n  ICAL.Time.WEDNESDAY = 4;\n  ICAL.Time.THURSDAY = 5;\n  ICAL.Time.FRIDAY = 6;\n  ICAL.Time.SATURDAY = 7;\n\n  /**\n   * The default weekday for the WKST part.\n   * @constant\n   * @default ICAL.Time.MONDAY\n   */\n  ICAL.Time.DEFAULT_WEEK_START = ICAL.Time.MONDAY;\n})();\n/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\n * Portions Copyright (C) Philipp Kewisch, 2015 */\n\n\n\n(function() {\n\n  /**\n   * Describes a vCard time, which has slight differences to the ICAL.Time.\n   * Properties can be null if not specified, for example for dates with\n   * reduced accuracy or truncation.\n   *\n   * Note that currently not all methods are correctly re-implemented for\n   * VCardTime. For example, comparison will have undefined results when some\n   * members are null.\n   *\n   * Also, normalization is not yet implemented for this class!\n   *\n   * @alias ICAL.VCardTime\n   * @class\n   * @extends {ICAL.Time}\n   * @param {Object} data                           The data for the time instance\n   * @param {Number=} data.year                     The year for this date\n   * @param {Number=} data.month                    The month for this date\n   * @param {Number=} data.day                      The day for this date\n   * @param {Number=} data.hour                     The hour for this date\n   * @param {Number=} data.minute                   The minute for this date\n   * @param {Number=} data.second                   The second for this date\n   * @param {ICAL.Timezone|ICAL.UtcOffset} zone     The timezone to use\n   * @param {String} icaltype                       The type for this date/time object\n   */\n  ICAL.VCardTime = function(data, zone, icaltype) {\n    this.wrappedJSObject = this;\n    var time = this._time = Object.create(null);\n\n    time.year = null;\n    time.month = null;\n    time.day = null;\n    time.hour = null;\n    time.minute = null;\n    time.second = null;\n\n    this.icaltype = icaltype || \"date-and-or-time\";\n\n    this.fromData(data, zone);\n  };\n  ICAL.helpers.inherits(ICAL.Time, ICAL.VCardTime, /** @lends ICAL.VCardTime */ {\n\n    /**\n     * The class identifier.\n     * @constant\n     * @type {String}\n     * @default \"vcardtime\"\n     */\n    icalclass: \"vcardtime\",\n\n    /**\n     * The type name, to be used in the jCal object.\n     * @type {String}\n     * @default \"date-and-or-time\"\n     */\n    icaltype: \"date-and-or-time\",\n\n    /**\n     * The timezone. This can either be floating, UTC, or an instance of\n     * ICAL.UtcOffset.\n     * @type {ICAL.Timezone|ICAL.UtcOFfset}\n     */\n    zone: null,\n\n    /**\n     * Returns a clone of the vcard date/time object.\n     *\n     * @return {ICAL.VCardTime}     The cloned object\n     */\n    clone: function() {\n      return new ICAL.VCardTime(this._time, this.zone, this.icaltype);\n    },\n\n    _normalize: function() {\n      return this;\n    },\n\n    /**\n     * @inheritdoc\n     */\n    utcOffset: function() {\n      if (this.zone instanceof ICAL.UtcOffset) {\n        return this.zone.toSeconds();\n      } else {\n        return ICAL.Time.prototype.utcOffset.apply(this, arguments);\n      }\n    },\n\n    /**\n     * Returns an RFC 6350 compliant representation of this object.\n     *\n     * @return {String}         vcard date/time string\n     */\n    toICALString: function() {\n      return ICAL.design.vcard.value[this.icaltype].toICAL(this.toString());\n    },\n\n    /**\n     * The string representation of this date/time, in jCard form\n     * (including : and - separators).\n     * @return {String}\n     */\n    toString: function toString() {\n      var p2 = ICAL.helpers.pad2;\n      var y = this.year, m = this.month, d = this.day;\n      var h = this.hour, mm = this.minute, s = this.second;\n\n      var hasYear = y !== null, hasMonth = m !== null, hasDay = d !== null;\n      var hasHour = h !== null, hasMinute = mm !== null, hasSecond = s !== null;\n\n      var datepart = (hasYear ? p2(y) + (hasMonth || hasDay ? '-' : '') : (hasMonth || hasDay ? '--' : '')) +\n                     (hasMonth ? p2(m) : '') +\n                     (hasDay ? '-' + p2(d) : '');\n      var timepart = (hasHour ? p2(h) : '-') + (hasHour && hasMinute ? ':' : '') +\n                     (hasMinute ? p2(mm) : '') + (!hasHour && !hasMinute ? '-' : '') +\n                     (hasMinute && hasSecond ? ':' : '') +\n                     (hasSecond ? p2(s) : '');\n\n      var zone;\n      if (this.zone === ICAL.Timezone.utcTimezone) {\n        zone = 'Z';\n      } else if (this.zone instanceof ICAL.UtcOffset) {\n        zone = this.zone.toString();\n      } else if (this.zone === ICAL.Timezone.localTimezone) {\n        zone = '';\n      } else if (this.zone instanceof ICAL.Timezone) {\n        var offset = ICAL.UtcOffset.fromSeconds(this.zone.utcOffset(this));\n        zone = offset.toString();\n      } else {\n        zone = '';\n      }\n\n      switch (this.icaltype) {\n        case \"time\":\n          return timepart + zone;\n        case \"date-and-or-time\":\n        case \"date-time\":\n          return datepart + (timepart == '--' ? '' : 'T' + timepart + zone);\n        case \"date\":\n          return datepart;\n      }\n      return null;\n    }\n  });\n\n  /**\n   * Returns a new ICAL.VCardTime instance from a date and/or time string.\n   *\n   * @param {String} aValue     The string to create from\n   * @param {String} aIcalType  The type for this instance, e.g. date-and-or-time\n   * @return {ICAL.VCardTime}   The date/time instance\n   */\n  ICAL.VCardTime.fromDateAndOrTimeString = function(aValue, aIcalType) {\n    function part(v, s, e) {\n      return v ? ICAL.helpers.strictParseInt(v.substr(s, e)) : null;\n    }\n    var parts = aValue.split('T');\n    var dt = parts[0], tmz = parts[1];\n    var splitzone = tmz ? ICAL.design.vcard.value.time._splitZone(tmz) : [];\n    var zone = splitzone[0], tm = splitzone[1];\n\n    var stoi = ICAL.helpers.strictParseInt;\n    var dtlen = dt ? dt.length : 0;\n    var tmlen = tm ? tm.length : 0;\n\n    var hasDashDate = dt && dt[0] == '-' && dt[1] == '-';\n    var hasDashTime = tm && tm[0] == '-';\n\n    var o = {\n      year: hasDashDate ? null : part(dt, 0, 4),\n      month: hasDashDate && (dtlen == 4 || dtlen == 7) ? part(dt, 2, 2) : dtlen == 7 ? part(dt, 5, 2) : dtlen == 10 ? part(dt, 5, 2) : null,\n      day: dtlen == 5 ? part(dt, 3, 2) : dtlen == 7 && hasDashDate ? part(dt, 5, 2) : dtlen == 10 ? part(dt, 8, 2) : null,\n\n      hour: hasDashTime ? null : part(tm, 0, 2),\n      minute: hasDashTime && tmlen == 3 ? part(tm, 1, 2) : tmlen > 4 ? hasDashTime ? part(tm, 1, 2) : part(tm, 3, 2) : null,\n      second: tmlen == 4 ? part(tm, 2, 2) : tmlen == 6 ? part(tm, 4, 2) : tmlen == 8 ? part(tm, 6, 2) : null\n    };\n\n    if (zone == 'Z') {\n      zone = ICAL.Timezone.utcTimezone;\n    } else if (zone && zone[3] == ':') {\n      zone = ICAL.UtcOffset.fromString(zone);\n    } else {\n      zone = null;\n    }\n\n    return new ICAL.VCardTime(o, zone, aIcalType);\n  };\n})();\n/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\n * Portions Copyright (C) Philipp Kewisch, 2011-2015 */\n\n\n\n(function() {\n  var DOW_MAP = {\n    SU: ICAL.Time.SUNDAY,\n    MO: ICAL.Time.MONDAY,\n    TU: ICAL.Time.TUESDAY,\n    WE: ICAL.Time.WEDNESDAY,\n    TH: ICAL.Time.THURSDAY,\n    FR: ICAL.Time.FRIDAY,\n    SA: ICAL.Time.SATURDAY\n  };\n\n  var REVERSE_DOW_MAP = {};\n  for (var key in DOW_MAP) {\n    /* istanbul ignore else */\n    if (DOW_MAP.hasOwnProperty(key)) {\n      REVERSE_DOW_MAP[DOW_MAP[key]] = key;\n    }\n  }\n\n  var COPY_PARTS = [\"BYSECOND\", \"BYMINUTE\", \"BYHOUR\", \"BYDAY\",\n                    \"BYMONTHDAY\", \"BYYEARDAY\", \"BYWEEKNO\",\n                    \"BYMONTH\", \"BYSETPOS\"];\n\n  /**\n   * @classdesc\n   * This class represents the \"recur\" value type, with various calculation\n   * and manipulation methods.\n   *\n   * @class\n   * @alias ICAL.Recur\n   * @param {Object} data                               An object with members of the recurrence\n   * @param {ICAL.Recur.frequencyValues=} data.freq     The frequency value\n   * @param {Number=} data.interval                     The INTERVAL value\n   * @param {ICAL.Time.weekDay=} data.wkst              The week start value\n   * @param {ICAL.Time=} data.until                     The end of the recurrence set\n   * @param {Number=} data.count                        The number of occurrences\n   * @param {Array.<Number>=} data.bysecond             The seconds for the BYSECOND part\n   * @param {Array.<Number>=} data.byminute             The minutes for the BYMINUTE part\n   * @param {Array.<Number>=} data.byhour               The hours for the BYHOUR part\n   * @param {Array.<String>=} data.byday                The BYDAY values\n   * @param {Array.<Number>=} data.bymonthday           The days for the BYMONTHDAY part\n   * @param {Array.<Number>=} data.byyearday            The days for the BYYEARDAY part\n   * @param {Array.<Number>=} data.byweekno             The weeks for the BYWEEKNO part\n   * @param {Array.<Number>=} data.bymonth              The month for the BYMONTH part\n   * @param {Array.<Number>=} data.bysetpos             The positionals for the BYSETPOS part\n   */\n  ICAL.Recur = function icalrecur(data) {\n    this.wrappedJSObject = this;\n    this.parts = {};\n\n    if (data && typeof(data) === 'object') {\n      this.fromData(data);\n    }\n  };\n\n  ICAL.Recur.prototype = {\n    /**\n     * An object holding the BY-parts of the recurrence rule\n     * @type {Object}\n     */\n    parts: null,\n\n    /**\n     * The interval value for the recurrence rule.\n     * @type {Number}\n     */\n    interval: 1,\n\n    /**\n     * The week start day\n     *\n     * @type {ICAL.Time.weekDay}\n     * @default ICAL.Time.MONDAY\n     */\n    wkst: ICAL.Time.MONDAY,\n\n    /**\n     * The end of the recurrence\n     * @type {?ICAL.Time}\n     */\n    until: null,\n\n    /**\n     * The maximum number of occurrences\n     * @type {?Number}\n     */\n    count: null,\n\n    /**\n     * The frequency value.\n     * @type {ICAL.Recur.frequencyValues}\n     */\n    freq: null,\n\n    /**\n     * The class identifier.\n     * @constant\n     * @type {String}\n     * @default \"icalrecur\"\n     */\n    icalclass: \"icalrecur\",\n\n    /**\n     * The type name, to be used in the jCal object.\n     * @constant\n     * @type {String}\n     * @default \"recur\"\n     */\n    icaltype: \"recur\",\n\n    /**\n     * Create a new iterator for this recurrence rule. The passed start date\n     * must be the start date of the event, not the start of the range to\n     * search in.\n     *\n     * @example\n     * var recur = comp.getFirstPropertyValue('rrule');\n     * var dtstart = comp.getFirstPropertyValue('dtstart');\n     * var iter = recur.iterator(dtstart);\n     * for (var next = iter.next(); next; next = iter.next()) {\n     *   if (next.compare(rangeStart) < 0) {\n     *     continue;\n     *   }\n     *   console.log(next.toString());\n     * }\n     *\n     * @param {ICAL.Time} aStart        The item's start date\n     * @return {ICAL.RecurIterator}     The recurrence iterator\n     */\n    iterator: function(aStart) {\n      return new ICAL.RecurIterator({\n        rule: this,\n        dtstart: aStart\n      });\n    },\n\n    /**\n     * Returns a clone of the recurrence object.\n     *\n     * @return {ICAL.Recur}      The cloned object\n     */\n    clone: function clone() {\n      return new ICAL.Recur(this.toJSON());\n    },\n\n    /**\n     * Checks if the current rule is finite, i.e. has a count or until part.\n     *\n     * @return {Boolean}        True, if the rule is finite\n     */\n    isFinite: function isfinite() {\n      return !!(this.count || this.until);\n    },\n\n    /**\n     * Checks if the current rule has a count part, and not limited by an until\n     * part.\n     *\n     * @return {Boolean}        True, if the rule is by count\n     */\n    isByCount: function isbycount() {\n      return !!(this.count && !this.until);\n    },\n\n    /**\n     * Adds a component (part) to the recurrence rule. This is not a component\n     * in the sense of {@link ICAL.Component}, but a part of the recurrence\n     * rule, i.e. BYMONTH.\n     *\n     * @param {String} aType            The name of the component part\n     * @param {Array|String} aValue     The component value\n     */\n    addComponent: function addPart(aType, aValue) {\n      var ucname = aType.toUpperCase();\n      if (ucname in this.parts) {\n        this.parts[ucname].push(aValue);\n      } else {\n        this.parts[ucname] = [aValue];\n      }\n    },\n\n    /**\n     * Sets the component value for the given by-part.\n     *\n     * @param {String} aType        The component part name\n     * @param {Array} aValues       The component values\n     */\n    setComponent: function setComponent(aType, aValues) {\n      this.parts[aType.toUpperCase()] = aValues.slice();\n    },\n\n    /**\n     * Gets (a copy) of the requested component value.\n     *\n     * @param {String} aType        The component part name\n     * @return {Array}              The component part value\n     */\n    getComponent: function getComponent(aType) {\n      var ucname = aType.toUpperCase();\n      return (ucname in this.parts ? this.parts[ucname].slice() : []);\n    },\n\n    /**\n     * Retrieves the next occurrence after the given recurrence id. See the\n     * guide on {@tutorial terminology} for more details.\n     *\n     * NOTE: Currently, this method iterates all occurrences from the start\n     * date. It should not be called in a loop for performance reasons. If you\n     * would like to get more than one occurrence, you can iterate the\n     * occurrences manually, see the example on the\n     * {@link ICAL.Recur#iterator iterator} method.\n     *\n     * @param {ICAL.Time} aStartTime        The start of the event series\n     * @param {ICAL.Time} aRecurrenceId     The date of the last occurrence\n     * @return {ICAL.Time}                  The next occurrence after\n     */\n    getNextOccurrence: function getNextOccurrence(aStartTime, aRecurrenceId) {\n      var iter = this.iterator(aStartTime);\n      var next, cdt;\n\n      do {\n        next = iter.next();\n      } while (next && next.compare(aRecurrenceId) <= 0);\n\n      if (next && aRecurrenceId.zone) {\n        next.zone = aRecurrenceId.zone;\n      }\n\n      return next;\n    },\n\n    /**\n     * Sets up the current instance using members from the passed data object.\n     *\n     * @param {Object} data                               An object with members of the recurrence\n     * @param {ICAL.Recur.frequencyValues=} data.freq     The frequency value\n     * @param {Number=} data.interval                     The INTERVAL value\n     * @param {ICAL.Time.weekDay=} data.wkst              The week start value\n     * @param {ICAL.Time=} data.until                     The end of the recurrence set\n     * @param {Number=} data.count                        The number of occurrences\n     * @param {Array.<Number>=} data.bysecond             The seconds for the BYSECOND part\n     * @param {Array.<Number>=} data.byminute             The minutes for the BYMINUTE part\n     * @param {Array.<Number>=} data.byhour               The hours for the BYHOUR part\n     * @param {Array.<String>=} data.byday                The BYDAY values\n     * @param {Array.<Number>=} data.bymonthday           The days for the BYMONTHDAY part\n     * @param {Array.<Number>=} data.byyearday            The days for the BYYEARDAY part\n     * @param {Array.<Number>=} data.byweekno             The weeks for the BYWEEKNO part\n     * @param {Array.<Number>=} data.bymonth              The month for the BYMONTH part\n     * @param {Array.<Number>=} data.bysetpos             The positionals for the BYSETPOS part\n     */\n    fromData: function(data) {\n      for (var key in data) {\n        var uckey = key.toUpperCase();\n\n        if (uckey in partDesign) {\n          if (Array.isArray(data[key])) {\n            this.parts[uckey] = data[key];\n          } else {\n            this.parts[uckey] = [data[key]];\n          }\n        } else {\n          this[key] = data[key];\n        }\n      }\n\n      if (this.interval && typeof this.interval != \"number\") {\n        optionDesign.INTERVAL(this.interval, this);\n      }\n\n      if (this.wkst && typeof this.wkst != \"number\") {\n        this.wkst = ICAL.Recur.icalDayToNumericDay(this.wkst);\n      }\n\n      if (this.until && !(this.until instanceof ICAL.Time)) {\n        this.until = ICAL.Time.fromString(this.until);\n      }\n    },\n\n    /**\n     * The jCal representation of this recurrence type.\n     * @return {Object}\n     */\n    toJSON: function() {\n      var res = Object.create(null);\n      res.freq = this.freq;\n\n      if (this.count) {\n        res.count = this.count;\n      }\n\n      if (this.interval > 1) {\n        res.interval = this.interval;\n      }\n\n      for (var k in this.parts) {\n        /* istanbul ignore if */\n        if (!this.parts.hasOwnProperty(k)) {\n          continue;\n        }\n        var kparts = this.parts[k];\n        if (Array.isArray(kparts) && kparts.length == 1) {\n          res[k.toLowerCase()] = kparts[0];\n        } else {\n          res[k.toLowerCase()] = ICAL.helpers.clone(this.parts[k]);\n        }\n      }\n\n      if (this.until) {\n        res.until = this.until.toString();\n      }\n      if ('wkst' in this && this.wkst !== ICAL.Time.DEFAULT_WEEK_START) {\n        res.wkst = ICAL.Recur.numericDayToIcalDay(this.wkst);\n      }\n      return res;\n    },\n\n    /**\n     * The string representation of this recurrence rule.\n     * @return {String}\n     */\n    toString: function icalrecur_toString() {\n      // TODO retain order\n      var str = \"FREQ=\" + this.freq;\n      if (this.count) {\n        str += \";COUNT=\" + this.count;\n      }\n      if (this.interval > 1) {\n        str += \";INTERVAL=\" + this.interval;\n      }\n      for (var k in this.parts) {\n        /* istanbul ignore else */\n        if (this.parts.hasOwnProperty(k)) {\n          str += \";\" + k + \"=\" + this.parts[k];\n        }\n      }\n      if (this.until) {\n        str += ';UNTIL=' + this.until.toICALString();\n      }\n      if ('wkst' in this && this.wkst !== ICAL.Time.DEFAULT_WEEK_START) {\n        str += ';WKST=' + ICAL.Recur.numericDayToIcalDay(this.wkst);\n      }\n      return str;\n    }\n  };\n\n  function parseNumericValue(type, min, max, value) {\n    var result = value;\n\n    if (value[0] === '+') {\n      result = value.substr(1);\n    }\n\n    result = ICAL.helpers.strictParseInt(result);\n\n    if (min !== undefined && value < min) {\n      throw new Error(\n        type + ': invalid value \"' + value + '\" must be > ' + min\n      );\n    }\n\n    if (max !== undefined && value > max) {\n      throw new Error(\n        type + ': invalid value \"' + value + '\" must be < ' + min\n      );\n    }\n\n    return result;\n  }\n\n  /**\n   * Convert an ical representation of a day (SU, MO, etc..)\n   * into a numeric value of that day.\n   *\n   * @param {String} string     The iCalendar day name\n   * @param {ICAL.Time.weekDay=} aWeekStart\n   *        The week start weekday, defaults to SUNDAY\n   * @return {Number}           Numeric value of given day\n   */\n  ICAL.Recur.icalDayToNumericDay = function toNumericDay(string, aWeekStart) {\n    //XXX: this is here so we can deal\n    //     with possibly invalid string values.\n    var firstDow = aWeekStart || ICAL.Time.SUNDAY;\n    return ((DOW_MAP[string] - firstDow + 7) % 7) + 1;\n  };\n\n  /**\n   * Convert a numeric day value into its ical representation (SU, MO, etc..)\n   *\n   * @param {Number} num        Numeric value of given day\n   * @param {ICAL.Time.weekDay=} aWeekStart\n   *        The week start weekday, defaults to SUNDAY\n   * @return {String}           The ICAL day value, e.g SU,MO,...\n   */\n  ICAL.Recur.numericDayToIcalDay = function toIcalDay(num, aWeekStart) {\n    //XXX: this is here so we can deal with possibly invalid number values.\n    //     Also, this allows consistent mapping between day numbers and day\n    //     names for external users.\n    var firstDow = aWeekStart || ICAL.Time.SUNDAY;\n    var dow = (num + firstDow - ICAL.Time.SUNDAY);\n    if (dow > 7) {\n      dow -= 7;\n    }\n    return REVERSE_DOW_MAP[dow];\n  };\n\n  var VALID_DAY_NAMES = /^(SU|MO|TU|WE|TH|FR|SA)$/;\n  var VALID_BYDAY_PART = /^([+-])?(5[0-3]|[1-4][0-9]|[1-9])?(SU|MO|TU|WE|TH|FR|SA)$/;\n\n  /**\n   * Possible frequency values for the FREQ part\n   * (YEARLY, MONTHLY, WEEKLY, DAILY, HOURLY, MINUTELY, SECONDLY)\n   *\n   * @typedef {String} frequencyValues\n   * @memberof ICAL.Recur\n   */\n\n  var ALLOWED_FREQ = ['SECONDLY', 'MINUTELY', 'HOURLY',\n                      'DAILY', 'WEEKLY', 'MONTHLY', 'YEARLY'];\n\n  var optionDesign = {\n    FREQ: function(value, dict, fmtIcal) {\n      // yes this is actually equal or faster then regex.\n      // upside here is we can enumerate the valid values.\n      if (ALLOWED_FREQ.indexOf(value) !== -1) {\n        dict.freq = value;\n      } else {\n        throw new Error(\n          'invalid frequency \"' + value + '\" expected: \"' +\n          ALLOWED_FREQ.join(', ') + '\"'\n        );\n      }\n    },\n\n    COUNT: function(value, dict, fmtIcal) {\n      dict.count = ICAL.helpers.strictParseInt(value);\n    },\n\n    INTERVAL: function(value, dict, fmtIcal) {\n      dict.interval = ICAL.helpers.strictParseInt(value);\n      if (dict.interval < 1) {\n        // 0 or negative values are not allowed, some engines seem to generate\n        // it though. Assume 1 instead.\n        dict.interval = 1;\n      }\n    },\n\n    UNTIL: function(value, dict, fmtIcal) {\n      if (value.length > 10) {\n        dict.until = ICAL.design.icalendar.value['date-time'].fromICAL(value);\n      } else {\n        dict.until = ICAL.design.icalendar.value.date.fromICAL(value);\n      }\n      if (!fmtIcal) {\n        dict.until = ICAL.Time.fromString(dict.until);\n      }\n    },\n\n    WKST: function(value, dict, fmtIcal) {\n      if (VALID_DAY_NAMES.test(value)) {\n        dict.wkst = ICAL.Recur.icalDayToNumericDay(value);\n      } else {\n        throw new Error('invalid WKST value \"' + value + '\"');\n      }\n    }\n  };\n\n  var partDesign = {\n    BYSECOND: parseNumericValue.bind(this, 'BYSECOND', 0, 60),\n    BYMINUTE: parseNumericValue.bind(this, 'BYMINUTE', 0, 59),\n    BYHOUR: parseNumericValue.bind(this, 'BYHOUR', 0, 23),\n    BYDAY: function(value) {\n      if (VALID_BYDAY_PART.test(value)) {\n        return value;\n      } else {\n        throw new Error('invalid BYDAY value \"' + value + '\"');\n      }\n    },\n    BYMONTHDAY: parseNumericValue.bind(this, 'BYMONTHDAY', -31, 31),\n    BYYEARDAY: parseNumericValue.bind(this, 'BYYEARDAY', -366, 366),\n    BYWEEKNO: parseNumericValue.bind(this, 'BYWEEKNO', -53, 53),\n    BYMONTH: parseNumericValue.bind(this, 'BYMONTH', 0, 12),\n    BYSETPOS: parseNumericValue.bind(this, 'BYSETPOS', -366, 366)\n  };\n\n\n  /**\n   * Creates a new {@link ICAL.Recur} instance from the passed string.\n   *\n   * @param {String} string         The string to parse\n   * @return {ICAL.Recur}           The created recurrence instance\n   */\n  ICAL.Recur.fromString = function(string) {\n    var data = ICAL.Recur._stringToData(string, false);\n    return new ICAL.Recur(data);\n  };\n\n  /**\n   * Creates a new {@link ICAL.Recur} instance using members from the passed\n   * data object.\n   *\n   * @param {Object} aData                              An object with members of the recurrence\n   * @param {ICAL.Recur.frequencyValues=} aData.freq    The frequency value\n   * @param {Number=} aData.interval                    The INTERVAL value\n   * @param {ICAL.Time.weekDay=} aData.wkst             The week start value\n   * @param {ICAL.Time=} aData.until                    The end of the recurrence set\n   * @param {Number=} aData.count                       The number of occurrences\n   * @param {Array.<Number>=} aData.bysecond            The seconds for the BYSECOND part\n   * @param {Array.<Number>=} aData.byminute            The minutes for the BYMINUTE part\n   * @param {Array.<Number>=} aData.byhour              The hours for the BYHOUR part\n   * @param {Array.<String>=} aData.byday               The BYDAY values\n   * @param {Array.<Number>=} aData.bymonthday          The days for the BYMONTHDAY part\n   * @param {Array.<Number>=} aData.byyearday           The days for the BYYEARDAY part\n   * @param {Array.<Number>=} aData.byweekno            The weeks for the BYWEEKNO part\n   * @param {Array.<Number>=} aData.bymonth             The month for the BYMONTH part\n   * @param {Array.<Number>=} aData.bysetpos            The positionals for the BYSETPOS part\n   */\n  ICAL.Recur.fromData = function(aData) {\n    return new ICAL.Recur(aData);\n  };\n\n  /**\n   * Converts a recurrence string to a data object, suitable for the fromData\n   * method.\n   *\n   * @param {String} string     The string to parse\n   * @param {Boolean} fmtIcal   If true, the string is considered to be an\n   *                              iCalendar string\n   * @return {ICAL.Recur}       The recurrence instance\n   */\n  ICAL.Recur._stringToData = function(string, fmtIcal) {\n    var dict = Object.create(null);\n\n    // split is slower in FF but fast enough.\n    // v8 however this is faster then manual split?\n    var values = string.split(';');\n    var len = values.length;\n\n    for (var i = 0; i < len; i++) {\n      var parts = values[i].split('=');\n      var ucname = parts[0].toUpperCase();\n      var lcname = parts[0].toLowerCase();\n      var name = (fmtIcal ? lcname : ucname);\n      var value = parts[1];\n\n      if (ucname in partDesign) {\n        var partArr = value.split(',');\n        var partArrIdx = 0;\n        var partArrLen = partArr.length;\n\n        for (; partArrIdx < partArrLen; partArrIdx++) {\n          partArr[partArrIdx] = partDesign[ucname](partArr[partArrIdx]);\n        }\n        dict[name] = (partArr.length == 1 ? partArr[0] : partArr);\n      } else if (ucname in optionDesign) {\n        optionDesign[ucname](value, dict, fmtIcal);\n      } else {\n        // Don't swallow unknown values. Just set them as they are.\n        dict[lcname] = value;\n      }\n    }\n\n    return dict;\n  };\n})();\n/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\n * Portions Copyright (C) Philipp Kewisch, 2011-2015 */\n\n\n/**\n * This symbol is further described later on\n * @ignore\n */\nICAL.RecurIterator = (function() {\n\n  /**\n   * @classdesc\n   * An iterator for a single recurrence rule. This class usually doesn't have\n   * to be instanciated directly, the convenience method\n   * {@link ICAL.Recur#iterator} can be used.\n   *\n   * @description\n   * The options object may contain additional members when resuming iteration from a previous run\n   *\n   * @description\n   * The options object may contain additional members when resuming iteration\n   * from a previous run.\n   *\n   * @class\n   * @alias ICAL.RecurIterator\n   * @param {Object} options                The iterator options\n   * @param {ICAL.Recur} options.rule       The rule to iterate.\n   * @param {ICAL.Time} options.dtstart     The start date of the event.\n   * @param {Boolean=} options.initialized  When true, assume that options are\n   *        from a previously constructed iterator. Initialization will not be\n   *        repeated.\n   */\n  function icalrecur_iterator(options) {\n    this.fromData(options);\n  }\n\n  icalrecur_iterator.prototype = {\n\n    /**\n     * True when iteration is finished.\n     * @type {Boolean}\n     */\n    completed: false,\n\n    /**\n     * The rule that is being iterated\n     * @type {ICAL.Recur}\n     */\n    rule: null,\n\n    /**\n     * The start date of the event being iterated.\n     * @type {ICAL.Time}\n     */\n    dtstart: null,\n\n    /**\n     * The last occurrence that was returned from the\n     * {@link ICAL.RecurIterator#next} method.\n     * @type {ICAL.Time}\n     */\n    last: null,\n\n    /**\n     * The sequence number from the occurrence\n     * @type {Number}\n     */\n    occurrence_number: 0,\n\n    /**\n     * The indices used for the {@link ICAL.RecurIterator#by_data} object.\n     * @type {Object}\n     * @private\n     */\n    by_indices: null,\n\n    /**\n     * If true, the iterator has already been initialized\n     * @type {Boolean}\n     * @private\n     */\n    initialized: false,\n\n    /**\n     * The initializd by-data.\n     * @type {Object}\n     * @private\n     */\n    by_data: null,\n\n    /**\n     * The expanded yeardays\n     * @type {Array}\n     * @private\n     */\n    days: null,\n\n    /**\n     * The index in the {@link ICAL.RecurIterator#days} array.\n     * @type {Number}\n     * @private\n     */\n    days_index: 0,\n\n    /**\n     * Initialize the recurrence iterator from the passed data object. This\n     * method is usually not called directly, you can initialize the iterator\n     * through the constructor.\n     *\n     * @param {Object} options                The iterator options\n     * @param {ICAL.Recur} options.rule       The rule to iterate.\n     * @param {ICAL.Time} options.dtstart     The start date of the event.\n     * @param {Boolean=} options.initialized  When true, assume that options are\n     *        from a previously constructed iterator. Initialization will not be\n     *        repeated.\n     */\n    fromData: function(options) {\n      this.rule = ICAL.helpers.formatClassType(options.rule, ICAL.Recur);\n\n      if (!this.rule) {\n        throw new Error('iterator requires a (ICAL.Recur) rule');\n      }\n\n      this.dtstart = ICAL.helpers.formatClassType(options.dtstart, ICAL.Time);\n\n      if (!this.dtstart) {\n        throw new Error('iterator requires a (ICAL.Time) dtstart');\n      }\n\n      if (options.by_data) {\n        this.by_data = options.by_data;\n      } else {\n        this.by_data = ICAL.helpers.clone(this.rule.parts, true);\n      }\n\n      if (options.occurrence_number)\n        this.occurrence_number = options.occurrence_number;\n\n      this.days = options.days || [];\n      if (options.last) {\n        this.last = ICAL.helpers.formatClassType(options.last, ICAL.Time);\n      }\n\n      this.by_indices = options.by_indices;\n\n      if (!this.by_indices) {\n        this.by_indices = {\n          \"BYSECOND\": 0,\n          \"BYMINUTE\": 0,\n          \"BYHOUR\": 0,\n          \"BYDAY\": 0,\n          \"BYMONTH\": 0,\n          \"BYWEEKNO\": 0,\n          \"BYMONTHDAY\": 0\n        };\n      }\n\n      this.initialized = options.initialized || false;\n\n      if (!this.initialized) {\n        this.init();\n      }\n    },\n\n    /**\n     * Intialize the iterator\n     * @private\n     */\n    init: function icalrecur_iterator_init() {\n      this.initialized = true;\n      this.last = this.dtstart.clone();\n      var parts = this.by_data;\n\n      if (\"BYDAY\" in parts) {\n        // libical does this earlier when the rule is loaded, but we postpone to\n        // now so we can preserve the original order.\n        this.sort_byday_rules(parts.BYDAY);\n      }\n\n      // If the BYYEARDAY appares, no other date rule part may appear\n      if (\"BYYEARDAY\" in parts) {\n        if (\"BYMONTH\" in parts || \"BYWEEKNO\" in parts ||\n            \"BYMONTHDAY\" in parts || \"BYDAY\" in parts) {\n          throw new Error(\"Invalid BYYEARDAY rule\");\n        }\n      }\n\n      // BYWEEKNO and BYMONTHDAY rule parts may not both appear\n      if (\"BYWEEKNO\" in parts && \"BYMONTHDAY\" in parts) {\n        throw new Error(\"BYWEEKNO does not fit to BYMONTHDAY\");\n      }\n\n      // For MONTHLY recurrences (FREQ=MONTHLY) neither BYYEARDAY nor\n      // BYWEEKNO may appear.\n      if (this.rule.freq == \"MONTHLY\" &&\n          (\"BYYEARDAY\" in parts || \"BYWEEKNO\" in parts)) {\n        throw new Error(\"For MONTHLY recurrences neither BYYEARDAY nor BYWEEKNO may appear\");\n      }\n\n      // For WEEKLY recurrences (FREQ=WEEKLY) neither BYMONTHDAY nor\n      // BYYEARDAY may appear.\n      if (this.rule.freq == \"WEEKLY\" &&\n          (\"BYYEARDAY\" in parts || \"BYMONTHDAY\" in parts)) {\n        throw new Error(\"For WEEKLY recurrences neither BYMONTHDAY nor BYYEARDAY may appear\");\n      }\n\n      // BYYEARDAY may only appear in YEARLY rules\n      if (this.rule.freq != \"YEARLY\" && \"BYYEARDAY\" in parts) {\n        throw new Error(\"BYYEARDAY may only appear in YEARLY rules\");\n      }\n\n      this.last.second = this.setup_defaults(\"BYSECOND\", \"SECONDLY\", this.dtstart.second);\n      this.last.minute = this.setup_defaults(\"BYMINUTE\", \"MINUTELY\", this.dtstart.minute);\n      this.last.hour = this.setup_defaults(\"BYHOUR\", \"HOURLY\", this.dtstart.hour);\n      this.last.day = this.setup_defaults(\"BYMONTHDAY\", \"DAILY\", this.dtstart.day);\n      this.last.month = this.setup_defaults(\"BYMONTH\", \"MONTHLY\", this.dtstart.month);\n\n      if (this.rule.freq == \"WEEKLY\") {\n        if (\"BYDAY\" in parts) {\n          var bydayParts = this.ruleDayOfWeek(parts.BYDAY[0], this.rule.wkst);\n          var pos = bydayParts[0];\n          var dow = bydayParts[1];\n          var wkdy = dow - this.last.dayOfWeek(this.rule.wkst);\n          if ((this.last.dayOfWeek(this.rule.wkst) < dow && wkdy >= 0) || wkdy < 0) {\n            // Initial time is after first day of BYDAY data\n            this.last.day += wkdy;\n          }\n        } else {\n          var dayName = ICAL.Recur.numericDayToIcalDay(this.dtstart.dayOfWeek());\n          parts.BYDAY = [dayName];\n        }\n      }\n\n      if (this.rule.freq == \"YEARLY\") {\n        for (;;) {\n          this.expand_year_days(this.last.year);\n          if (this.days.length > 0) {\n            break;\n          }\n          this.increment_year(this.rule.interval);\n        }\n\n        this._nextByYearDay();\n      }\n\n      if (this.rule.freq == \"MONTHLY\" && this.has_by_data(\"BYDAY\")) {\n        var tempLast = null;\n        var initLast = this.last.clone();\n        var daysInMonth = ICAL.Time.daysInMonth(this.last.month, this.last.year);\n\n        // Check every weekday in BYDAY with relative dow and pos.\n        for (var i in this.by_data.BYDAY) {\n          /* istanbul ignore if */\n          if (!this.by_data.BYDAY.hasOwnProperty(i)) {\n            continue;\n          }\n          this.last = initLast.clone();\n          var bydayParts = this.ruleDayOfWeek(this.by_data.BYDAY[i]);\n          var pos = bydayParts[0];\n          var dow = bydayParts[1];\n          var dayOfMonth = this.last.nthWeekDay(dow, pos);\n\n          // If |pos| >= 6, the byday is invalid for a monthly rule.\n          if (pos >= 6 || pos <= -6) {\n            throw new Error(\"Malformed values in BYDAY part\");\n          }\n\n          // If a Byday with pos=+/-5 is not in the current month it\n          // must be searched in the next months.\n          if (dayOfMonth > daysInMonth || dayOfMonth <= 0) {\n            // Skip if we have already found a \"last\" in this month.\n            if (tempLast && tempLast.month == initLast.month) {\n              continue;\n            }\n            while (dayOfMonth > daysInMonth || dayOfMonth <= 0) {\n              this.increment_month();\n              daysInMonth = ICAL.Time.daysInMonth(this.last.month, this.last.year);\n              dayOfMonth = this.last.nthWeekDay(dow, pos);\n            }\n          }\n\n          this.last.day = dayOfMonth;\n          if (!tempLast || this.last.compare(tempLast) < 0) {\n            tempLast = this.last.clone();\n          }\n        }\n        this.last = tempLast.clone();\n\n        //XXX: This feels like a hack, but we need to initialize\n        //     the BYMONTHDAY case correctly and byDayAndMonthDay handles\n        //     this case. It accepts a special flag which will avoid incrementing\n        //     the initial value without the flag days that match the start time\n        //     would be missed.\n        if (this.has_by_data('BYMONTHDAY')) {\n          this._byDayAndMonthDay(true);\n        }\n\n        if (this.last.day > daysInMonth || this.last.day == 0) {\n          throw new Error(\"Malformed values in BYDAY part\");\n        }\n\n      } else if (this.has_by_data(\"BYMONTHDAY\")) {\n        if (this.last.day < 0) {\n          var daysInMonth = ICAL.Time.daysInMonth(this.last.month, this.last.year);\n          this.last.day = daysInMonth + this.last.day + 1;\n        }\n      }\n\n    },\n\n    /**\n     * Retrieve the next occurrence from the iterator.\n     * @return {ICAL.Time}\n     */\n    next: function icalrecur_iterator_next() {\n      var before = (this.last ? this.last.clone() : null);\n\n      if ((this.rule.count && this.occurrence_number >= this.rule.count) ||\n          (this.rule.until && this.last.compare(this.rule.until) > 0)) {\n\n        //XXX: right now this is just a flag and has no impact\n        //     we can simplify the above case to check for completed later.\n        this.completed = true;\n\n        return null;\n      }\n\n      if (this.occurrence_number == 0 && this.last.compare(this.dtstart) >= 0) {\n        // First of all, give the instance that was initialized\n        this.occurrence_number++;\n        return this.last;\n      }\n\n\n      var valid;\n      do {\n        valid = 1;\n\n        switch (this.rule.freq) {\n        case \"SECONDLY\":\n          this.next_second();\n          break;\n        case \"MINUTELY\":\n          this.next_minute();\n          break;\n        case \"HOURLY\":\n          this.next_hour();\n          break;\n        case \"DAILY\":\n          this.next_day();\n          break;\n        case \"WEEKLY\":\n          this.next_week();\n          break;\n        case \"MONTHLY\":\n          valid = this.next_month();\n          break;\n        case \"YEARLY\":\n          this.next_year();\n          break;\n\n        default:\n          return null;\n        }\n      } while (!this.check_contracting_rules() ||\n               this.last.compare(this.dtstart) < 0 ||\n               !valid);\n\n      // TODO is this valid?\n      if (this.last.compare(before) == 0) {\n        throw new Error(\"Same occurrence found twice, protecting \" +\n                        \"you from death by recursion\");\n      }\n\n      if (this.rule.until && this.last.compare(this.rule.until) > 0) {\n        this.completed = true;\n        return null;\n      } else {\n        this.occurrence_number++;\n        return this.last;\n      }\n    },\n\n    next_second: function next_second() {\n      return this.next_generic(\"BYSECOND\", \"SECONDLY\", \"second\", \"minute\");\n    },\n\n    increment_second: function increment_second(inc) {\n      return this.increment_generic(inc, \"second\", 60, \"minute\");\n    },\n\n    next_minute: function next_minute() {\n      return this.next_generic(\"BYMINUTE\", \"MINUTELY\",\n                               \"minute\", \"hour\", \"next_second\");\n    },\n\n    increment_minute: function increment_minute(inc) {\n      return this.increment_generic(inc, \"minute\", 60, \"hour\");\n    },\n\n    next_hour: function next_hour() {\n      return this.next_generic(\"BYHOUR\", \"HOURLY\", \"hour\",\n                               \"monthday\", \"next_minute\");\n    },\n\n    increment_hour: function increment_hour(inc) {\n      this.increment_generic(inc, \"hour\", 24, \"monthday\");\n    },\n\n    next_day: function next_day() {\n      var has_by_day = (\"BYDAY\" in this.by_data);\n      var this_freq = (this.rule.freq == \"DAILY\");\n\n      if (this.next_hour() == 0) {\n        return 0;\n      }\n\n      if (this_freq) {\n        this.increment_monthday(this.rule.interval);\n      } else {\n        this.increment_monthday(1);\n      }\n\n      return 0;\n    },\n\n    next_week: function next_week() {\n      var end_of_data = 0;\n\n      if (this.next_weekday_by_week() == 0) {\n        return end_of_data;\n      }\n\n      if (this.has_by_data(\"BYWEEKNO\")) {\n        var idx = ++this.by_indices.BYWEEKNO;\n\n        if (this.by_indices.BYWEEKNO == this.by_data.BYWEEKNO.length) {\n          this.by_indices.BYWEEKNO = 0;\n          end_of_data = 1;\n        }\n\n        // HACK should be first month of the year\n        this.last.month = 1;\n        this.last.day = 1;\n\n        var week_no = this.by_data.BYWEEKNO[this.by_indices.BYWEEKNO];\n\n        this.last.day += 7 * week_no;\n\n        if (end_of_data) {\n          this.increment_year(1);\n        }\n      } else {\n        // Jump to the next week\n        this.increment_monthday(7 * this.rule.interval);\n      }\n\n      return end_of_data;\n    },\n\n    /**\n     * Normalize each by day rule for a given year/month.\n     * Takes into account ordering and negative rules\n     *\n     * @private\n     * @param {Number} year         Current year.\n     * @param {Number} month        Current month.\n     * @param {Array}  rules        Array of rules.\n     *\n     * @return {Array} sorted and normalized rules.\n     *                 Negative rules will be expanded to their\n     *                 correct positive values for easier processing.\n     */\n    normalizeByMonthDayRules: function(year, month, rules) {\n      var daysInMonth = ICAL.Time.daysInMonth(month, year);\n\n      // XXX: This is probably bad for performance to allocate\n      //      a new array for each month we scan, if possible\n      //      we should try to optimize this...\n      var newRules = [];\n\n      var ruleIdx = 0;\n      var len = rules.length;\n      var rule;\n\n      for (; ruleIdx < len; ruleIdx++) {\n        rule = rules[ruleIdx];\n\n        // if this rule falls outside of given\n        // month discard it.\n        if (Math.abs(rule) > daysInMonth) {\n          continue;\n        }\n\n        // negative case\n        if (rule < 0) {\n          // we add (not subtract its a negative number)\n          // one from the rule because 1 === last day of month\n          rule = daysInMonth + (rule + 1);\n        } else if (rule === 0) {\n          // skip zero its invalid.\n          continue;\n        }\n\n        // only add unique items...\n        if (newRules.indexOf(rule) === -1) {\n          newRules.push(rule);\n        }\n\n      }\n\n      // unique and sort\n      return newRules.sort(function(a, b) { return a - b; });\n    },\n\n    /**\n     * NOTES:\n     * We are given a list of dates in the month (BYMONTHDAY) (23, etc..)\n     * Also we are given a list of days (BYDAY) (MO, 2SU, etc..) when\n     * both conditions match a given date (this.last.day) iteration stops.\n     *\n     * @private\n     * @param {Boolean=} isInit     When given true will not increment the\n     *                                current day (this.last).\n     */\n    _byDayAndMonthDay: function(isInit) {\n      var byMonthDay; // setup in initMonth\n      var byDay = this.by_data.BYDAY;\n\n      var date;\n      var dateIdx = 0;\n      var dateLen; // setup in initMonth\n      var dayLen = byDay.length;\n\n      // we are not valid by default\n      var dataIsValid = 0;\n\n      var daysInMonth;\n      var self = this;\n      // we need a copy of this, because a DateTime gets normalized\n      // automatically if the day is out of range. At some points we\n      // set the last day to 0 to start counting.\n      var lastDay = this.last.day;\n\n      function initMonth() {\n        daysInMonth = ICAL.Time.daysInMonth(\n          self.last.month, self.last.year\n        );\n\n        byMonthDay = self.normalizeByMonthDayRules(\n          self.last.year,\n          self.last.month,\n          self.by_data.BYMONTHDAY\n        );\n\n        dateLen = byMonthDay.length;\n\n        // For the case of more than one occurrence in one month\n        // we have to be sure to start searching after the last\n        // found date or at the last BYMONTHDAY, unless we are\n        // initializing the iterator because in this case we have\n        // to consider the last found date too.\n        while (byMonthDay[dateIdx] <= lastDay &&\n               !(isInit && byMonthDay[dateIdx] == lastDay) &&\n               dateIdx < dateLen - 1) {\n          dateIdx++;\n        }\n      }\n\n      function nextMonth() {\n        // since the day is incremented at the start\n        // of the loop below, we need to start at 0\n        lastDay = 0;\n        self.increment_month();\n        dateIdx = 0;\n        initMonth();\n      }\n\n      initMonth();\n\n      // should come after initMonth\n      if (isInit) {\n        lastDay -= 1;\n      }\n\n      // Use a counter to avoid an infinite loop with malformed rules.\n      // Stop checking after 4 years so we consider also a leap year.\n      var monthsCounter = 48;\n\n      while (!dataIsValid && monthsCounter) {\n        monthsCounter--;\n        // increment the current date. This is really\n        // important otherwise we may fall into the infinite\n        // loop trap. The initial date takes care of the case\n        // where the current date is the date we are looking\n        // for.\n        date = lastDay + 1;\n\n        if (date > daysInMonth) {\n          nextMonth();\n          continue;\n        }\n\n        // find next date\n        var next = byMonthDay[dateIdx++];\n\n        // this logic is dependant on the BYMONTHDAYS\n        // being in order (which is done by #normalizeByMonthDayRules)\n        if (next >= date) {\n          // if the next month day is in the future jump to it.\n          lastDay = next;\n        } else {\n          // in this case the 'next' monthday has past\n          // we must move to the month.\n          nextMonth();\n          continue;\n        }\n\n        // Now we can loop through the day rules to see\n        // if one matches the current month date.\n        for (var dayIdx = 0; dayIdx < dayLen; dayIdx++) {\n          var parts = this.ruleDayOfWeek(byDay[dayIdx]);\n          var pos = parts[0];\n          var dow = parts[1];\n\n          this.last.day = lastDay;\n          if (this.last.isNthWeekDay(dow, pos)) {\n            // when we find the valid one we can mark\n            // the conditions as met and break the loop.\n            // (Because we have this condition above\n            //  it will also break the parent loop).\n            dataIsValid = 1;\n            break;\n          }\n        }\n\n        // Its completely possible that the combination\n        // cannot be matched in the current month.\n        // When we reach the end of possible combinations\n        // in the current month we iterate to the next one.\n        // since dateIdx is incremented right after getting\n        // \"next\", we don't need dateLen -1 here.\n        if (!dataIsValid && dateIdx === dateLen) {\n          nextMonth();\n          continue;\n        }\n      }\n\n      if (monthsCounter <= 0) {\n        // Checked 4 years without finding a Byday that matches\n        // a Bymonthday. Maybe the rule is not correct.\n        throw new Error(\"Malformed values in BYDAY combined with BYMONTHDAY parts\");\n      }\n\n\n      return dataIsValid;\n    },\n\n    next_month: function next_month() {\n      var this_freq = (this.rule.freq == \"MONTHLY\");\n      var data_valid = 1;\n\n      if (this.next_hour() == 0) {\n        return data_valid;\n      }\n\n      if (this.has_by_data(\"BYDAY\") && this.has_by_data(\"BYMONTHDAY\")) {\n        data_valid = this._byDayAndMonthDay();\n      } else if (this.has_by_data(\"BYDAY\")) {\n        var daysInMonth = ICAL.Time.daysInMonth(this.last.month, this.last.year);\n        var setpos = 0;\n        var setpos_total = 0;\n\n        if (this.has_by_data(\"BYSETPOS\")) {\n          var last_day = this.last.day;\n          for (var day = 1; day <= daysInMonth; day++) {\n            this.last.day = day;\n            if (this.is_day_in_byday(this.last)) {\n              setpos_total++;\n              if (day <= last_day) {\n                setpos++;\n              }\n            }\n          }\n          this.last.day = last_day;\n        }\n\n        data_valid = 0;\n        for (var day = this.last.day + 1; day <= daysInMonth; day++) {\n          this.last.day = day;\n\n          if (this.is_day_in_byday(this.last)) {\n            if (!this.has_by_data(\"BYSETPOS\") ||\n                this.check_set_position(++setpos) ||\n                this.check_set_position(setpos - setpos_total - 1)) {\n\n              data_valid = 1;\n              break;\n            }\n          }\n        }\n\n        if (day > daysInMonth) {\n          this.last.day = 1;\n          this.increment_month();\n\n          if (this.is_day_in_byday(this.last)) {\n            if (!this.has_by_data(\"BYSETPOS\") || this.check_set_position(1)) {\n              data_valid = 1;\n            }\n          } else {\n            data_valid = 0;\n          }\n        }\n      } else if (this.has_by_data(\"BYMONTHDAY\")) {\n        this.by_indices.BYMONTHDAY++;\n\n        if (this.by_indices.BYMONTHDAY >= this.by_data.BYMONTHDAY.length) {\n          this.by_indices.BYMONTHDAY = 0;\n          this.increment_month();\n        }\n\n        var daysInMonth = ICAL.Time.daysInMonth(this.last.month, this.last.year);\n        var day = this.by_data.BYMONTHDAY[this.by_indices.BYMONTHDAY];\n\n        if (day < 0) {\n          day = daysInMonth + day + 1;\n        }\n\n        if (day > daysInMonth) {\n          this.last.day = 1;\n          data_valid = this.is_day_in_byday(this.last);\n        } else {\n          this.last.day = day;\n        }\n\n      } else {\n        this.increment_month();\n        var daysInMonth = ICAL.Time.daysInMonth(this.last.month, this.last.year);\n        if (this.by_data.BYMONTHDAY[0] > daysInMonth) {\n          data_valid = 0;\n        } else {\n          this.last.day = this.by_data.BYMONTHDAY[0];\n        }\n      }\n\n      return data_valid;\n    },\n\n    next_weekday_by_week: function next_weekday_by_week() {\n      var end_of_data = 0;\n\n      if (this.next_hour() == 0) {\n        return end_of_data;\n      }\n\n      if (!this.has_by_data(\"BYDAY\")) {\n        return 1;\n      }\n\n      for (;;) {\n        var tt = new ICAL.Time();\n        this.by_indices.BYDAY++;\n\n        if (this.by_indices.BYDAY == Object.keys(this.by_data.BYDAY).length) {\n          this.by_indices.BYDAY = 0;\n          end_of_data = 1;\n        }\n\n        var coded_day = this.by_data.BYDAY[this.by_indices.BYDAY];\n        var parts = this.ruleDayOfWeek(coded_day);\n        var dow = parts[1];\n\n        dow -= this.rule.wkst;\n\n        if (dow < 0) {\n          dow += 7;\n        }\n\n        tt.year = this.last.year;\n        tt.month = this.last.month;\n        tt.day = this.last.day;\n\n        var startOfWeek = tt.startDoyWeek(this.rule.wkst);\n\n        if (dow + startOfWeek < 1) {\n          // The selected date is in the previous year\n          if (!end_of_data) {\n            continue;\n          }\n        }\n\n        var next = ICAL.Time.fromDayOfYear(startOfWeek + dow,\n                                                  this.last.year);\n\n        /**\n         * The normalization horrors below are due to\n         * the fact that when the year/month/day changes\n         * it can effect the other operations that come after.\n         */\n        this.last.year = next.year;\n        this.last.month = next.month;\n        this.last.day = next.day;\n\n        return end_of_data;\n      }\n    },\n\n    next_year: function next_year() {\n\n      if (this.next_hour() == 0) {\n        return 0;\n      }\n\n      if (++this.days_index == this.days.length) {\n        this.days_index = 0;\n        do {\n          this.increment_year(this.rule.interval);\n          this.expand_year_days(this.last.year);\n        } while (this.days.length == 0);\n      }\n\n      this._nextByYearDay();\n\n      return 1;\n    },\n\n    _nextByYearDay: function _nextByYearDay() {\n        var doy = this.days[this.days_index];\n        var year = this.last.year;\n        if (doy < 1) {\n            // Time.fromDayOfYear(doy, year) indexes relative to the\n            // start of the given year. That is different from the\n            // semantics of BYYEARDAY where negative indexes are an\n            // offset from the end of the given year.\n            doy += 1;\n            year += 1;\n        }\n        var next = ICAL.Time.fromDayOfYear(doy, year);\n        this.last.day = next.day;\n        this.last.month = next.month;\n    },\n\n    /**\n     * @param dow (eg: '1TU', '-1MO')\n     * @param {ICAL.Time.weekDay=} aWeekStart The week start weekday\n     * @return [pos, numericDow] (eg: [1, 3]) numericDow is relative to aWeekStart\n     */\n    ruleDayOfWeek: function ruleDayOfWeek(dow, aWeekStart) {\n      var matches = dow.match(/([+-]?[0-9])?(MO|TU|WE|TH|FR|SA|SU)/);\n      if (matches) {\n        var pos = parseInt(matches[1] || 0, 10);\n        dow = ICAL.Recur.icalDayToNumericDay(matches[2], aWeekStart);\n        return [pos, dow];\n      } else {\n        return [0, 0];\n      }\n    },\n\n    next_generic: function next_generic(aRuleType, aInterval, aDateAttr,\n                                        aFollowingAttr, aPreviousIncr) {\n      var has_by_rule = (aRuleType in this.by_data);\n      var this_freq = (this.rule.freq == aInterval);\n      var end_of_data = 0;\n\n      if (aPreviousIncr && this[aPreviousIncr]() == 0) {\n        return end_of_data;\n      }\n\n      if (has_by_rule) {\n        this.by_indices[aRuleType]++;\n        var idx = this.by_indices[aRuleType];\n        var dta = this.by_data[aRuleType];\n\n        if (this.by_indices[aRuleType] == dta.length) {\n          this.by_indices[aRuleType] = 0;\n          end_of_data = 1;\n        }\n        this.last[aDateAttr] = dta[this.by_indices[aRuleType]];\n      } else if (this_freq) {\n        this[\"increment_\" + aDateAttr](this.rule.interval);\n      }\n\n      if (has_by_rule && end_of_data && this_freq) {\n        this[\"increment_\" + aFollowingAttr](1);\n      }\n\n      return end_of_data;\n    },\n\n    increment_monthday: function increment_monthday(inc) {\n      for (var i = 0; i < inc; i++) {\n        var daysInMonth = ICAL.Time.daysInMonth(this.last.month, this.last.year);\n        this.last.day++;\n\n        if (this.last.day > daysInMonth) {\n          this.last.day -= daysInMonth;\n          this.increment_month();\n        }\n      }\n    },\n\n    increment_month: function increment_month() {\n      this.last.day = 1;\n      if (this.has_by_data(\"BYMONTH\")) {\n        this.by_indices.BYMONTH++;\n\n        if (this.by_indices.BYMONTH == this.by_data.BYMONTH.length) {\n          this.by_indices.BYMONTH = 0;\n          this.increment_year(1);\n        }\n\n        this.last.month = this.by_data.BYMONTH[this.by_indices.BYMONTH];\n      } else {\n        if (this.rule.freq == \"MONTHLY\") {\n          this.last.month += this.rule.interval;\n        } else {\n          this.last.month++;\n        }\n\n        this.last.month--;\n        var years = ICAL.helpers.trunc(this.last.month / 12);\n        this.last.month %= 12;\n        this.last.month++;\n\n        if (years != 0) {\n          this.increment_year(years);\n        }\n      }\n    },\n\n    increment_year: function increment_year(inc) {\n      this.last.year += inc;\n    },\n\n    increment_generic: function increment_generic(inc, aDateAttr,\n                                                  aFactor, aNextIncrement) {\n      this.last[aDateAttr] += inc;\n      var nextunit = ICAL.helpers.trunc(this.last[aDateAttr] / aFactor);\n      this.last[aDateAttr] %= aFactor;\n      if (nextunit != 0) {\n        this[\"increment_\" + aNextIncrement](nextunit);\n      }\n    },\n\n    has_by_data: function has_by_data(aRuleType) {\n      return (aRuleType in this.rule.parts);\n    },\n\n    expand_year_days: function expand_year_days(aYear) {\n      var t = new ICAL.Time();\n      this.days = [];\n\n      // We need our own copy with a few keys set\n      var parts = {};\n      var rules = [\"BYDAY\", \"BYWEEKNO\", \"BYMONTHDAY\", \"BYMONTH\", \"BYYEARDAY\"];\n      for (var p in rules) {\n        /* istanbul ignore else */\n        if (rules.hasOwnProperty(p)) {\n          var part = rules[p];\n          if (part in this.rule.parts) {\n            parts[part] = this.rule.parts[part];\n          }\n        }\n      }\n\n      if (\"BYMONTH\" in parts && \"BYWEEKNO\" in parts) {\n        var valid = 1;\n        var validWeeks = {};\n        t.year = aYear;\n        t.isDate = true;\n\n        for (var monthIdx = 0; monthIdx < this.by_data.BYMONTH.length; monthIdx++) {\n          var month = this.by_data.BYMONTH[monthIdx];\n          t.month = month;\n          t.day = 1;\n          var first_week = t.weekNumber(this.rule.wkst);\n          t.day = ICAL.Time.daysInMonth(month, aYear);\n          var last_week = t.weekNumber(this.rule.wkst);\n          for (monthIdx = first_week; monthIdx < last_week; monthIdx++) {\n            validWeeks[monthIdx] = 1;\n          }\n        }\n\n        for (var weekIdx = 0; weekIdx < this.by_data.BYWEEKNO.length && valid; weekIdx++) {\n          var weekno = this.by_data.BYWEEKNO[weekIdx];\n          if (weekno < 52) {\n            valid &= validWeeks[weekIdx];\n          } else {\n            valid = 0;\n          }\n        }\n\n        if (valid) {\n          delete parts.BYMONTH;\n        } else {\n          delete parts.BYWEEKNO;\n        }\n      }\n\n      var partCount = Object.keys(parts).length;\n\n      if (partCount == 0) {\n        var t1 = this.dtstart.clone();\n        t1.year = this.last.year;\n        this.days.push(t1.dayOfYear());\n      } else if (partCount == 1 && \"BYMONTH\" in parts) {\n        for (var monthkey in this.by_data.BYMONTH) {\n          /* istanbul ignore if */\n          if (!this.by_data.BYMONTH.hasOwnProperty(monthkey)) {\n            continue;\n          }\n          var t2 = this.dtstart.clone();\n          t2.year = aYear;\n          t2.month = this.by_data.BYMONTH[monthkey];\n          t2.isDate = true;\n          this.days.push(t2.dayOfYear());\n        }\n      } else if (partCount == 1 && \"BYMONTHDAY\" in parts) {\n        for (var monthdaykey in this.by_data.BYMONTHDAY) {\n          /* istanbul ignore if */\n          if (!this.by_data.BYMONTHDAY.hasOwnProperty(monthdaykey)) {\n            continue;\n          }\n          var t3 = this.dtstart.clone();\n          var day_ = this.by_data.BYMONTHDAY[monthdaykey];\n          if (day_ < 0) {\n            var daysInMonth = ICAL.Time.daysInMonth(t3.month, aYear);\n            day_ = day_ + daysInMonth + 1;\n          }\n          t3.day = day_;\n          t3.year = aYear;\n          t3.isDate = true;\n          this.days.push(t3.dayOfYear());\n        }\n      } else if (partCount == 2 &&\n                 \"BYMONTHDAY\" in parts &&\n                 \"BYMONTH\" in parts) {\n        for (var monthkey in this.by_data.BYMONTH) {\n          /* istanbul ignore if */\n          if (!this.by_data.BYMONTH.hasOwnProperty(monthkey)) {\n            continue;\n          }\n          var month_ = this.by_data.BYMONTH[monthkey];\n          var daysInMonth = ICAL.Time.daysInMonth(month_, aYear);\n          for (var monthdaykey in this.by_data.BYMONTHDAY) {\n            /* istanbul ignore if */\n            if (!this.by_data.BYMONTHDAY.hasOwnProperty(monthdaykey)) {\n              continue;\n            }\n            var day_ = this.by_data.BYMONTHDAY[monthdaykey];\n            if (day_ < 0) {\n              day_ = day_ + daysInMonth + 1;\n            }\n            t.day = day_;\n            t.month = month_;\n            t.year = aYear;\n            t.isDate = true;\n\n            this.days.push(t.dayOfYear());\n          }\n        }\n      } else if (partCount == 1 && \"BYWEEKNO\" in parts) {\n        // TODO unimplemented in libical\n      } else if (partCount == 2 &&\n                 \"BYWEEKNO\" in parts &&\n                 \"BYMONTHDAY\" in parts) {\n        // TODO unimplemented in libical\n      } else if (partCount == 1 && \"BYDAY\" in parts) {\n        this.days = this.days.concat(this.expand_by_day(aYear));\n      } else if (partCount == 2 && \"BYDAY\" in parts && \"BYMONTH\" in parts) {\n        for (var monthkey in this.by_data.BYMONTH) {\n          /* istanbul ignore if */\n          if (!this.by_data.BYMONTH.hasOwnProperty(monthkey)) {\n            continue;\n          }\n          var month = this.by_data.BYMONTH[monthkey];\n          var daysInMonth = ICAL.Time.daysInMonth(month, aYear);\n\n          t.year = aYear;\n          t.month = this.by_data.BYMONTH[monthkey];\n          t.day = 1;\n          t.isDate = true;\n\n          var first_dow = t.dayOfWeek();\n          var doy_offset = t.dayOfYear() - 1;\n\n          t.day = daysInMonth;\n          var last_dow = t.dayOfWeek();\n\n          if (this.has_by_data(\"BYSETPOS\")) {\n            var set_pos_counter = 0;\n            var by_month_day = [];\n            for (var day = 1; day <= daysInMonth; day++) {\n              t.day = day;\n              if (this.is_day_in_byday(t)) {\n                by_month_day.push(day);\n              }\n            }\n\n            for (var spIndex = 0; spIndex < by_month_day.length; spIndex++) {\n              if (this.check_set_position(spIndex + 1) ||\n                  this.check_set_position(spIndex - by_month_day.length)) {\n                this.days.push(doy_offset + by_month_day[spIndex]);\n              }\n            }\n          } else {\n            for (var daycodedkey in this.by_data.BYDAY) {\n              /* istanbul ignore if */\n              if (!this.by_data.BYDAY.hasOwnProperty(daycodedkey)) {\n                continue;\n              }\n              var coded_day = this.by_data.BYDAY[daycodedkey];\n              var bydayParts = this.ruleDayOfWeek(coded_day);\n              var pos = bydayParts[0];\n              var dow = bydayParts[1];\n              var month_day;\n\n              var first_matching_day = ((dow + 7 - first_dow) % 7) + 1;\n              var last_matching_day = daysInMonth - ((last_dow + 7 - dow) % 7);\n\n              if (pos == 0) {\n                for (var day = first_matching_day; day <= daysInMonth; day += 7) {\n                  this.days.push(doy_offset + day);\n                }\n              } else if (pos > 0) {\n                month_day = first_matching_day + (pos - 1) * 7;\n\n                if (month_day <= daysInMonth) {\n                  this.days.push(doy_offset + month_day);\n                }\n              } else {\n                month_day = last_matching_day + (pos + 1) * 7;\n\n                if (month_day > 0) {\n                  this.days.push(doy_offset + month_day);\n                }\n              }\n            }\n          }\n        }\n        // Return dates in order of occurrence (1,2,3,...) instead\n        // of by groups of weekdays (1,8,15,...,2,9,16,...).\n        this.days.sort(function(a, b) { return a - b; }); // Comparator function allows to sort numbers.\n      } else if (partCount == 2 && \"BYDAY\" in parts && \"BYMONTHDAY\" in parts) {\n        var expandedDays = this.expand_by_day(aYear);\n\n        for (var daykey in expandedDays) {\n          /* istanbul ignore if */\n          if (!expandedDays.hasOwnProperty(daykey)) {\n            continue;\n          }\n          var day = expandedDays[daykey];\n          var tt = ICAL.Time.fromDayOfYear(day, aYear);\n          if (this.by_data.BYMONTHDAY.indexOf(tt.day) >= 0) {\n            this.days.push(day);\n          }\n        }\n      } else if (partCount == 3 &&\n                 \"BYDAY\" in parts &&\n                 \"BYMONTHDAY\" in parts &&\n                 \"BYMONTH\" in parts) {\n        var expandedDays = this.expand_by_day(aYear);\n\n        for (var daykey in expandedDays) {\n          /* istanbul ignore if */\n          if (!expandedDays.hasOwnProperty(daykey)) {\n            continue;\n          }\n          var day = expandedDays[daykey];\n          var tt = ICAL.Time.fromDayOfYear(day, aYear);\n\n          if (this.by_data.BYMONTH.indexOf(tt.month) >= 0 &&\n              this.by_data.BYMONTHDAY.indexOf(tt.day) >= 0) {\n            this.days.push(day);\n          }\n        }\n      } else if (partCount == 2 && \"BYDAY\" in parts && \"BYWEEKNO\" in parts) {\n        var expandedDays = this.expand_by_day(aYear);\n\n        for (var daykey in expandedDays) {\n          /* istanbul ignore if */\n          if (!expandedDays.hasOwnProperty(daykey)) {\n            continue;\n          }\n          var day = expandedDays[daykey];\n          var tt = ICAL.Time.fromDayOfYear(day, aYear);\n          var weekno = tt.weekNumber(this.rule.wkst);\n\n          if (this.by_data.BYWEEKNO.indexOf(weekno)) {\n            this.days.push(day);\n          }\n        }\n      } else if (partCount == 3 &&\n                 \"BYDAY\" in parts &&\n                 \"BYWEEKNO\" in parts &&\n                 \"BYMONTHDAY\" in parts) {\n        // TODO unimplemted in libical\n      } else if (partCount == 1 && \"BYYEARDAY\" in parts) {\n        this.days = this.days.concat(this.by_data.BYYEARDAY);\n      } else {\n        this.days = [];\n      }\n      return 0;\n    },\n\n    expand_by_day: function expand_by_day(aYear) {\n\n      var days_list = [];\n      var tmp = this.last.clone();\n\n      tmp.year = aYear;\n      tmp.month = 1;\n      tmp.day = 1;\n      tmp.isDate = true;\n\n      var start_dow = tmp.dayOfWeek();\n\n      tmp.month = 12;\n      tmp.day = 31;\n      tmp.isDate = true;\n\n      var end_dow = tmp.dayOfWeek();\n      var end_year_day = tmp.dayOfYear();\n\n      for (var daykey in this.by_data.BYDAY) {\n        /* istanbul ignore if */\n        if (!this.by_data.BYDAY.hasOwnProperty(daykey)) {\n          continue;\n        }\n        var day = this.by_data.BYDAY[daykey];\n        var parts = this.ruleDayOfWeek(day);\n        var pos = parts[0];\n        var dow = parts[1];\n\n        if (pos == 0) {\n          var tmp_start_doy = ((dow + 7 - start_dow) % 7) + 1;\n\n          for (var doy = tmp_start_doy; doy <= end_year_day; doy += 7) {\n            days_list.push(doy);\n          }\n\n        } else if (pos > 0) {\n          var first;\n          if (dow >= start_dow) {\n            first = dow - start_dow + 1;\n          } else {\n            first = dow - start_dow + 8;\n          }\n\n          days_list.push(first + (pos - 1) * 7);\n        } else {\n          var last;\n          pos = -pos;\n\n          if (dow <= end_dow) {\n            last = end_year_day - end_dow + dow;\n          } else {\n            last = end_year_day - end_dow + dow - 7;\n          }\n\n          days_list.push(last - (pos - 1) * 7);\n        }\n      }\n      return days_list;\n    },\n\n    is_day_in_byday: function is_day_in_byday(tt) {\n      for (var daykey in this.by_data.BYDAY) {\n        /* istanbul ignore if */\n        if (!this.by_data.BYDAY.hasOwnProperty(daykey)) {\n          continue;\n        }\n        var day = this.by_data.BYDAY[daykey];\n        var parts = this.ruleDayOfWeek(day);\n        var pos = parts[0];\n        var dow = parts[1];\n        var this_dow = tt.dayOfWeek();\n\n        if ((pos == 0 && dow == this_dow) ||\n            (tt.nthWeekDay(dow, pos) == tt.day)) {\n          return 1;\n        }\n      }\n\n      return 0;\n    },\n\n    /**\n     * Checks if given value is in BYSETPOS.\n     *\n     * @private\n     * @param {Numeric} aPos position to check for.\n     * @return {Boolean} false unless BYSETPOS rules exist\n     *                   and the given value is present in rules.\n     */\n    check_set_position: function check_set_position(aPos) {\n      if (this.has_by_data('BYSETPOS')) {\n        var idx = this.by_data.BYSETPOS.indexOf(aPos);\n        // negative numbers are not false-y\n        return idx !== -1;\n      }\n      return false;\n    },\n\n    sort_byday_rules: function icalrecur_sort_byday_rules(aRules) {\n      for (var i = 0; i < aRules.length; i++) {\n        for (var j = 0; j < i; j++) {\n          var one = this.ruleDayOfWeek(aRules[j], this.rule.wkst)[1];\n          var two = this.ruleDayOfWeek(aRules[i], this.rule.wkst)[1];\n\n          if (one > two) {\n            var tmp = aRules[i];\n            aRules[i] = aRules[j];\n            aRules[j] = tmp;\n          }\n        }\n      }\n    },\n\n    check_contract_restriction: function check_contract_restriction(aRuleType, v) {\n      var indexMapValue = icalrecur_iterator._indexMap[aRuleType];\n      var ruleMapValue = icalrecur_iterator._expandMap[this.rule.freq][indexMapValue];\n      var pass = false;\n\n      if (aRuleType in this.by_data &&\n          ruleMapValue == icalrecur_iterator.CONTRACT) {\n\n        var ruleType = this.by_data[aRuleType];\n\n        for (var bydatakey in ruleType) {\n          /* istanbul ignore else */\n          if (ruleType.hasOwnProperty(bydatakey)) {\n            if (ruleType[bydatakey] == v) {\n              pass = true;\n              break;\n            }\n          }\n        }\n      } else {\n        // Not a contracting byrule or has no data, test passes\n        pass = true;\n      }\n      return pass;\n    },\n\n    check_contracting_rules: function check_contracting_rules() {\n      var dow = this.last.dayOfWeek();\n      var weekNo = this.last.weekNumber(this.rule.wkst);\n      var doy = this.last.dayOfYear();\n\n      return (this.check_contract_restriction(\"BYSECOND\", this.last.second) &&\n              this.check_contract_restriction(\"BYMINUTE\", this.last.minute) &&\n              this.check_contract_restriction(\"BYHOUR\", this.last.hour) &&\n              this.check_contract_restriction(\"BYDAY\", ICAL.Recur.numericDayToIcalDay(dow)) &&\n              this.check_contract_restriction(\"BYWEEKNO\", weekNo) &&\n              this.check_contract_restriction(\"BYMONTHDAY\", this.last.day) &&\n              this.check_contract_restriction(\"BYMONTH\", this.last.month) &&\n              this.check_contract_restriction(\"BYYEARDAY\", doy));\n    },\n\n    setup_defaults: function setup_defaults(aRuleType, req, deftime) {\n      var indexMapValue = icalrecur_iterator._indexMap[aRuleType];\n      var ruleMapValue = icalrecur_iterator._expandMap[this.rule.freq][indexMapValue];\n\n      if (ruleMapValue != icalrecur_iterator.CONTRACT) {\n        if (!(aRuleType in this.by_data)) {\n          this.by_data[aRuleType] = [deftime];\n        }\n        if (this.rule.freq != req) {\n          return this.by_data[aRuleType][0];\n        }\n      }\n      return deftime;\n    },\n\n    /**\n     * Convert iterator into a serialize-able object.  Will preserve current\n     * iteration sequence to ensure the seamless continuation of the recurrence\n     * rule.\n     * @return {Object}\n     */\n    toJSON: function() {\n      var result = Object.create(null);\n\n      result.initialized = this.initialized;\n      result.rule = this.rule.toJSON();\n      result.dtstart = this.dtstart.toJSON();\n      result.by_data = this.by_data;\n      result.days = this.days;\n      result.last = this.last.toJSON();\n      result.by_indices = this.by_indices;\n      result.occurrence_number = this.occurrence_number;\n\n      return result;\n    }\n  };\n\n  icalrecur_iterator._indexMap = {\n    \"BYSECOND\": 0,\n    \"BYMINUTE\": 1,\n    \"BYHOUR\": 2,\n    \"BYDAY\": 3,\n    \"BYMONTHDAY\": 4,\n    \"BYYEARDAY\": 5,\n    \"BYWEEKNO\": 6,\n    \"BYMONTH\": 7,\n    \"BYSETPOS\": 8\n  };\n\n  icalrecur_iterator._expandMap = {\n    \"SECONDLY\": [1, 1, 1, 1, 1, 1, 1, 1],\n    \"MINUTELY\": [2, 1, 1, 1, 1, 1, 1, 1],\n    \"HOURLY\": [2, 2, 1, 1, 1, 1, 1, 1],\n    \"DAILY\": [2, 2, 2, 1, 1, 1, 1, 1],\n    \"WEEKLY\": [2, 2, 2, 2, 3, 3, 1, 1],\n    \"MONTHLY\": [2, 2, 2, 2, 2, 3, 3, 1],\n    \"YEARLY\": [2, 2, 2, 2, 2, 2, 2, 2]\n  };\n  icalrecur_iterator.UNKNOWN = 0;\n  icalrecur_iterator.CONTRACT = 1;\n  icalrecur_iterator.EXPAND = 2;\n  icalrecur_iterator.ILLEGAL = 3;\n\n  return icalrecur_iterator;\n\n}());\n/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\n * Portions Copyright (C) Philipp Kewisch, 2011-2015 */\n\n\n/**\n * This symbol is further described later on\n * @ignore\n */\nICAL.RecurExpansion = (function() {\n  function formatTime(item) {\n    return ICAL.helpers.formatClassType(item, ICAL.Time);\n  }\n\n  function compareTime(a, b) {\n    return a.compare(b);\n  }\n\n  function isRecurringComponent(comp) {\n    return comp.hasProperty('rdate') ||\n           comp.hasProperty('rrule') ||\n           comp.hasProperty('recurrence-id');\n  }\n\n  /**\n   * @classdesc\n   * Primary class for expanding recurring rules.  Can take multiple rrules,\n   * rdates, exdate(s) and iterate (in order) over each next occurrence.\n   *\n   * Once initialized this class can also be serialized saved and continue\n   * iteration from the last point.\n   *\n   * NOTE: it is intended that this class is to be used\n   *       with ICAL.Event which handles recurrence exceptions.\n   *\n   * @example\n   * // assuming event is a parsed ical component\n   * var event;\n   *\n   * var expand = new ICAL.RecurExpansion({\n   *   component: event,\n   *   dtstart: event.getFirstPropertyValue('dtstart')\n   * });\n   *\n   * // remember there are infinite rules\n   * // so its a good idea to limit the scope\n   * // of the iterations then resume later on.\n   *\n   * // next is always an ICAL.Time or null\n   * var next;\n   *\n   * while (someCondition && (next = expand.next())) {\n   *   // do something with next\n   * }\n   *\n   * // save instance for later\n   * var json = JSON.stringify(expand);\n   *\n   * //...\n   *\n   * // NOTE: if the component's properties have\n   * //       changed you will need to rebuild the\n   * //       class and start over. This only works\n   * //       when the component's recurrence info is the same.\n   * var expand = new ICAL.RecurExpansion(JSON.parse(json));\n   *\n   * @description\n   * The options object can be filled with the specified initial values. It can\n   * also contain additional members, as a result of serializing a previous\n   * expansion state, as shown in the example.\n   *\n   * @class\n   * @alias ICAL.RecurExpansion\n   * @param {Object} options\n   *        Recurrence expansion options\n   * @param {ICAL.Time} options.dtstart\n   *        Start time of the event\n   * @param {ICAL.Component=} options.component\n   *        Component for expansion, required if not resuming.\n   */\n  function RecurExpansion(options) {\n    this.ruleDates = [];\n    this.exDates = [];\n    this.fromData(options);\n  }\n\n  RecurExpansion.prototype = {\n    /**\n     * True when iteration is fully completed.\n     * @type {Boolean}\n     */\n    complete: false,\n\n    /**\n     * Array of rrule iterators.\n     *\n     * @type {ICAL.RecurIterator[]}\n     * @private\n     */\n    ruleIterators: null,\n\n    /**\n     * Array of rdate instances.\n     *\n     * @type {ICAL.Time[]}\n     * @private\n     */\n    ruleDates: null,\n\n    /**\n     * Array of exdate instances.\n     *\n     * @type {ICAL.Time[]}\n     * @private\n     */\n    exDates: null,\n\n    /**\n     * Current position in ruleDates array.\n     * @type {Number}\n     * @private\n     */\n    ruleDateInc: 0,\n\n    /**\n     * Current position in exDates array\n     * @type {Number}\n     * @private\n     */\n    exDateInc: 0,\n\n    /**\n     * Current negative date.\n     *\n     * @type {ICAL.Time}\n     * @private\n     */\n    exDate: null,\n\n    /**\n     * Current additional date.\n     *\n     * @type {ICAL.Time}\n     * @private\n     */\n    ruleDate: null,\n\n    /**\n     * Start date of recurring rules.\n     *\n     * @type {ICAL.Time}\n     */\n    dtstart: null,\n\n    /**\n     * Last expanded time\n     *\n     * @type {ICAL.Time}\n     */\n    last: null,\n\n    /**\n     * Initialize the recurrence expansion from the data object. The options\n     * object may also contain additional members, see the\n     * {@link ICAL.RecurExpansion constructor} for more details.\n     *\n     * @param {Object} options\n     *        Recurrence expansion options\n     * @param {ICAL.Time} options.dtstart\n     *        Start time of the event\n     * @param {ICAL.Component=} options.component\n     *        Component for expansion, required if not resuming.\n     */\n    fromData: function(options) {\n      var start = ICAL.helpers.formatClassType(options.dtstart, ICAL.Time);\n\n      if (!start) {\n        throw new Error('.dtstart (ICAL.Time) must be given');\n      } else {\n        this.dtstart = start;\n      }\n\n      if (options.component) {\n        this._init(options.component);\n      } else {\n        this.last = formatTime(options.last) || start.clone();\n\n        if (!options.ruleIterators) {\n          throw new Error('.ruleIterators or .component must be given');\n        }\n\n        this.ruleIterators = options.ruleIterators.map(function(item) {\n          return ICAL.helpers.formatClassType(item, ICAL.RecurIterator);\n        });\n\n        this.ruleDateInc = options.ruleDateInc;\n        this.exDateInc = options.exDateInc;\n\n        if (options.ruleDates) {\n          this.ruleDates = options.ruleDates.map(formatTime);\n          this.ruleDate = this.ruleDates[this.ruleDateInc];\n        }\n\n        if (options.exDates) {\n          this.exDates = options.exDates.map(formatTime);\n          this.exDate = this.exDates[this.exDateInc];\n        }\n\n        if (typeof(options.complete) !== 'undefined') {\n          this.complete = options.complete;\n        }\n      }\n    },\n\n    /**\n     * Retrieve the next occurrence in the series.\n     * @return {ICAL.Time}\n     */\n    next: function() {\n      var iter;\n      var ruleOfDay;\n      var next;\n      var compare;\n\n      var maxTries = 500;\n      var currentTry = 0;\n\n      while (true) {\n        if (currentTry++ > maxTries) {\n          throw new Error(\n            'max tries have occured, rule may be impossible to forfill.'\n          );\n        }\n\n        next = this.ruleDate;\n        iter = this._nextRecurrenceIter(this.last);\n\n        // no more matches\n        // because we increment the rule day or rule\n        // _after_ we choose a value this should be\n        // the only spot where we need to worry about the\n        // end of events.\n        if (!next && !iter) {\n          // there are no more iterators or rdates\n          this.complete = true;\n          break;\n        }\n\n        // no next rule day or recurrence rule is first.\n        if (!next || (iter && next.compare(iter.last) > 0)) {\n          // must be cloned, recur will reuse the time element.\n          next = iter.last.clone();\n          // move to next so we can continue\n          iter.next();\n        }\n\n        // if the ruleDate is still next increment it.\n        if (this.ruleDate === next) {\n          this._nextRuleDay();\n        }\n\n        this.last = next;\n\n        // check the negative rules\n        if (this.exDate) {\n          compare = this.exDate.compare(this.last);\n\n          if (compare < 0) {\n            this._nextExDay();\n          }\n\n          // if the current rule is excluded skip it.\n          if (compare === 0) {\n            this._nextExDay();\n            continue;\n          }\n        }\n\n        //XXX: The spec states that after we resolve the final\n        //     list of dates we execute exdate this seems somewhat counter\n        //     intuitive to what I have seen most servers do so for now\n        //     I exclude based on the original date not the one that may\n        //     have been modified by the exception.\n        return this.last;\n      }\n    },\n\n    /**\n     * Converts object into a serialize-able format. This format can be passed\n     * back into the expansion to resume iteration.\n     * @return {Object}\n     */\n    toJSON: function() {\n      function toJSON(item) {\n        return item.toJSON();\n      }\n\n      var result = Object.create(null);\n      result.ruleIterators = this.ruleIterators.map(toJSON);\n\n      if (this.ruleDates) {\n        result.ruleDates = this.ruleDates.map(toJSON);\n      }\n\n      if (this.exDates) {\n        result.exDates = this.exDates.map(toJSON);\n      }\n\n      result.ruleDateInc = this.ruleDateInc;\n      result.exDateInc = this.exDateInc;\n      result.last = this.last.toJSON();\n      result.dtstart = this.dtstart.toJSON();\n      result.complete = this.complete;\n\n      return result;\n    },\n\n    /**\n     * Extract all dates from the properties in the given component. The\n     * properties will be filtered by the property name.\n     *\n     * @private\n     * @param {ICAL.Component} component        The component to search in\n     * @param {String} propertyName             The property name to search for\n     * @return {ICAL.Time[]}                    The extracted dates.\n     */\n    _extractDates: function(component, propertyName) {\n      function handleProp(prop) {\n        idx = ICAL.helpers.binsearchInsert(\n          result,\n          prop,\n          compareTime\n        );\n\n        // ordered insert\n        result.splice(idx, 0, prop);\n      }\n\n      var result = [];\n      var props = component.getAllProperties(propertyName);\n      var len = props.length;\n      var i = 0;\n      var prop;\n\n      var idx;\n\n      for (; i < len; i++) {\n        props[i].getValues().forEach(handleProp);\n      }\n\n      return result;\n    },\n\n    /**\n     * Initialize the recurrence expansion.\n     *\n     * @private\n     * @param {ICAL.Component} component    The component to initialize from.\n     */\n    _init: function(component) {\n      this.ruleIterators = [];\n\n      this.last = this.dtstart.clone();\n\n      // to provide api consistency non-recurring\n      // events can also use the iterator though it will\n      // only return a single time.\n      if (!isRecurringComponent(component)) {\n        this.ruleDate = this.last.clone();\n        this.complete = true;\n        return;\n      }\n\n      if (component.hasProperty('rdate')) {\n        this.ruleDates = this._extractDates(component, 'rdate');\n\n        // special hack for cases where first rdate is prior\n        // to the start date. We only check for the first rdate.\n        // This is mostly for google's crazy recurring date logic\n        // (contacts birthdays).\n        if ((this.ruleDates[0]) &&\n            (this.ruleDates[0].compare(this.dtstart) < 0)) {\n\n          this.ruleDateInc = 0;\n          this.last = this.ruleDates[0].clone();\n        } else {\n          this.ruleDateInc = ICAL.helpers.binsearchInsert(\n            this.ruleDates,\n            this.last,\n            compareTime\n          );\n        }\n\n        this.ruleDate = this.ruleDates[this.ruleDateInc];\n      }\n\n      if (component.hasProperty('rrule')) {\n        var rules = component.getAllProperties('rrule');\n        var i = 0;\n        var len = rules.length;\n\n        var rule;\n        var iter;\n\n        for (; i < len; i++) {\n          rule = rules[i].getFirstValue();\n          iter = rule.iterator(this.dtstart);\n          this.ruleIterators.push(iter);\n\n          // increment to the next occurrence so future\n          // calls to next return times beyond the initial iteration.\n          // XXX: I find this suspicious might be a bug?\n          iter.next();\n        }\n      }\n\n      if (component.hasProperty('exdate')) {\n        this.exDates = this._extractDates(component, 'exdate');\n        // if we have a .last day we increment the index to beyond it.\n        this.exDateInc = ICAL.helpers.binsearchInsert(\n          this.exDates,\n          this.last,\n          compareTime\n        );\n\n        this.exDate = this.exDates[this.exDateInc];\n      }\n    },\n\n    /**\n     * Advance to the next exdate\n     * @private\n     */\n    _nextExDay: function() {\n      this.exDate = this.exDates[++this.exDateInc];\n    },\n\n    /**\n     * Advance to the next rule date\n     * @private\n     */\n    _nextRuleDay: function() {\n      this.ruleDate = this.ruleDates[++this.ruleDateInc];\n    },\n\n    /**\n     * Find and return the recurrence rule with the most recent event and\n     * return it.\n     *\n     * @private\n     * @return {?ICAL.RecurIterator}    Found iterator.\n     */\n    _nextRecurrenceIter: function() {\n      var iters = this.ruleIterators;\n\n      if (iters.length === 0) {\n        return null;\n      }\n\n      var len = iters.length;\n      var iter;\n      var iterTime;\n      var iterIdx = 0;\n      var chosenIter;\n\n      // loop through each iterator\n      for (; iterIdx < len; iterIdx++) {\n        iter = iters[iterIdx];\n        iterTime = iter.last;\n\n        // if iteration is complete\n        // then we must exclude it from\n        // the search and remove it.\n        if (iter.completed) {\n          len--;\n          if (iterIdx !== 0) {\n            iterIdx--;\n          }\n          iters.splice(iterIdx, 1);\n          continue;\n        }\n\n        // find the most recent possible choice\n        if (!chosenIter || chosenIter.last.compare(iterTime) > 0) {\n          // that iterator is saved\n          chosenIter = iter;\n        }\n      }\n\n      // the chosen iterator is returned but not mutated\n      // this iterator contains the most recent event.\n      return chosenIter;\n    }\n  };\n\n  return RecurExpansion;\n}());\n/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\n * Portions Copyright (C) Philipp Kewisch, 2011-2015 */\n\n\n/**\n * This symbol is further described later on\n * @ignore\n */\nICAL.Event = (function() {\n\n  /**\n   * @classdesc\n   * ICAL.js is organized into multiple layers. The bottom layer is a raw jCal\n   * object, followed by the component/property layer. The highest level is the\n   * event representation, which this class is part of. See the\n   * {@tutorial layers} guide for more details.\n   *\n   * @class\n   * @alias ICAL.Event\n   * @param {ICAL.Component=} component         The ICAL.Component to base this event on\n   * @param {Object} options                    Options for this event\n   * @param {Boolean} options.strictExceptions\n   *          When true, will verify exceptions are related by their UUID\n   * @param {Array<ICAL.Component|ICAL.Event>} options.exceptions\n   *          Exceptions to this event, either as components or events. If not\n   *            specified exceptions will automatically be set in relation of\n   *            component's parent\n   */\n  function Event(component, options) {\n    if (!(component instanceof ICAL.Component)) {\n      options = component;\n      component = null;\n    }\n\n    if (component) {\n      this.component = component;\n    } else {\n      this.component = new ICAL.Component('vevent');\n    }\n\n    this._rangeExceptionCache = Object.create(null);\n    this.exceptions = Object.create(null);\n    this.rangeExceptions = [];\n\n    if (options && options.strictExceptions) {\n      this.strictExceptions = options.strictExceptions;\n    }\n\n    if (options && options.exceptions) {\n      options.exceptions.forEach(this.relateException, this);\n    } else if (this.component.parent && !this.isRecurrenceException()) {\n      this.component.parent.getAllSubcomponents('vevent').forEach(function(event) {\n        if (event.hasProperty('recurrence-id')) {\n          this.relateException(event);\n        }\n      }, this);\n    }\n  }\n\n  Event.prototype = {\n\n    THISANDFUTURE: 'THISANDFUTURE',\n\n    /**\n     * List of related event exceptions.\n     *\n     * @type {ICAL.Event[]}\n     */\n    exceptions: null,\n\n    /**\n     * When true, will verify exceptions are related by their UUID.\n     *\n     * @type {Boolean}\n     */\n    strictExceptions: false,\n\n    /**\n     * Relates a given event exception to this object.  If the given component\n     * does not share the UID of this event it cannot be related and will throw\n     * an exception.\n     *\n     * If this component is an exception it cannot have other exceptions\n     * related to it.\n     *\n     * @param {ICAL.Component|ICAL.Event} obj       Component or event\n     */\n    relateException: function(obj) {\n      if (this.isRecurrenceException()) {\n        throw new Error('cannot relate exception to exceptions');\n      }\n\n      if (obj instanceof ICAL.Component) {\n        obj = new ICAL.Event(obj);\n      }\n\n      if (this.strictExceptions && obj.uid !== this.uid) {\n        throw new Error('attempted to relate unrelated exception');\n      }\n\n      var id = obj.recurrenceId.toString();\n\n      // we don't sort or manage exceptions directly\n      // here the recurrence expander handles that.\n      this.exceptions[id] = obj;\n\n      // index RANGE=THISANDFUTURE exceptions so we can\n      // look them up later in getOccurrenceDetails.\n      if (obj.modifiesFuture()) {\n        var item = [\n          obj.recurrenceId.toUnixTime(), id\n        ];\n\n        // we keep them sorted so we can find the nearest\n        // value later on...\n        var idx = ICAL.helpers.binsearchInsert(\n          this.rangeExceptions,\n          item,\n          compareRangeException\n        );\n\n        this.rangeExceptions.splice(idx, 0, item);\n      }\n    },\n\n    /**\n     * Checks if this record is an exception and has the RANGE=THISANDFUTURE\n     * value.\n     *\n     * @return {Boolean}        True, when exception is within range\n     */\n    modifiesFuture: function() {\n      if (!this.component.hasProperty('recurrence-id')) {\n        return false;\n      }\n\n      var range = this.component.getFirstProperty('recurrence-id').getParameter('range');\n      return range === this.THISANDFUTURE;\n    },\n\n    /**\n     * Finds the range exception nearest to the given date.\n     *\n     * @param {ICAL.Time} time usually an occurrence time of an event\n     * @return {?ICAL.Event} the related event/exception or null\n     */\n    findRangeException: function(time) {\n      if (!this.rangeExceptions.length) {\n        return null;\n      }\n\n      var utc = time.toUnixTime();\n      var idx = ICAL.helpers.binsearchInsert(\n        this.rangeExceptions,\n        [utc],\n        compareRangeException\n      );\n\n      idx -= 1;\n\n      // occurs before\n      if (idx < 0) {\n        return null;\n      }\n\n      var rangeItem = this.rangeExceptions[idx];\n\n      /* istanbul ignore next: sanity check only */\n      if (utc < rangeItem[0]) {\n        return null;\n      }\n\n      return rangeItem[1];\n    },\n\n    /**\n     * This object is returned by {@link ICAL.Event#getOccurrenceDetails getOccurrenceDetails}\n     *\n     * @typedef {Object} occurrenceDetails\n     * @memberof ICAL.Event\n     * @property {ICAL.Time} recurrenceId       The passed in recurrence id\n     * @property {ICAL.Event} item              The occurrence\n     * @property {ICAL.Time} startDate          The start of the occurrence\n     * @property {ICAL.Time} endDate            The end of the occurrence\n     */\n\n    /**\n     * Returns the occurrence details based on its start time.  If the\n     * occurrence has an exception will return the details for that exception.\n     *\n     * NOTE: this method is intend to be used in conjunction\n     *       with the {@link ICAL.Event#iterator iterator} method.\n     *\n     * @param {ICAL.Time} occurrence time occurrence\n     * @return {ICAL.Event.occurrenceDetails} Information about the occurrence\n     */\n    getOccurrenceDetails: function(occurrence) {\n      var id = occurrence.toString();\n      var utcId = occurrence.convertToZone(ICAL.Timezone.utcTimezone).toString();\n      var item;\n      var result = {\n        //XXX: Clone?\n        recurrenceId: occurrence\n      };\n\n      if (id in this.exceptions) {\n        item = result.item = this.exceptions[id];\n        result.startDate = item.startDate;\n        result.endDate = item.endDate;\n        result.item = item;\n      } else if (utcId in this.exceptions) {\n        item = this.exceptions[utcId];\n        result.startDate = item.startDate;\n        result.endDate = item.endDate;\n        result.item = item;\n      } else {\n        // range exceptions (RANGE=THISANDFUTURE) have a\n        // lower priority then direct exceptions but\n        // must be accounted for first. Their item is\n        // always the first exception with the range prop.\n        var rangeExceptionId = this.findRangeException(\n          occurrence\n        );\n        var end;\n\n        if (rangeExceptionId) {\n          var exception = this.exceptions[rangeExceptionId];\n\n          // range exception must modify standard time\n          // by the difference (if any) in start/end times.\n          result.item = exception;\n\n          var startDiff = this._rangeExceptionCache[rangeExceptionId];\n\n          if (!startDiff) {\n            var original = exception.recurrenceId.clone();\n            var newStart = exception.startDate.clone();\n\n            // zones must be same otherwise subtract may be incorrect.\n            original.zone = newStart.zone;\n            startDiff = newStart.subtractDate(original);\n\n            this._rangeExceptionCache[rangeExceptionId] = startDiff;\n          }\n\n          var start = occurrence.clone();\n          start.zone = exception.startDate.zone;\n          start.addDuration(startDiff);\n\n          end = start.clone();\n          end.addDuration(exception.duration);\n\n          result.startDate = start;\n          result.endDate = end;\n        } else {\n          // no range exception standard expansion\n          end = occurrence.clone();\n          end.addDuration(this.duration);\n\n          result.endDate = end;\n          result.startDate = occurrence;\n          result.item = this;\n        }\n      }\n\n      return result;\n    },\n\n    /**\n     * Builds a recur expansion instance for a specific point in time (defaults\n     * to startDate).\n     *\n     * @param {ICAL.Time} startTime     Starting point for expansion\n     * @return {ICAL.RecurExpansion}    Expansion object\n     */\n    iterator: function(startTime) {\n      return new ICAL.RecurExpansion({\n        component: this.component,\n        dtstart: startTime || this.startDate\n      });\n    },\n\n    /**\n     * Checks if the event is recurring\n     *\n     * @return {Boolean}        True, if event is recurring\n     */\n    isRecurring: function() {\n      var comp = this.component;\n      return comp.hasProperty('rrule') || comp.hasProperty('rdate');\n    },\n\n    /**\n     * Checks if the event describes a recurrence exception. See\n     * {@tutorial terminology} for details.\n     *\n     * @return {Boolean}    True, if the even describes a recurrence exception\n     */\n    isRecurrenceException: function() {\n      return this.component.hasProperty('recurrence-id');\n    },\n\n    /**\n     * Returns the types of recurrences this event may have.\n     *\n     * Returned as an object with the following possible keys:\n     *\n     *    - YEARLY\n     *    - MONTHLY\n     *    - WEEKLY\n     *    - DAILY\n     *    - MINUTELY\n     *    - SECONDLY\n     *\n     * @return {Object.<ICAL.Recur.frequencyValues, Boolean>}\n     *          Object of recurrence flags\n     */\n    getRecurrenceTypes: function() {\n      var rules = this.component.getAllProperties('rrule');\n      var i = 0;\n      var len = rules.length;\n      var result = Object.create(null);\n\n      for (; i < len; i++) {\n        var value = rules[i].getFirstValue();\n        result[value.freq] = true;\n      }\n\n      return result;\n    },\n\n    /**\n     * The uid of this event\n     * @type {String}\n     */\n    get uid() {\n      return this._firstProp('uid');\n    },\n\n    set uid(value) {\n      this._setProp('uid', value);\n    },\n\n    /**\n     * The start date\n     * @type {ICAL.Time}\n     */\n    get startDate() {\n      return this._firstProp('dtstart');\n    },\n\n    set startDate(value) {\n      this._setTime('dtstart', value);\n    },\n\n    /**\n     * The end date. This can be the result directly from the property, or the\n     * end date calculated from start date and duration. Setting the property\n     * will remove any duration properties.\n     * @type {ICAL.Time}\n     */\n    get endDate() {\n      var endDate = this._firstProp('dtend');\n      if (!endDate) {\n          var duration = this._firstProp('duration');\n          endDate = this.startDate.clone();\n          if (duration) {\n              endDate.addDuration(duration);\n          } else if (endDate.isDate) {\n              endDate.day += 1;\n          }\n      }\n      return endDate;\n    },\n\n    set endDate(value) {\n      if (this.component.hasProperty('duration')) {\n        this.component.removeProperty('duration');\n      }\n      this._setTime('dtend', value);\n    },\n\n    /**\n     * The duration. This can be the result directly from the property, or the\n     * duration calculated from start date and end date. Setting the property\n     * will remove any `dtend` properties.\n     * @type {ICAL.Duration}\n     */\n    get duration() {\n      var duration = this._firstProp('duration');\n      if (!duration) {\n        return this.endDate.subtractDateTz(this.startDate);\n      }\n      return duration;\n    },\n\n    set duration(value) {\n      if (this.component.hasProperty('dtend')) {\n        this.component.removeProperty('dtend');\n      }\n\n      this._setProp('duration', value);\n    },\n\n    /**\n     * The location of the event.\n     * @type {String}\n     */\n    get location() {\n      return this._firstProp('location');\n    },\n\n    set location(value) {\n      return this._setProp('location', value);\n    },\n\n    /**\n     * The attendees in the event\n     * @type {ICAL.Property[]}\n     * @readonly\n     */\n    get attendees() {\n      //XXX: This is way lame we should have a better\n      //     data structure for this later.\n      return this.component.getAllProperties('attendee');\n    },\n\n\n    /**\n     * The event summary\n     * @type {String}\n     */\n    get summary() {\n      return this._firstProp('summary');\n    },\n\n    set summary(value) {\n      this._setProp('summary', value);\n    },\n\n    /**\n     * The event description.\n     * @type {String}\n     */\n    get description() {\n      return this._firstProp('description');\n    },\n\n    set description(value) {\n      this._setProp('description', value);\n    },\n\n    /**\n     * The organizer value as an uri. In most cases this is a mailto: uri, but\n     * it can also be something else, like urn:uuid:...\n     * @type {String}\n     */\n    get organizer() {\n      return this._firstProp('organizer');\n    },\n\n    set organizer(value) {\n      this._setProp('organizer', value);\n    },\n\n    /**\n     * The sequence value for this event. Used for scheduling\n     * see {@tutorial terminology}.\n     * @type {Number}\n     */\n    get sequence() {\n      return this._firstProp('sequence');\n    },\n\n    set sequence(value) {\n      this._setProp('sequence', value);\n    },\n\n    /**\n     * The recurrence id for this event. See {@tutorial terminology} for details.\n     * @type {ICAL.Time}\n     */\n    get recurrenceId() {\n      return this._firstProp('recurrence-id');\n    },\n\n    set recurrenceId(value) {\n      this._setTime('recurrence-id', value);\n    },\n\n    /**\n     * Set/update a time property's value.\n     * This will also update the TZID of the property.\n     *\n     * TODO: this method handles the case where we are switching\n     * from a known timezone to an implied timezone (one without TZID).\n     * This does _not_ handle the case of moving between a known\n     *  (by TimezoneService) timezone to an unknown timezone...\n     *\n     * We will not add/remove/update the VTIMEZONE subcomponents\n     *  leading to invalid ICAL data...\n     * @private\n     * @param {String} propName     The property name\n     * @param {ICAL.Time} time      The time to set\n     */\n    _setTime: function(propName, time) {\n      var prop = this.component.getFirstProperty(propName);\n\n      if (!prop) {\n        prop = new ICAL.Property(propName);\n        this.component.addProperty(prop);\n      }\n\n      // utc and local don't get a tzid\n      if (\n        time.zone === ICAL.Timezone.localTimezone ||\n        time.zone === ICAL.Timezone.utcTimezone\n      ) {\n        // remove the tzid\n        prop.removeParameter('tzid');\n      } else {\n        prop.setParameter('tzid', time.zone.tzid);\n      }\n\n      prop.setValue(time);\n    },\n\n    _setProp: function(name, value) {\n      this.component.updatePropertyWithValue(name, value);\n    },\n\n    _firstProp: function(name) {\n      return this.component.getFirstPropertyValue(name);\n    },\n\n    /**\n     * The string representation of this event.\n     * @return {String}\n     */\n    toString: function() {\n      return this.component.toString();\n    }\n\n  };\n\n  function compareRangeException(a, b) {\n    if (a[0] > b[0]) return 1;\n    if (b[0] > a[0]) return -1;\n    return 0;\n  }\n\n  return Event;\n}());\n/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\n * Portions Copyright (C) Philipp Kewisch, 2011-2015 */\n\n\n/**\n * This symbol is further described later on\n * @ignore\n */\nICAL.ComponentParser = (function() {\n  /**\n   * @classdesc\n   * The ComponentParser is used to process a String or jCal Object,\n   * firing callbacks for various found components, as well as completion.\n   *\n   * @example\n   * var options = {\n   *   // when false no events will be emitted for type\n   *   parseEvent: true,\n   *   parseTimezone: true\n   * };\n   *\n   * var parser = new ICAL.ComponentParser(options);\n   *\n   * parser.onevent(eventComponent) {\n   *   //...\n   * }\n   *\n   * // ontimezone, etc...\n   *\n   * parser.oncomplete = function() {\n   *\n   * };\n   *\n   * parser.process(stringOrComponent);\n   *\n   * @class\n   * @alias ICAL.ComponentParser\n   * @param {Object=} options        Component parser options\n   * @param {Boolean} options.parseEvent        Whether events should be parsed\n   * @param {Boolean} options.parseTimezeone    Whether timezones should be parsed\n   */\n  function ComponentParser(options) {\n    if (typeof(options) === 'undefined') {\n      options = {};\n    }\n\n    var key;\n    for (key in options) {\n      /* istanbul ignore else */\n      if (options.hasOwnProperty(key)) {\n        this[key] = options[key];\n      }\n    }\n  }\n\n  ComponentParser.prototype = {\n\n    /**\n     * When true, parse events\n     *\n     * @type {Boolean}\n     */\n    parseEvent: true,\n\n    /**\n     * When true, parse timezones\n     *\n     * @type {Boolean}\n     */\n    parseTimezone: true,\n\n\n    /* SAX like events here for reference */\n\n    /**\n     * Fired when parsing is complete\n     * @callback\n     */\n    oncomplete: /* istanbul ignore next */ function() {},\n\n    /**\n     * Fired if an error occurs during parsing.\n     *\n     * @callback\n     * @param {Error} err details of error\n     */\n    onerror: /* istanbul ignore next */ function(err) {},\n\n    /**\n     * Fired when a top level component (VTIMEZONE) is found\n     *\n     * @callback\n     * @param {ICAL.Timezone} component     Timezone object\n     */\n    ontimezone: /* istanbul ignore next */ function(component) {},\n\n    /**\n     * Fired when a top level component (VEVENT) is found.\n     *\n     * @callback\n     * @param {ICAL.Event} component    Top level component\n     */\n    onevent: /* istanbul ignore next */ function(component) {},\n\n    /**\n     * Process a string or parse ical object.  This function itself will return\n     * nothing but will start the parsing process.\n     *\n     * Events must be registered prior to calling this method.\n     *\n     * @param {ICAL.Component|String|Object} ical      The component to process,\n     *        either in its final form, as a jCal Object, or string representation\n     */\n    process: function(ical) {\n      //TODO: this is sync now in the future we will have a incremental parser.\n      if (typeof(ical) === 'string') {\n        ical = ICAL.parse(ical);\n      }\n\n      if (!(ical instanceof ICAL.Component)) {\n        ical = new ICAL.Component(ical);\n      }\n\n      var components = ical.getAllSubcomponents();\n      var i = 0;\n      var len = components.length;\n      var component;\n\n      for (; i < len; i++) {\n        component = components[i];\n\n        switch (component.name) {\n          case 'vtimezone':\n            if (this.parseTimezone) {\n              var tzid = component.getFirstPropertyValue('tzid');\n              if (tzid) {\n                this.ontimezone(new ICAL.Timezone({\n                  tzid: tzid,\n                  component: component\n                }));\n              }\n            }\n            break;\n          case 'vevent':\n            if (this.parseEvent) {\n              this.onevent(new ICAL.Event(component));\n            }\n            break;\n          default:\n            continue;\n        }\n      }\n\n      //XXX: ideally we should do a \"nextTick\" here\n      //     so in all cases this is actually async.\n      this.oncomplete();\n    }\n  };\n\n  return ComponentParser;\n}());\n", "{\"Africa/Abidjan\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:GMT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Africa/Accra\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:GMT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Africa/Addis_Ababa\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EAT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Africa/Algiers\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Africa/Asmara\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EAT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Africa/Bamako\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:GMT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Africa/Bangui\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:WAT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Africa/Banjul\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:GMT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Africa/Bissau\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:GMT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Africa/Blantyre\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CAT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Africa/Brazzaville\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:WAT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Africa/Bujumbura\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CAT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Africa/Cairo\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:EET\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Africa/Casablanca\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:+00\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\\r\\nBEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:+01\\r\\nDTSTART:20180325T020000\\r\\nRDATE:20180325T020000\\r\\nRDATE:20180617T020000\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:+00\\r\\nDTSTART:20180513T030000\\r\\nRDATE:20180513T030000\\r\\nEND:STANDARD\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:+01\\r\\nDTSTART:20190609T020000\\r\\nRDATE:20190609T020000\\r\\nRDATE:20200531T020000\\r\\nRDATE:20210516T020000\\r\\nRDATE:20220508T020000\\r\\nRDATE:20230430T020000\\r\\nRDATE:20240414T020000\\r\\nEND:STANDARD\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:+01\\r\\nDTSTART:20181028T030000\\r\\nRDATE:20181028T030000\\r\\nEND:STANDARD\\r\\nBEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:+00\\r\\nDTSTART:20190505T030000\\r\\nRDATE:20190505T030000\\r\\nRDATE:20200419T030000\\r\\nRDATE:20210411T030000\\r\\nRDATE:20220327T030000\\r\\nRDATE:20230319T030000\\r\\nRDATE:20240310T030000\\r\\nEND:DAYLIGHT\",\"Africa/Ceuta\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\",\"Africa/Conakry\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:GMT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Africa/Dakar\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:GMT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Africa/Dar_es_Salaam\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EAT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Africa/Djibouti\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EAT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Africa/Douala\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:WAT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Africa/El_Aaiun\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0100\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:+00\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\\r\\nBEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:+01\\r\\nDTSTART:20180325T020000\\r\\nRDATE:20180325T020000\\r\\nRDATE:20180617T020000\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:+00\\r\\nDTSTART:20180513T030000\\r\\nRDATE:20180513T030000\\r\\nEND:STANDARD\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:+01\\r\\nDTSTART:20181028T030000\\r\\nRDATE:20181028T030000\\r\\nEND:STANDARD\\r\\nBEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:+00\\r\\nDTSTART:20190505T030000\\r\\nRDATE:20190505T030000\\r\\nRDATE:20200419T030000\\r\\nRDATE:20210411T030000\\r\\nRDATE:20220327T030000\\r\\nRDATE:20230319T030000\\r\\nRDATE:20240310T030000\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:+01\\r\\nDTSTART:20190609T020000\\r\\nRDATE:20190609T020000\\r\\nRDATE:20200531T020000\\r\\nRDATE:20210516T020000\\r\\nRDATE:20220508T020000\\r\\nRDATE:20230430T020000\\r\\nRDATE:20240414T020000\\r\\nEND:STANDARD\",\"Africa/Freetown\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:GMT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Africa/Gaborone\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CAT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Africa/Harare\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CAT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Africa/Johannesburg\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:SAST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Africa/Juba\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EAT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Africa/Kampala\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EAT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Africa/Khartoum\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CAT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Africa/Kigali\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CAT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Africa/Kinshasa\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:WAT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Africa/Lagos\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:WAT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Africa/Libreville\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:WAT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Africa/Lome\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:GMT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Africa/Luanda\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:WAT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Africa/Lubumbashi\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CAT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Africa/Lusaka\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CAT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Africa/Malabo\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:WAT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Africa/Maputo\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CAT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Africa/Maseru\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:SAST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Africa/Mbabane\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:SAST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Africa/Mogadishu\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EAT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Africa/Monrovia\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:GMT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Africa/Nairobi\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EAT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Africa/Ndjamena\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:WAT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Africa/Niamey\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:WAT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Africa/Nouakchott\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:GMT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Africa/Ouagadougou\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:GMT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Africa/Porto-Novo\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:WAT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Africa/Sao_Tome\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:WAT\\r\\nDTSTART:20180101T010000\\r\\nRDATE:20180101T010000\\r\\nEND:STANDARD\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:GMT\\r\\nDTSTART:20190101T020000\\r\\nRDATE:20190101T020000\\r\\nEND:STANDARD\",\"Africa/Tripoli\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:EET\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Africa/Tunis\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Africa/Windhoek\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CAT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"America/Adak\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-1000\\r\\nTZOFFSETTO:-0900\\r\\nTZNAME:HDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:-0900\\r\\nTZOFFSETTO:-1000\\r\\nTZNAME:HST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\",\"America/Anchorage\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0900\\r\\nTZOFFSETTO:-0800\\r\\nTZNAME:AKDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:-0800\\r\\nTZOFFSETTO:-0900\\r\\nTZNAME:AKST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\",\"America/Anguilla\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:AST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"America/Antigua\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:AST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"America/Araguaina\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"America/Argentina/Buenos_Aires\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"America/Argentina/Catamarca\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"America/Argentina/Cordoba\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"America/Argentina/Jujuy\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"America/Argentina/La_Rioja\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"America/Argentina/Mendoza\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"America/Argentina/Rio_Gallegos\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"America/Argentina/Salta\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"America/Argentina/San_Juan\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"America/Argentina/San_Luis\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"America/Argentina/Tucuman\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"America/Argentina/Ushuaia\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"America/Aruba\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:AST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"America/Asuncion\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19701004T000000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:-04\\r\\nDTSTART:19700322T000000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=4SU\\r\\nEND:STANDARD\",\"America/Atikokan\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:EST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"America/Bahia\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"America/Bahia_Banderas\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:CST\\r\\nDTSTART:19701025T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\\r\\nBEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:CDT\\r\\nDTSTART:19700405T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\\r\\nEND:DAYLIGHT\",\"America/Barbados\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:AST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"America/Belem\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"America/Belize\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:CST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"America/Blanc-Sablon\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:AST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"America/Boa_Vista\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:-04\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"America/Bogota\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:-05\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"America/Boise\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0700\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:MDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0700\\r\\nTZNAME:MST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\",\"America/Cambridge_Bay\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0700\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:MDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0700\\r\\nTZNAME:MST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\",\"America/Campo_Grande\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:-04\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\\r\\nBEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:20181104T000000\\r\\nRDATE:20181104T000000\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:-04\\r\\nDTSTART:20180218T000000\\r\\nRDATE:20180218T000000\\r\\nRDATE:20190217T000000\\r\\nEND:STANDARD\",\"America/Cancun\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:EST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"America/Caracas\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:-04\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"America/Cayenne\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"America/Cayman\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:EST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"America/Chicago\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:CDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:CST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\",\"America/Chihuahua\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0700\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:MDT\\r\\nDTSTART:19700405T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0700\\r\\nTZNAME:MST\\r\\nDTSTART:19701025T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\",\"America/Costa_Rica\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:CST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"America/Creston\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0700\\r\\nTZOFFSETTO:-0700\\r\\nTZNAME:MST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"America/Cuiaba\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:20181104T000000\\r\\nRDATE:20181104T000000\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:-04\\r\\nDTSTART:20180218T000000\\r\\nRDATE:20180218T000000\\r\\nRDATE:20190217T000000\\r\\nEND:STANDARD\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:-04\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"America/Curacao\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:AST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"America/Danmarkshavn\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:GMT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"America/Dawson\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0800\\r\\nTZOFFSETTO:-0800\\r\\nTZNAME:PST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\\r\\nBEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0800\\r\\nTZOFFSETTO:-0700\\r\\nTZNAME:PDT\\r\\nDTSTART:20180311T020000\\r\\nRDATE:20180311T020000\\r\\nRDATE:20190310T020000\\r\\nRDATE:20200308T020000\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:-0700\\r\\nTZOFFSETTO:-0800\\r\\nTZNAME:PST\\r\\nDTSTART:20181104T020000\\r\\nRDATE:20181104T020000\\r\\nRDATE:20191103T020000\\r\\nEND:STANDARD\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:-0700\\r\\nTZOFFSETTO:-0700\\r\\nTZNAME:MST\\r\\nDTSTART:20201101T000000\\r\\nRDATE:20201101T000000\\r\\nEND:STANDARD\",\"America/Dawson_Creek\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0700\\r\\nTZOFFSETTO:-0700\\r\\nTZNAME:MST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"America/Denver\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0700\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:MDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0700\\r\\nTZNAME:MST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\",\"America/Detroit\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:EDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:EST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\",\"America/Dominica\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:AST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"America/Edmonton\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0700\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:MDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0700\\r\\nTZNAME:MST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\",\"America/Eirunepe\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:-05\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"America/El_Salvador\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:CST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"America/Fort_Nelson\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0700\\r\\nTZOFFSETTO:-0700\\r\\nTZNAME:MST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"America/Fortaleza\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"America/Glace_Bay\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:ADT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:AST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\",\"America/Goose_Bay\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:AST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\\r\\nBEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:ADT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\"America/Grand_Turk\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:EST\\r\\nDTSTART:20181104T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\\r\\nBEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:EDT\\r\\nDTSTART:20190310T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:AST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\\r\\nBEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:EDT\\r\\nDTSTART:20180311T020000\\r\\nRDATE:20180311T020000\\r\\nEND:DAYLIGHT\",\"America/Grenada\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:AST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"America/Guadeloupe\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:AST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"America/Guatemala\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:CST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"America/Guayaquil\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:-05\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"America/Guyana\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:-04\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"America/Halifax\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:ADT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:AST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\",\"America/Havana\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:CST\\r\\nDTSTART:19701101T010000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\\r\\nBEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:CDT\\r\\nDTSTART:19700308T000000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\"America/Hermosillo\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0700\\r\\nTZOFFSETTO:-0700\\r\\nTZNAME:MST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"America/Indiana/Indianapolis\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:EDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:EST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\",\"America/Indiana/Knox\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:CDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:CST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\",\"America/Indiana/Marengo\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:EDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:EST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\",\"America/Indiana/Petersburg\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:EDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:EST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\",\"America/Indiana/Tell_City\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:CDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:CST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\",\"America/Indiana/Vevay\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:EDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:EST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\",\"America/Indiana/Vincennes\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:EDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:EST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\",\"America/Indiana/Winamac\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:EST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\\r\\nBEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:EDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\"America/Inuvik\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0700\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:MDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0700\\r\\nTZNAME:MST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\",\"America/Iqaluit\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:EDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:EST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\",\"America/Jamaica\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:EST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"America/Juneau\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0900\\r\\nTZOFFSETTO:-0800\\r\\nTZNAME:AKDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:-0800\\r\\nTZOFFSETTO:-0900\\r\\nTZNAME:AKST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\",\"America/Kentucky/Louisville\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:EDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:EST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\",\"America/Kentucky/Monticello\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:EDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:EST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\",\"America/Kralendijk\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:AST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"America/La_Paz\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:-04\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"America/Lima\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:-05\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"America/Los_Angeles\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0800\\r\\nTZOFFSETTO:-0700\\r\\nTZNAME:PDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:-0700\\r\\nTZOFFSETTO:-0800\\r\\nTZNAME:PST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\",\"America/Lower_Princes\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:AST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"America/Maceio\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"America/Managua\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:CST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"America/Manaus\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:-04\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"America/Marigot\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:AST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"America/Martinique\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:AST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"America/Matamoros\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:CDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:CST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\",\"America/Mazatlan\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0700\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:MDT\\r\\nDTSTART:19700405T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0700\\r\\nTZNAME:MST\\r\\nDTSTART:19701025T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\",\"America/Menominee\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:CDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:CST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\",\"America/Merida\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:CDT\\r\\nDTSTART:19700405T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:CST\\r\\nDTSTART:19701025T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\",\"America/Metlakatla\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0900\\r\\nTZOFFSETTO:-0800\\r\\nTZNAME:AKDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:-0800\\r\\nTZOFFSETTO:-0900\\r\\nTZNAME:AKST\\r\\nDTSTART:20191103T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:-0800\\r\\nTZOFFSETTO:-0800\\r\\nTZNAME:PST\\r\\nDTSTART:20181104T020000\\r\\nRDATE:20181104T020000\\r\\nEND:STANDARD\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:-0800\\r\\nTZOFFSETTO:-0900\\r\\nTZNAME:AKST\\r\\nDTSTART:20190120T020000\\r\\nRDATE:20190120T020000\\r\\nEND:STANDARD\",\"America/Mexico_City\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:CDT\\r\\nDTSTART:19700405T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:CST\\r\\nDTSTART:19701025T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\",\"America/Miquelon\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0200\\r\\nTZNAME:-02\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:-0200\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\",\"America/Moncton\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:ADT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:AST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\",\"America/Monterrey\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:CDT\\r\\nDTSTART:19700405T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:CST\\r\\nDTSTART:19701025T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\",\"America/Montevideo\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"America/Montserrat\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:AST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"America/Nassau\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:EDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:EST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\",\"America/New_York\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:EDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:EST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\",\"America/Nipigon\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:EDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:EST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\",\"America/Nome\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0900\\r\\nTZOFFSETTO:-0800\\r\\nTZNAME:AKDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:-0800\\r\\nTZOFFSETTO:-0900\\r\\nTZNAME:AKST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\",\"America/Noronha\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0200\\r\\nTZOFFSETTO:-0200\\r\\nTZNAME:-02\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"America/North_Dakota/Beulah\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:CDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:CST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\",\"America/North_Dakota/Center\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:CDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:CST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\",\"America/North_Dakota/New_Salem\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:CDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:CST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\",\"America/Nuuk\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0200\\r\\nTZNAME:-02\\r\\nDTSTART:19700328T220000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYMONTHDAY=24,25,26,27,28,29,30;BYDAY=SA\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:-0200\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19701024T230000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=24,25,26,27,28,29,30;BYDAY=SA\\r\\nEND:STANDARD\",\"America/Ojinaga\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0700\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:MDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0700\\r\\nTZNAME:MST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\",\"America/Panama\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:EST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"America/Pangnirtung\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:EDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:EST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\",\"America/Paramaribo\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"America/Phoenix\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0700\\r\\nTZOFFSETTO:-0700\\r\\nTZNAME:MST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"America/Port-au-Prince\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:EDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:EST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\",\"America/Port_of_Spain\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:AST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"America/Porto_Velho\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:-04\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"America/Puerto_Rico\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:AST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"America/Punta_Arenas\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"America/Rainy_River\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:CDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:CST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\",\"America/Rankin_Inlet\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:CDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:CST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\",\"America/Recife\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"America/Regina\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:CST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"America/Resolute\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:CST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\\r\\nBEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:CDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\"America/Rio_Branco\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:-05\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"America/Santarem\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"America/Santiago\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:-04\\r\\nDTSTART:20190407T000000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=2,3,4,5,6,7,8;BYDAY=SU\\r\\nEND:STANDARD\\r\\nBEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:20190908T000000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=9;BYMONTHDAY=2,3,4,5,6,7,8;BYDAY=SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:-04\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\\r\\nBEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:20180812T000000\\r\\nRDATE:20180812T000000\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:-04\\r\\nDTSTART:20180513T000000\\r\\nRDATE:20180513T000000\\r\\nEND:STANDARD\",\"America/Santo_Domingo\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:AST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"America/Sao_Paulo\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0200\\r\\nTZNAME:-02\\r\\nDTSTART:20181104T000000\\r\\nRDATE:20181104T000000\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:-0200\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:20180218T000000\\r\\nRDATE:20180218T000000\\r\\nRDATE:20190217T000000\\r\\nEND:STANDARD\\r\\nBEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0200\\r\\nTZOFFSETTO:-0200\\r\\nTZNAME:-02\\r\\nDTSTART:19700101T000000\\r\\nEND:DAYLIGHT\",\"America/Scoresbysund\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0100\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:+00\\r\\nDTSTART:19700329T000000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:-0100\\r\\nTZNAME:-01\\r\\nDTSTART:19701025T010000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\",\"America/Sitka\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0900\\r\\nTZOFFSETTO:-0800\\r\\nTZNAME:AKDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:-0800\\r\\nTZOFFSETTO:-0900\\r\\nTZNAME:AKST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\",\"America/St_Barthelemy\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:AST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"America/St_Johns\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0230\\r\\nTZOFFSETTO:-0330\\r\\nTZNAME:NST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\\r\\nBEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0330\\r\\nTZOFFSETTO:-0230\\r\\nTZNAME:NDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\"America/St_Kitts\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:AST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"America/St_Lucia\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:AST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"America/St_Thomas\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:AST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"America/St_Vincent\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:AST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"America/Swift_Current\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:CST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"America/Tegucigalpa\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:CST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"America/Thule\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:ADT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:AST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\",\"America/Thunder_Bay\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:EDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:EST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\",\"America/Tijuana\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0800\\r\\nTZOFFSETTO:-0700\\r\\nTZNAME:PDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:-0700\\r\\nTZOFFSETTO:-0800\\r\\nTZNAME:PST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\",\"America/Toronto\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:EDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:EST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\",\"America/Tortola\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:AST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"America/Vancouver\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0800\\r\\nTZOFFSETTO:-0700\\r\\nTZNAME:PDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:-0700\\r\\nTZOFFSETTO:-0800\\r\\nTZNAME:PST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\",\"America/Whitehorse\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0800\\r\\nTZOFFSETTO:-0800\\r\\nTZNAME:PST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\\r\\nBEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0800\\r\\nTZOFFSETTO:-0700\\r\\nTZNAME:PDT\\r\\nDTSTART:20180311T020000\\r\\nRDATE:20180311T020000\\r\\nRDATE:20190310T020000\\r\\nRDATE:20200308T020000\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:-0700\\r\\nTZOFFSETTO:-0800\\r\\nTZNAME:PST\\r\\nDTSTART:20181104T020000\\r\\nRDATE:20181104T020000\\r\\nRDATE:20191103T020000\\r\\nEND:STANDARD\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:-0700\\r\\nTZOFFSETTO:-0700\\r\\nTZNAME:MST\\r\\nDTSTART:20201101T000000\\r\\nRDATE:20201101T000000\\r\\nEND:STANDARD\",\"America/Winnipeg\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:CDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:CST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\",\"America/Yakutat\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0900\\r\\nTZOFFSETTO:-0800\\r\\nTZNAME:AKDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:-0800\\r\\nTZOFFSETTO:-0900\\r\\nTZNAME:AKST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\",\"America/Yellowknife\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0700\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:MDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0700\\r\\nTZNAME:MST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\",\"Antarctica/Casey\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:+0800\\r\\nTZNAME:+08\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+0800\\r\\nTZOFFSETTO:+1100\\r\\nTZNAME:+11\\r\\nDTSTART:20181007T040000\\r\\nRDATE:20181007T040000\\r\\nRDATE:20191004T030000\\r\\nRDATE:20201004T000100\\r\\nEND:STANDARD\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+1100\\r\\nTZOFFSETTO:+0800\\r\\nTZNAME:+08\\r\\nDTSTART:20180311T040000\\r\\nRDATE:20180311T040000\\r\\nRDATE:20190317T030000\\r\\nRDATE:20200308T030000\\r\\nEND:STANDARD\",\"Antarctica/Davis\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0700\\r\\nTZOFFSETTO:+0700\\r\\nTZNAME:+07\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Antarctica/DumontDUrville\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1000\\r\\nTZOFFSETTO:+1000\\r\\nTZNAME:+10\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Antarctica/Macquarie\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1100\\r\\nTZOFFSETTO:+1000\\r\\nTZNAME:AEST\\r\\nDTSTART:19700405T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\\r\\nEND:STANDARD\\r\\nBEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+1000\\r\\nTZOFFSETTO:+1100\\r\\nTZNAME:AEDT\\r\\nDTSTART:19701004T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU\\r\\nEND:DAYLIGHT\",\"Antarctica/Mawson\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0500\\r\\nTZOFFSETTO:+0500\\r\\nTZNAME:+05\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Antarctica/McMurdo\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+1200\\r\\nTZOFFSETTO:+1300\\r\\nTZNAME:NZDT\\r\\nDTSTART:19700927T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+1300\\r\\nTZOFFSETTO:+1200\\r\\nTZNAME:NZST\\r\\nDTSTART:19700405T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\\r\\nEND:STANDARD\",\"Antarctica/Palmer\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Antarctica/Rothera\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Antarctica/Syowa\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:+03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Antarctica/Troll\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:+02\\r\\nDTSTART:19700329T010000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:+00\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\",\"Antarctica/Vostok\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0600\\r\\nTZOFFSETTO:+0600\\r\\nTZNAME:+06\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Arctic/Longyearbyen\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\",\"Asia/Aden\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:+03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Asia/Almaty\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0600\\r\\nTZOFFSETTO:+0600\\r\\nTZNAME:+06\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Asia/Amman\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EEST\\r\\nDTSTART:19700326T235959\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1TH\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:EET\\r\\nDTSTART:19701030T010000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1FR\\r\\nEND:STANDARD\",\"Asia/Anadyr\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1200\\r\\nTZOFFSETTO:+1200\\r\\nTZNAME:+12\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Asia/Aqtau\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0500\\r\\nTZOFFSETTO:+0500\\r\\nTZNAME:+05\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Asia/Aqtobe\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0500\\r\\nTZOFFSETTO:+0500\\r\\nTZNAME:+05\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Asia/Ashgabat\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0500\\r\\nTZOFFSETTO:+0500\\r\\nTZNAME:+05\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Asia/Atyrau\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0500\\r\\nTZOFFSETTO:+0500\\r\\nTZNAME:+05\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Asia/Baghdad\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:+03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Asia/Bahrain\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:+03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Asia/Baku\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0400\\r\\nTZOFFSETTO:+0400\\r\\nTZNAME:+04\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Asia/Bangkok\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0700\\r\\nTZOFFSETTO:+0700\\r\\nTZNAME:+07\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Asia/Barnaul\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0700\\r\\nTZOFFSETTO:+0700\\r\\nTZNAME:+07\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Asia/Beirut\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EEST\\r\\nDTSTART:19700329T000000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:EET\\r\\nDTSTART:19701025T000000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\",\"Asia/Bishkek\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0600\\r\\nTZOFFSETTO:+0600\\r\\nTZNAME:+06\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Asia/Brunei\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0800\\r\\nTZOFFSETTO:+0800\\r\\nTZNAME:+08\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Asia/Chita\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0900\\r\\nTZOFFSETTO:+0900\\r\\nTZNAME:+09\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Asia/Choibalsan\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0800\\r\\nTZOFFSETTO:+0800\\r\\nTZNAME:+08\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Asia/Colombo\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0530\\r\\nTZOFFSETTO:+0530\\r\\nTZNAME:+0530\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Asia/Damascus\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:EET\\r\\nDTSTART:19701030T000000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1FR\\r\\nEND:STANDARD\\r\\nBEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EEST\\r\\nDTSTART:19700327T000000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1FR\\r\\nEND:DAYLIGHT\",\"Asia/Dhaka\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0600\\r\\nTZOFFSETTO:+0600\\r\\nTZNAME:+06\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Asia/Dili\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0900\\r\\nTZOFFSETTO:+0900\\r\\nTZNAME:+09\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Asia/Dubai\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0400\\r\\nTZOFFSETTO:+0400\\r\\nTZNAME:+04\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Asia/Dushanbe\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0500\\r\\nTZOFFSETTO:+0500\\r\\nTZNAME:+05\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Asia/Famagusta\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:EET\\r\\nDTSTART:19701025T040000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\\r\\nBEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EEST\\r\\nDTSTART:20180325T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\"Asia/Gaza\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EEST\\r\\nDTSTART:20200328T000000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYMONTHDAY=24,25,26,27,28,29,30;BYDAY=SA\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:EET\\r\\nDTSTART:20201024T010000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=24,25,26,27,28,29,30;BYDAY=SA\\r\\nEND:STANDARD\\r\\nBEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EEST\\r\\nDTSTART:20180324T010000\\r\\nRDATE:20180324T010000\\r\\nRDATE:20190329T000000\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:EET\\r\\nDTSTART:20181027T010000\\r\\nRDATE:20181027T010000\\r\\nRDATE:20191026T000000\\r\\nEND:STANDARD\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:EET\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Asia/Hebron\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EEST\\r\\nDTSTART:20200328T000000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYMONTHDAY=24,25,26,27,28,29,30;BYDAY=SA\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:EET\\r\\nDTSTART:20201024T010000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=24,25,26,27,28,29,30;BYDAY=SA\\r\\nEND:STANDARD\\r\\nBEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EEST\\r\\nDTSTART:20180324T010000\\r\\nRDATE:20180324T010000\\r\\nRDATE:20190329T000000\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:EET\\r\\nDTSTART:20181027T010000\\r\\nRDATE:20181027T010000\\r\\nRDATE:20191026T000000\\r\\nEND:STANDARD\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:EET\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Asia/Ho_Chi_Minh\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0700\\r\\nTZOFFSETTO:+0700\\r\\nTZNAME:+07\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Asia/Hong_Kong\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0800\\r\\nTZOFFSETTO:+0800\\r\\nTZNAME:HKT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Asia/Hovd\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0700\\r\\nTZOFFSETTO:+0700\\r\\nTZNAME:+07\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Asia/Irkutsk\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0800\\r\\nTZOFFSETTO:+0800\\r\\nTZNAME:+08\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Asia/Istanbul\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:+03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Asia/Jakarta\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0700\\r\\nTZOFFSETTO:+0700\\r\\nTZNAME:WIB\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Asia/Jayapura\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0900\\r\\nTZOFFSETTO:+0900\\r\\nTZNAME:WIT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Asia/Jerusalem\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:IDT\\r\\nDTSTART:19700327T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYMONTHDAY=23,24,25,26,27,28,29;BYDAY=FR\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:IST\\r\\nDTSTART:19701025T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\",\"Asia/Kabul\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0430\\r\\nTZOFFSETTO:+0430\\r\\nTZNAME:+0430\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Asia/Kamchatka\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1200\\r\\nTZOFFSETTO:+1200\\r\\nTZNAME:+12\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Asia/Karachi\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0500\\r\\nTZOFFSETTO:+0500\\r\\nTZNAME:PKT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Asia/Kathmandu\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0545\\r\\nTZOFFSETTO:+0545\\r\\nTZNAME:+0545\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Asia/Khandyga\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0900\\r\\nTZOFFSETTO:+0900\\r\\nTZNAME:+09\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Asia/Kolkata\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0530\\r\\nTZOFFSETTO:+0530\\r\\nTZNAME:IST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Asia/Krasnoyarsk\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0700\\r\\nTZOFFSETTO:+0700\\r\\nTZNAME:+07\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Asia/Kuala_Lumpur\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0800\\r\\nTZOFFSETTO:+0800\\r\\nTZNAME:+08\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Asia/Kuching\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0800\\r\\nTZOFFSETTO:+0800\\r\\nTZNAME:+08\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Asia/Kuwait\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:+03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Asia/Macau\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0800\\r\\nTZOFFSETTO:+0800\\r\\nTZNAME:CST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Asia/Magadan\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1100\\r\\nTZOFFSETTO:+1100\\r\\nTZNAME:+11\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Asia/Makassar\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0800\\r\\nTZOFFSETTO:+0800\\r\\nTZNAME:WITA\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Asia/Manila\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0800\\r\\nTZOFFSETTO:+0800\\r\\nTZNAME:PST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Asia/Muscat\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0400\\r\\nTZOFFSETTO:+0400\\r\\nTZNAME:+04\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Asia/Nicosia\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:EET\\r\\nDTSTART:19701025T040000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\\r\\nBEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EEST\\r\\nDTSTART:19700329T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\"Asia/Novokuznetsk\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0700\\r\\nTZOFFSETTO:+0700\\r\\nTZNAME:+07\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Asia/Novosibirsk\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0700\\r\\nTZOFFSETTO:+0700\\r\\nTZNAME:+07\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Asia/Omsk\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0600\\r\\nTZOFFSETTO:+0600\\r\\nTZNAME:+06\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Asia/Oral\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0500\\r\\nTZOFFSETTO:+0500\\r\\nTZNAME:+05\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Asia/Phnom_Penh\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0700\\r\\nTZOFFSETTO:+0700\\r\\nTZNAME:+07\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Asia/Pontianak\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0700\\r\\nTZOFFSETTO:+0700\\r\\nTZNAME:WIB\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Asia/Pyongyang\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0900\\r\\nTZOFFSETTO:+0830\\r\\nTZNAME:KST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+0830\\r\\nTZOFFSETTO:+0900\\r\\nTZNAME:KST\\r\\nDTSTART:20180504T233000\\r\\nRDATE:20180504T233000\\r\\nEND:STANDARD\",\"Asia/Qatar\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:+03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Asia/Qostanay\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0600\\r\\nTZOFFSETTO:+0600\\r\\nTZNAME:+06\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Asia/Qyzylorda\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0600\\r\\nTZOFFSETTO:+0600\\r\\nTZNAME:+06\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+0600\\r\\nTZOFFSETTO:+0500\\r\\nTZNAME:+05\\r\\nDTSTART:20181221T000000\\r\\nRDATE:20181221T000000\\r\\nEND:STANDARD\",\"Asia/Riyadh\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:+03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Asia/Sakhalin\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1100\\r\\nTZOFFSETTO:+1100\\r\\nTZNAME:+11\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Asia/Samarkand\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0500\\r\\nTZOFFSETTO:+0500\\r\\nTZNAME:+05\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Asia/Seoul\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0900\\r\\nTZOFFSETTO:+0900\\r\\nTZNAME:KST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Asia/Shanghai\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0800\\r\\nTZOFFSETTO:+0800\\r\\nTZNAME:CST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Asia/Singapore\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0800\\r\\nTZOFFSETTO:+0800\\r\\nTZNAME:+08\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Asia/Srednekolymsk\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1100\\r\\nTZOFFSETTO:+1100\\r\\nTZNAME:+11\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Asia/Taipei\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0800\\r\\nTZOFFSETTO:+0800\\r\\nTZNAME:CST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Asia/Tashkent\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0500\\r\\nTZOFFSETTO:+0500\\r\\nTZNAME:+05\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Asia/Tbilisi\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0400\\r\\nTZOFFSETTO:+0400\\r\\nTZNAME:+04\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Asia/Tehran\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0400\\r\\nTZOFFSETTO:+0330\\r\\nTZNAME:+0330\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\\r\\nBEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0330\\r\\nTZOFFSETTO:+0430\\r\\nTZNAME:+0430\\r\\nDTSTART:20180321T235959\\r\\nRDATE:20180321T235959\\r\\nRDATE:20190321T235959\\r\\nRDATE:20200320T235959\\r\\nRDATE:20210321T235959\\r\\nRDATE:20220321T235959\\r\\nRDATE:20230321T235959\\r\\nRDATE:20240320T235959\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+0430\\r\\nTZOFFSETTO:+0330\\r\\nTZNAME:+0330\\r\\nDTSTART:20180921T235959\\r\\nRDATE:20180921T235959\\r\\nRDATE:20190921T235959\\r\\nRDATE:20200920T235959\\r\\nRDATE:20210921T235959\\r\\nRDATE:20220921T235959\\r\\nRDATE:20230921T235959\\r\\nRDATE:20240920T235959\\r\\nEND:STANDARD\",\"Asia/Thimphu\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0600\\r\\nTZOFFSETTO:+0600\\r\\nTZNAME:+06\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Asia/Tokyo\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0900\\r\\nTZOFFSETTO:+0900\\r\\nTZNAME:JST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Asia/Tomsk\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0700\\r\\nTZOFFSETTO:+0700\\r\\nTZNAME:+07\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Asia/Ulaanbaatar\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0800\\r\\nTZOFFSETTO:+0800\\r\\nTZNAME:+08\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Asia/Urumqi\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0600\\r\\nTZOFFSETTO:+0600\\r\\nTZNAME:+06\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Asia/Ust-Nera\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1000\\r\\nTZOFFSETTO:+1000\\r\\nTZNAME:+10\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Asia/Vientiane\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0700\\r\\nTZOFFSETTO:+0700\\r\\nTZNAME:+07\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Asia/Vladivostok\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1000\\r\\nTZOFFSETTO:+1000\\r\\nTZNAME:+10\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Asia/Yakutsk\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0900\\r\\nTZOFFSETTO:+0900\\r\\nTZNAME:+09\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Asia/Yangon\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0630\\r\\nTZOFFSETTO:+0630\\r\\nTZNAME:+0630\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Asia/Yekaterinburg\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0500\\r\\nTZOFFSETTO:+0500\\r\\nTZNAME:+05\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Asia/Yerevan\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0400\\r\\nTZOFFSETTO:+0400\\r\\nTZNAME:+04\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Atlantic/Azores\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0100\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:+00\\r\\nDTSTART:19700329T000000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:-0100\\r\\nTZNAME:-01\\r\\nDTSTART:19701025T010000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\",\"Atlantic/Bermuda\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:ADT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:AST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\",\"Atlantic/Canary\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:WEST\\r\\nDTSTART:19700329T010000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:WET\\r\\nDTSTART:19701025T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\",\"Atlantic/Cape_Verde\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0100\\r\\nTZOFFSETTO:-0100\\r\\nTZNAME:-01\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Atlantic/Faroe\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:WEST\\r\\nDTSTART:19700329T010000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:WET\\r\\nDTSTART:19701025T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\",\"Atlantic/Madeira\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:WEST\\r\\nDTSTART:19700329T010000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:WET\\r\\nDTSTART:19701025T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\",\"Atlantic/Reykjavik\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:GMT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Atlantic/South_Georgia\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0200\\r\\nTZOFFSETTO:-0200\\r\\nTZNAME:-02\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Atlantic/St_Helena\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:GMT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Atlantic/Stanley\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Australia/Adelaide\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1030\\r\\nTZOFFSETTO:+0930\\r\\nTZNAME:ACST\\r\\nDTSTART:19700405T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\\r\\nEND:STANDARD\\r\\nBEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0930\\r\\nTZOFFSETTO:+1030\\r\\nTZNAME:ACDT\\r\\nDTSTART:19701004T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU\\r\\nEND:DAYLIGHT\",\"Australia/Brisbane\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1000\\r\\nTZOFFSETTO:+1000\\r\\nTZNAME:AEST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Australia/Broken_Hill\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1030\\r\\nTZOFFSETTO:+0930\\r\\nTZNAME:ACST\\r\\nDTSTART:19700405T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\\r\\nEND:STANDARD\\r\\nBEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0930\\r\\nTZOFFSETTO:+1030\\r\\nTZNAME:ACDT\\r\\nDTSTART:19701004T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU\\r\\nEND:DAYLIGHT\",\"Australia/Currie\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+1000\\r\\nTZOFFSETTO:+1100\\r\\nTZNAME:AEDT\\r\\nDTSTART:19701004T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+1100\\r\\nTZOFFSETTO:+1000\\r\\nTZNAME:AEST\\r\\nDTSTART:19700405T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\\r\\nEND:STANDARD\",\"Australia/Darwin\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0930\\r\\nTZOFFSETTO:+0930\\r\\nTZNAME:ACST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Australia/Eucla\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0845\\r\\nTZOFFSETTO:+0845\\r\\nTZNAME:+0845\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Australia/Hobart\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+1000\\r\\nTZOFFSETTO:+1100\\r\\nTZNAME:AEDT\\r\\nDTSTART:19701004T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+1100\\r\\nTZOFFSETTO:+1000\\r\\nTZNAME:AEST\\r\\nDTSTART:19700405T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\\r\\nEND:STANDARD\",\"Australia/Lindeman\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1000\\r\\nTZOFFSETTO:+1000\\r\\nTZNAME:AEST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Australia/Lord_Howe\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1100\\r\\nTZOFFSETTO:+1030\\r\\nTZNAME:+1030\\r\\nDTSTART:19700405T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\\r\\nEND:STANDARD\\r\\nBEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+1030\\r\\nTZOFFSETTO:+1100\\r\\nTZNAME:+11\\r\\nDTSTART:19701004T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU\\r\\nEND:DAYLIGHT\",\"Australia/Melbourne\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1100\\r\\nTZOFFSETTO:+1000\\r\\nTZNAME:AEST\\r\\nDTSTART:19700405T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\\r\\nEND:STANDARD\\r\\nBEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+1000\\r\\nTZOFFSETTO:+1100\\r\\nTZNAME:AEDT\\r\\nDTSTART:19701004T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU\\r\\nEND:DAYLIGHT\",\"Australia/Perth\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0800\\r\\nTZOFFSETTO:+0800\\r\\nTZNAME:AWST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Australia/Sydney\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1100\\r\\nTZOFFSETTO:+1000\\r\\nTZNAME:AEST\\r\\nDTSTART:19700405T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\\r\\nEND:STANDARD\\r\\nBEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+1000\\r\\nTZOFFSETTO:+1100\\r\\nTZNAME:AEDT\\r\\nDTSTART:19701004T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU\\r\\nEND:DAYLIGHT\",\"Europe/Amsterdam\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\",\"Europe/Andorra\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\",\"Europe/Astrakhan\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0400\\r\\nTZOFFSETTO:+0400\\r\\nTZNAME:+04\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Europe/Athens\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EEST\\r\\nDTSTART:19700329T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:EET\\r\\nDTSTART:19701025T040000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\",\"Europe/Belgrade\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\",\"Europe/Berlin\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\",\"Europe/Bratislava\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\",\"Europe/Brussels\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\",\"Europe/Bucharest\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EEST\\r\\nDTSTART:19700329T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:EET\\r\\nDTSTART:19701025T040000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\",\"Europe/Budapest\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\",\"Europe/Busingen\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\",\"Europe/Chisinau\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:EET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\",\"Europe/Copenhagen\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\",\"Europe/Dublin\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:IST\\r\\nDTSTART:19700329T010000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:STANDARD\\r\\nBEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:GMT\\r\\nDTSTART:19701025T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\"Europe/Gibraltar\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\",\"Europe/Guernsey\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:BST\\r\\nDTSTART:19700329T010000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:GMT\\r\\nDTSTART:19701025T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\",\"Europe/Helsinki\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EEST\\r\\nDTSTART:19700329T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:EET\\r\\nDTSTART:19701025T040000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\",\"Europe/Isle_of_Man\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:BST\\r\\nDTSTART:19700329T010000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:GMT\\r\\nDTSTART:19701025T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\",\"Europe/Istanbul\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:+03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Europe/Jersey\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:BST\\r\\nDTSTART:19700329T010000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:GMT\\r\\nDTSTART:19701025T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\",\"Europe/Kaliningrad\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:EET\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Europe/Kiev\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EEST\\r\\nDTSTART:19700329T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:EET\\r\\nDTSTART:19701025T040000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\",\"Europe/Kirov\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:+03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Europe/Lisbon\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:WET\\r\\nDTSTART:19701025T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\\r\\nBEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:WEST\\r\\nDTSTART:19700329T010000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\"Europe/Ljubljana\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\",\"Europe/London\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:BST\\r\\nDTSTART:19700329T010000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:GMT\\r\\nDTSTART:19701025T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\",\"Europe/Luxembourg\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\",\"Europe/Madrid\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\",\"Europe/Malta\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\",\"Europe/Mariehamn\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EEST\\r\\nDTSTART:19700329T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:EET\\r\\nDTSTART:19701025T040000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\",\"Europe/Minsk\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:+03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Europe/Monaco\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\",\"Europe/Moscow\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:MSK\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Europe/Nicosia\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:EET\\r\\nDTSTART:19701025T040000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\\r\\nBEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EEST\\r\\nDTSTART:19700329T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\"Europe/Oslo\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\",\"Europe/Paris\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\",\"Europe/Podgorica\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\",\"Europe/Prague\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\",\"Europe/Riga\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EEST\\r\\nDTSTART:19700329T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:EET\\r\\nDTSTART:19701025T040000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\",\"Europe/Rome\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\",\"Europe/Samara\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0400\\r\\nTZOFFSETTO:+0400\\r\\nTZNAME:+04\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Europe/San_Marino\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\",\"Europe/Sarajevo\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\",\"Europe/Saratov\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0400\\r\\nTZOFFSETTO:+0400\\r\\nTZNAME:+04\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Europe/Simferopol\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:MSK\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Europe/Skopje\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\",\"Europe/Sofia\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EEST\\r\\nDTSTART:19700329T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:EET\\r\\nDTSTART:19701025T040000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\",\"Europe/Stockholm\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\",\"Europe/Tallinn\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EEST\\r\\nDTSTART:19700329T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:EET\\r\\nDTSTART:19701025T040000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\",\"Europe/Tirane\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\",\"Europe/Ulyanovsk\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0400\\r\\nTZOFFSETTO:+0400\\r\\nTZNAME:+04\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Europe/Uzhgorod\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EEST\\r\\nDTSTART:19700329T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:EET\\r\\nDTSTART:19701025T040000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\",\"Europe/Vaduz\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\",\"Europe/Vatican\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\",\"Europe/Vienna\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\",\"Europe/Vilnius\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EEST\\r\\nDTSTART:19700329T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:EET\\r\\nDTSTART:19701025T040000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\",\"Europe/Volgograd\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0400\\r\\nTZNAME:+04\\r\\nDTSTART:20181028T020000\\r\\nRDATE:20181028T020000\\r\\nEND:STANDARD\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+0400\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:+03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Europe/Warsaw\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\",\"Europe/Zagreb\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\",\"Europe/Zaporozhye\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EEST\\r\\nDTSTART:19700329T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:EET\\r\\nDTSTART:19701025T040000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\",\"Europe/Zurich\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\",\"Indian/Antananarivo\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EAT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Indian/Chagos\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0600\\r\\nTZOFFSETTO:+0600\\r\\nTZNAME:+06\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Indian/Christmas\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0700\\r\\nTZOFFSETTO:+0700\\r\\nTZNAME:+07\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Indian/Cocos\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0630\\r\\nTZOFFSETTO:+0630\\r\\nTZNAME:+0630\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Indian/Comoro\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EAT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Indian/Kerguelen\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0500\\r\\nTZOFFSETTO:+0500\\r\\nTZNAME:+05\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Indian/Mahe\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0400\\r\\nTZOFFSETTO:+0400\\r\\nTZNAME:+04\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Indian/Maldives\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0500\\r\\nTZOFFSETTO:+0500\\r\\nTZNAME:+05\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Indian/Mauritius\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0400\\r\\nTZOFFSETTO:+0400\\r\\nTZNAME:+04\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Indian/Mayotte\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EAT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Indian/Reunion\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0400\\r\\nTZOFFSETTO:+0400\\r\\nTZNAME:+04\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Pacific/Apia\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1400\\r\\nTZOFFSETTO:+1300\\r\\nTZNAME:+13\\r\\nDTSTART:19700405T040000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\\r\\nEND:STANDARD\\r\\nBEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+1300\\r\\nTZOFFSETTO:+1400\\r\\nTZNAME:+14\\r\\nDTSTART:19700927T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\"Pacific/Auckland\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+1200\\r\\nTZOFFSETTO:+1300\\r\\nTZNAME:NZDT\\r\\nDTSTART:19700927T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+1300\\r\\nTZOFFSETTO:+1200\\r\\nTZNAME:NZST\\r\\nDTSTART:19700405T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\\r\\nEND:STANDARD\",\"Pacific/Bougainville\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1100\\r\\nTZOFFSETTO:+1100\\r\\nTZNAME:+11\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Pacific/Chatham\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+1245\\r\\nTZOFFSETTO:+1345\\r\\nTZNAME:+1345\\r\\nDTSTART:19700927T024500\\r\\nRRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+1345\\r\\nTZOFFSETTO:+1245\\r\\nTZNAME:+1245\\r\\nDTSTART:19700405T034500\\r\\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\\r\\nEND:STANDARD\",\"Pacific/Chuuk\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1000\\r\\nTZOFFSETTO:+1000\\r\\nTZNAME:+10\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Pacific/Easter\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:-06\\r\\nDTSTART:20190406T220000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SA\\r\\nEND:STANDARD\\r\\nBEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:-05\\r\\nDTSTART:20190907T220000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=1SA\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:-06\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\\r\\nBEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:-05\\r\\nDTSTART:20180811T220000\\r\\nRDATE:20180811T220000\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:-06\\r\\nDTSTART:20180512T220000\\r\\nRDATE:20180512T220000\\r\\nEND:STANDARD\",\"Pacific/Efate\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1100\\r\\nTZOFFSETTO:+1100\\r\\nTZNAME:+11\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Pacific/Enderbury\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1300\\r\\nTZOFFSETTO:+1300\\r\\nTZNAME:+13\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Pacific/Fakaofo\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1300\\r\\nTZOFFSETTO:+1300\\r\\nTZNAME:+13\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Pacific/Fiji\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1300\\r\\nTZOFFSETTO:+1200\\r\\nTZNAME:+12\\r\\nDTSTART:19700118T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=1;BYMONTHDAY=12,13,14,15,16,17,18;BYDAY=SU\\r\\nEND:STANDARD\\r\\nBEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+1200\\r\\nTZOFFSETTO:+1300\\r\\nTZNAME:+13\\r\\nDTSTART:20211114T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=2SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+1200\\r\\nTZOFFSETTO:+1300\\r\\nTZNAME:+13\\r\\nDTSTART:20181104T020000\\r\\nRDATE:20181104T020000\\r\\nRDATE:20191110T020000\\r\\nRDATE:20201220T020000\\r\\nEND:DAYLIGHT\",\"Pacific/Funafuti\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1200\\r\\nTZOFFSETTO:+1200\\r\\nTZNAME:+12\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Pacific/Galapagos\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:-06\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Pacific/Gambier\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0900\\r\\nTZOFFSETTO:-0900\\r\\nTZNAME:-09\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Pacific/Guadalcanal\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1100\\r\\nTZOFFSETTO:+1100\\r\\nTZNAME:+11\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Pacific/Guam\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1000\\r\\nTZOFFSETTO:+1000\\r\\nTZNAME:ChST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Pacific/Honolulu\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-1000\\r\\nTZOFFSETTO:-1000\\r\\nTZNAME:HST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Pacific/Kiritimati\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1400\\r\\nTZOFFSETTO:+1400\\r\\nTZNAME:+14\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Pacific/Kosrae\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1100\\r\\nTZOFFSETTO:+1100\\r\\nTZNAME:+11\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Pacific/Kwajalein\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1200\\r\\nTZOFFSETTO:+1200\\r\\nTZNAME:+12\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Pacific/Majuro\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1200\\r\\nTZOFFSETTO:+1200\\r\\nTZNAME:+12\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Pacific/Marquesas\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0930\\r\\nTZOFFSETTO:-0930\\r\\nTZNAME:-0930\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Pacific/Midway\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-1100\\r\\nTZOFFSETTO:-1100\\r\\nTZNAME:SST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Pacific/Nauru\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1200\\r\\nTZOFFSETTO:+1200\\r\\nTZNAME:+12\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Pacific/Niue\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-1100\\r\\nTZOFFSETTO:-1100\\r\\nTZNAME:-11\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Pacific/Norfolk\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+1100\\r\\nTZOFFSETTO:+1200\\r\\nTZNAME:+12\\r\\nDTSTART:20191006T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+1200\\r\\nTZOFFSETTO:+1100\\r\\nTZNAME:+11\\r\\nDTSTART:20200405T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\\r\\nEND:STANDARD\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+1130\\r\\nTZOFFSETTO:+1100\\r\\nTZNAME:+11\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+1100\\r\\nTZOFFSETTO:+1100\\r\\nTZNAME:+11\\r\\nDTSTART:20190701T000000\\r\\nRDATE:20190701T000000\\r\\nEND:STANDARD\",\"Pacific/Noumea\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1100\\r\\nTZOFFSETTO:+1100\\r\\nTZNAME:+11\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Pacific/Pago_Pago\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-1100\\r\\nTZOFFSETTO:-1100\\r\\nTZNAME:SST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Pacific/Palau\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0900\\r\\nTZOFFSETTO:+0900\\r\\nTZNAME:+09\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Pacific/Pitcairn\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0800\\r\\nTZOFFSETTO:-0800\\r\\nTZNAME:-08\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Pacific/Pohnpei\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1100\\r\\nTZOFFSETTO:+1100\\r\\nTZNAME:+11\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Pacific/Port_Moresby\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1000\\r\\nTZOFFSETTO:+1000\\r\\nTZNAME:+10\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Pacific/Rarotonga\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-1000\\r\\nTZOFFSETTO:-1000\\r\\nTZNAME:-10\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Pacific/Saipan\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1000\\r\\nTZOFFSETTO:+1000\\r\\nTZNAME:ChST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Pacific/Tahiti\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-1000\\r\\nTZOFFSETTO:-1000\\r\\nTZNAME:-10\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Pacific/Tarawa\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1200\\r\\nTZOFFSETTO:+1200\\r\\nTZNAME:+12\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Pacific/Tongatapu\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1300\\r\\nTZOFFSETTO:+1300\\r\\nTZNAME:+13\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Pacific/Wake\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1200\\r\\nTZOFFSETTO:+1200\\r\\nTZNAME:+12\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Pacific/Wallis\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1200\\r\\nTZOFFSETTO:+1200\\r\\nTZNAME:+12\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"AUS Central Standard Time\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0930\\r\\nTZOFFSETTO:+0930\\r\\nTZNAME:ACST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"AUS Eastern Standard Time\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1100\\r\\nTZOFFSETTO:+1000\\r\\nTZNAME:AEST\\r\\nDTSTART:19700405T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\\r\\nEND:STANDARD\\r\\nBEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+1000\\r\\nTZOFFSETTO:+1100\\r\\nTZNAME:AEDT\\r\\nDTSTART:19701004T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU\\r\\nEND:DAYLIGHT\",\"Afghanistan Standard Time\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0430\\r\\nTZOFFSETTO:+0430\\r\\nTZNAME:+0430\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Africa/Asmera\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EAT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Africa/Timbuktu\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:GMT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Alaskan Standard Time\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0900\\r\\nTZOFFSETTO:-0800\\r\\nTZNAME:AKDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:-0800\\r\\nTZOFFSETTO:-0900\\r\\nTZNAME:AKST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\",\"America/Argentina/ComodRivadavia\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"America/Buenos_Aires\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"America/Godthab\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0200\\r\\nTZNAME:-02\\r\\nDTSTART:19700328T220000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYMONTHDAY=24,25,26,27,28,29,30;BYDAY=SA\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:-0200\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19701024T230000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=24,25,26,27,28,29,30;BYDAY=SA\\r\\nEND:STANDARD\",\"America/Louisville\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:EDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:EST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\",\"America/Montreal\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:EDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:EST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\",\"America/Santa_Isabel\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0800\\r\\nTZOFFSETTO:-0700\\r\\nTZNAME:PDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:-0700\\r\\nTZOFFSETTO:-0800\\r\\nTZNAME:PST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\",\"Arab Standard Time\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:+03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Arabian Standard Time\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0400\\r\\nTZOFFSETTO:+0400\\r\\nTZNAME:+04\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Arabic Standard Time\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:+03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Argentina Standard Time\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Asia/Calcutta\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0530\\r\\nTZOFFSETTO:+0530\\r\\nTZNAME:IST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Asia/Katmandu\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0545\\r\\nTZOFFSETTO:+0545\\r\\nTZNAME:+0545\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Asia/Rangoon\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0630\\r\\nTZOFFSETTO:+0630\\r\\nTZNAME:+0630\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Asia/Saigon\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0700\\r\\nTZOFFSETTO:+0700\\r\\nTZNAME:+07\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Atlantic Standard Time\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:ADT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:AST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\",\"Atlantic/Faeroe\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:WEST\\r\\nDTSTART:19700329T010000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:WET\\r\\nDTSTART:19701025T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\",\"Atlantic/Jan_Mayen\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\",\"Azerbaijan Standard Time\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0400\\r\\nTZOFFSETTO:+0400\\r\\nTZNAME:+04\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Azores Standard Time\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0100\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:+00\\r\\nDTSTART:19700329T000000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:-0100\\r\\nTZNAME:-01\\r\\nDTSTART:19701025T010000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\",\"Bahia Standard Time\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Bangladesh Standard Time\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0600\\r\\nTZOFFSETTO:+0600\\r\\nTZNAME:+06\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Belarus Standard Time\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:+03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Canada Central Standard Time\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:CST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Cape Verde Standard Time\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0100\\r\\nTZOFFSETTO:-0100\\r\\nTZNAME:-01\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Caucasus Standard Time\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0400\\r\\nTZOFFSETTO:+0400\\r\\nTZNAME:+04\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Cen. Australia Standard Time\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1030\\r\\nTZOFFSETTO:+0930\\r\\nTZNAME:ACST\\r\\nDTSTART:19700405T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\\r\\nEND:STANDARD\\r\\nBEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0930\\r\\nTZOFFSETTO:+1030\\r\\nTZNAME:ACDT\\r\\nDTSTART:19701004T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU\\r\\nEND:DAYLIGHT\",\"Central America Standard Time\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:CST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Central Asia Standard Time\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0600\\r\\nTZOFFSETTO:+0600\\r\\nTZNAME:+06\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Central Brazilian Standard Time\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:20181104T000000\\r\\nRDATE:20181104T000000\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:-04\\r\\nDTSTART:20180218T000000\\r\\nRDATE:20180218T000000\\r\\nRDATE:20190217T000000\\r\\nEND:STANDARD\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:-04\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Central Europe Standard Time\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\",\"Central European Standard Time\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\",\"Central Pacific Standard Time\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1100\\r\\nTZOFFSETTO:+1100\\r\\nTZNAME:+11\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Central Standard Time\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:CDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:CST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\",\"Central Standard Time (Mexico)\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:CDT\\r\\nDTSTART:19700405T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:CST\\r\\nDTSTART:19701025T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\",\"China Standard Time\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0800\\r\\nTZOFFSETTO:+0800\\r\\nTZNAME:CST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"E. Africa Standard Time\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EAT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"E. Australia Standard Time\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1000\\r\\nTZOFFSETTO:+1000\\r\\nTZNAME:AEST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"E. South America Standard Time\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0200\\r\\nTZNAME:-02\\r\\nDTSTART:20181104T000000\\r\\nRDATE:20181104T000000\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:-0200\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:20180218T000000\\r\\nRDATE:20180218T000000\\r\\nRDATE:20190217T000000\\r\\nEND:STANDARD\\r\\nBEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0200\\r\\nTZOFFSETTO:-0200\\r\\nTZNAME:-02\\r\\nDTSTART:19700101T000000\\r\\nEND:DAYLIGHT\",\"Eastern Standard Time\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:EDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:EST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\",\"Egypt Standard Time\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:EET\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Ekaterinburg Standard Time\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0500\\r\\nTZOFFSETTO:+0500\\r\\nTZNAME:+05\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Europe/Belfast\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:BST\\r\\nDTSTART:19700329T010000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:GMT\\r\\nDTSTART:19701025T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\",\"FLE Standard Time\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EEST\\r\\nDTSTART:19700329T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:EET\\r\\nDTSTART:19701025T040000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\",\"Fiji Standard Time\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1300\\r\\nTZOFFSETTO:+1200\\r\\nTZNAME:+12\\r\\nDTSTART:19700118T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=1;BYMONTHDAY=12,13,14,15,16,17,18;BYDAY=SU\\r\\nEND:STANDARD\\r\\nBEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+1200\\r\\nTZOFFSETTO:+1300\\r\\nTZNAME:+13\\r\\nDTSTART:20211114T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=2SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+1200\\r\\nTZOFFSETTO:+1300\\r\\nTZNAME:+13\\r\\nDTSTART:20181104T020000\\r\\nRDATE:20181104T020000\\r\\nRDATE:20191110T020000\\r\\nRDATE:20201220T020000\\r\\nEND:DAYLIGHT\",\"GMT Standard Time\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:BST\\r\\nDTSTART:19700329T010000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:GMT\\r\\nDTSTART:19701025T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\",\"GTB Standard Time\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EEST\\r\\nDTSTART:19700329T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:EET\\r\\nDTSTART:19701025T040000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\",\"Georgian Standard Time\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0400\\r\\nTZOFFSETTO:+0400\\r\\nTZNAME:+04\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Greenwich Standard Time\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:GMT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Hawaiian Standard Time\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-1000\\r\\nTZOFFSETTO:-1000\\r\\nTZNAME:HST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Iran Standard Time\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0400\\r\\nTZOFFSETTO:+0330\\r\\nTZNAME:+0330\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\\r\\nBEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0330\\r\\nTZOFFSETTO:+0430\\r\\nTZNAME:+0430\\r\\nDTSTART:20180321T235959\\r\\nRDATE:20180321T235959\\r\\nRDATE:20190321T235959\\r\\nRDATE:20200320T235959\\r\\nRDATE:20210321T235959\\r\\nRDATE:20220321T235959\\r\\nRDATE:20230321T235959\\r\\nRDATE:20240320T235959\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+0430\\r\\nTZOFFSETTO:+0330\\r\\nTZNAME:+0330\\r\\nDTSTART:20180921T235959\\r\\nRDATE:20180921T235959\\r\\nRDATE:20190921T235959\\r\\nRDATE:20200920T235959\\r\\nRDATE:20210921T235959\\r\\nRDATE:20220921T235959\\r\\nRDATE:20230921T235959\\r\\nRDATE:20240920T235959\\r\\nEND:STANDARD\",\"Israel Standard Time\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:IDT\\r\\nDTSTART:19700327T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYMONTHDAY=23,24,25,26,27,28,29;BYDAY=FR\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:IST\\r\\nDTSTART:19701025T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\",\"Jordan Standard Time\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EEST\\r\\nDTSTART:19700326T235959\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1TH\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:EET\\r\\nDTSTART:19701030T010000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1FR\\r\\nEND:STANDARD\",\"Kaliningrad Standard Time\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:EET\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Korea Standard Time\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0900\\r\\nTZOFFSETTO:+0900\\r\\nTZNAME:KST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Libya Standard Time\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:EET\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Line Islands Standard Time\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1400\\r\\nTZOFFSETTO:+1400\\r\\nTZNAME:+14\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Magadan Standard Time\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1100\\r\\nTZOFFSETTO:+1100\\r\\nTZNAME:+11\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Mauritius Standard Time\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0400\\r\\nTZOFFSETTO:+0400\\r\\nTZNAME:+04\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Middle East Standard Time\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EEST\\r\\nDTSTART:19700329T000000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:EET\\r\\nDTSTART:19701025T000000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\",\"Montevideo Standard Time\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Morocco Standard Time\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:+00\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\\r\\nBEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:+01\\r\\nDTSTART:20180325T020000\\r\\nRDATE:20180325T020000\\r\\nRDATE:20180617T020000\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:+00\\r\\nDTSTART:20180513T030000\\r\\nRDATE:20180513T030000\\r\\nEND:STANDARD\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+0000\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:+01\\r\\nDTSTART:20190609T020000\\r\\nRDATE:20190609T020000\\r\\nRDATE:20200531T020000\\r\\nRDATE:20210516T020000\\r\\nRDATE:20220508T020000\\r\\nRDATE:20230430T020000\\r\\nRDATE:20240414T020000\\r\\nEND:STANDARD\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:+01\\r\\nDTSTART:20181028T030000\\r\\nRDATE:20181028T030000\\r\\nEND:STANDARD\\r\\nBEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0000\\r\\nTZNAME:+00\\r\\nDTSTART:20190505T030000\\r\\nRDATE:20190505T030000\\r\\nRDATE:20200419T030000\\r\\nRDATE:20210411T030000\\r\\nRDATE:20220327T030000\\r\\nRDATE:20230319T030000\\r\\nRDATE:20240310T030000\\r\\nEND:DAYLIGHT\",\"Mountain Standard Time\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0700\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:MDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0700\\r\\nTZNAME:MST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\",\"Mountain Standard Time (Mexico)\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0700\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:MDT\\r\\nDTSTART:19700405T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0700\\r\\nTZNAME:MST\\r\\nDTSTART:19701025T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\",\"N. Central Asia Standard Time\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0700\\r\\nTZOFFSETTO:+0700\\r\\nTZNAME:+07\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Namibia Standard Time\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CAT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"New Zealand Standard Time\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+1200\\r\\nTZOFFSETTO:+1300\\r\\nTZNAME:NZDT\\r\\nDTSTART:19700927T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+1300\\r\\nTZOFFSETTO:+1200\\r\\nTZNAME:NZST\\r\\nDTSTART:19700405T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\\r\\nEND:STANDARD\",\"Newfoundland Standard Time\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0230\\r\\nTZOFFSETTO:-0330\\r\\nTZNAME:NST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\\r\\nBEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0330\\r\\nTZOFFSETTO:-0230\\r\\nTZNAME:NDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\",\"North Asia East Standard Time\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0800\\r\\nTZOFFSETTO:+0800\\r\\nTZNAME:+08\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"North Asia Standard Time\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0700\\r\\nTZOFFSETTO:+0700\\r\\nTZNAME:+07\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Pacific SA Standard Time\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:-04\\r\\nDTSTART:20190407T000000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=4;BYMONTHDAY=2,3,4,5,6,7,8;BYDAY=SU\\r\\nEND:STANDARD\\r\\nBEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:20190908T000000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=9;BYMONTHDAY=2,3,4,5,6,7,8;BYDAY=SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:-04\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\\r\\nBEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:20180812T000000\\r\\nRDATE:20180812T000000\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:-04\\r\\nDTSTART:20180513T000000\\r\\nRDATE:20180513T000000\\r\\nEND:STANDARD\",\"Pacific Standard Time\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0800\\r\\nTZOFFSETTO:-0700\\r\\nTZNAME:PDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:-0700\\r\\nTZOFFSETTO:-0800\\r\\nTZNAME:PST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\",\"Pacific/Johnston\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-1000\\r\\nTZOFFSETTO:-1000\\r\\nTZNAME:HST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Pakistan Standard Time\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0500\\r\\nTZOFFSETTO:+0500\\r\\nTZNAME:PKT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Paraguay Standard Time\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19701004T000000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:-04\\r\\nDTSTART:19700322T000000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=4SU\\r\\nEND:STANDARD\",\"Romance Standard Time\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\",\"Russia Time Zone 10\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1100\\r\\nTZOFFSETTO:+1100\\r\\nTZNAME:+11\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Russia Time Zone 11\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1200\\r\\nTZOFFSETTO:+1200\\r\\nTZNAME:+12\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Russia Time Zone 3\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0400\\r\\nTZOFFSETTO:+0400\\r\\nTZNAME:+04\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Russian Standard Time\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:MSK\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"SA Eastern Standard Time\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0300\\r\\nTZOFFSETTO:-0300\\r\\nTZNAME:-03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"SA Pacific Standard Time\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:-05\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"SA Western Standard Time\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:-04\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"SE Asia Standard Time\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0700\\r\\nTZOFFSETTO:+0700\\r\\nTZNAME:+07\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Samoa Standard Time\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1400\\r\\nTZOFFSETTO:+1300\\r\\nTZNAME:+13\\r\\nDTSTART:19700405T040000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\\r\\nEND:STANDARD\\r\\nBEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+1300\\r\\nTZOFFSETTO:+1400\\r\\nTZNAME:+14\\r\\nDTSTART:19700927T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU\\r\\nEND:DAYLIGHT\",\"Singapore Standard Time\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0800\\r\\nTZOFFSETTO:+0800\\r\\nTZNAME:+08\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"South Africa Standard Time\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:SAST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Sri Lanka Standard Time\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0530\\r\\nTZOFFSETTO:+0530\\r\\nTZNAME:+0530\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Syria Standard Time\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:EET\\r\\nDTSTART:19701030T000000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1FR\\r\\nEND:STANDARD\\r\\nBEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:EEST\\r\\nDTSTART:19700327T000000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1FR\\r\\nEND:DAYLIGHT\",\"Taipei Standard Time\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0800\\r\\nTZOFFSETTO:+0800\\r\\nTZNAME:CST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Tasmania Standard Time\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+1000\\r\\nTZOFFSETTO:+1100\\r\\nTZNAME:AEDT\\r\\nDTSTART:19701004T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+1100\\r\\nTZOFFSETTO:+1000\\r\\nTZNAME:AEST\\r\\nDTSTART:19700405T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\\r\\nEND:STANDARD\",\"Tokyo Standard Time\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0900\\r\\nTZOFFSETTO:+0900\\r\\nTZNAME:JST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Tonga Standard Time\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1300\\r\\nTZOFFSETTO:+1300\\r\\nTZNAME:+13\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Turkey Standard Time\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0300\\r\\nTZOFFSETTO:+0300\\r\\nTZNAME:+03\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"US Eastern Standard Time\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:EDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:EST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\",\"US Mountain Standard Time\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0700\\r\\nTZOFFSETTO:-0700\\r\\nTZNAME:MST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"US/Central\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:CDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:CST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\",\"US/Eastern\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0500\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:EDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0500\\r\\nTZNAME:EST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\",\"US/Mountain\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0700\\r\\nTZOFFSETTO:-0600\\r\\nTZNAME:MDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:-0600\\r\\nTZOFFSETTO:-0700\\r\\nTZNAME:MST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\",\"US/Pacific\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0800\\r\\nTZOFFSETTO:-0700\\r\\nTZNAME:PDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:-0700\\r\\nTZOFFSETTO:-0800\\r\\nTZNAME:PST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\",\"US/Pacific-New\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:-0800\\r\\nTZOFFSETTO:-0700\\r\\nTZNAME:PDT\\r\\nDTSTART:19700308T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:-0700\\r\\nTZOFFSETTO:-0800\\r\\nTZNAME:PST\\r\\nDTSTART:19701101T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\\r\\nEND:STANDARD\",\"Ulaanbaatar Standard Time\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0800\\r\\nTZOFFSETTO:+0800\\r\\nTZNAME:+08\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Venezuela Standard Time\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:-0400\\r\\nTZOFFSETTO:-0400\\r\\nTZNAME:-04\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Vladivostok Standard Time\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1000\\r\\nTZOFFSETTO:+1000\\r\\nTZNAME:+10\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"W. Australia Standard Time\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0800\\r\\nTZOFFSETTO:+0800\\r\\nTZNAME:AWST\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"W. Central Africa Standard Time\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:WAT\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"W. Europe Standard Time\":\"BEGIN:DAYLIGHT\\r\\nTZOFFSETFROM:+0100\\r\\nTZOFFSETTO:+0200\\r\\nTZNAME:CEST\\r\\nDTSTART:19700329T020000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\\r\\nEND:DAYLIGHT\\r\\nBEGIN:STANDARD\\r\\nTZOFFSETFROM:+0200\\r\\nTZOFFSETTO:+0100\\r\\nTZNAME:CET\\r\\nDTSTART:19701025T030000\\r\\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\\r\\nEND:STANDARD\",\"West Asia Standard Time\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0500\\r\\nTZOFFSETTO:+0500\\r\\nTZNAME:+05\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"West Pacific Standard Time\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+1000\\r\\nTZOFFSETTO:+1000\\r\\nTZNAME:+10\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\",\"Yakutsk Standard Time\":\"BEGIN:STANDARD\\r\\nTZOFFSETFROM:+0900\\r\\nTZOFFSETTO:+0900\\r\\nTZNAME:+09\\r\\nDTSTART:19700101T000000\\r\\nEND:STANDARD\"}", "'use strict';\n\nconst ICAL = require('ical.js');\n\n// Copied from https://dxr.mozilla.org/comm-central/source/calendar/timezones/zones.json\n// And compiled using node compile-zones.js\n// See also https://github.com/mozilla-comm/ical.js/issues/195\nconst timezones = require('./zones-compiled.json');\n\nclass IcalExpander {\n  constructor(opts) {\n    this.maxIterations = opts.maxIterations != null ? opts.maxIterations : 1000;\n    this.skipInvalidDates = opts.skipInvalidDates != null ? opts.skipInvalidDates : false;\n\n    this.jCalData = ICAL.parse(opts.ics);\n    this.component = new ICAL.Component(this.jCalData);\n    this.events = this.component.getAllSubcomponents('vevent').map(vevent => new ICAL.Event(vevent));\n\n    if (this.skipInvalidDates) {\n      this.events = this.events.filter((evt) => {\n        try {\n          evt.startDate.toJSDate();\n          evt.endDate.toJSDate();\n          return true;\n        } catch (err) {\n          // skipping events with invalid time\n          return false;\n        }\n      });\n    }\n  }\n\n  between(after, before) {\n    function isEventWithinRange(startTime, endTime) {\n      return (!after || endTime >= after.getTime()) &&\n      (!before || startTime <= before.getTime());\n    }\n\n    function getTimes(eventOrOccurrence) {\n      const startTime = eventOrOccurrence.startDate.toJSDate().getTime();\n      let endTime = eventOrOccurrence.endDate.toJSDate().getTime();\n\n      // If it is an all day event, the end date is set to 00:00 of the next day\n      // So we need to make it be 23:59:59 to compare correctly with the given range\n      if (eventOrOccurrence.endDate.isDate && (endTime > startTime)) {\n        endTime -= 1;\n      }\n\n      return { startTime, endTime };\n    }\n\n    const exceptions = [];\n\n    this.events.forEach((event) => {\n      if (event.isRecurrenceException()) exceptions.push(event);\n    });\n\n    const ret = {\n      events: [],\n      occurrences: [],\n    };\n\n    this.events.filter(e => !e.isRecurrenceException()).forEach((event) => {\n      const exdates = [];\n\n      event.component.getAllProperties('exdate').forEach((exdateProp) => {\n        const exdate = exdateProp.getFirstValue();\n        exdates.push(exdate.toJSDate().getTime());\n      });\n\n      // Recurring event is handled differently\n      if (event.isRecurring()) {\n        const iterator = event.iterator();\n\n        let next;\n        let i = 0;\n\n        do {\n          i += 1;\n          next = iterator.next();\n          if (next) {\n            const occurrence = event.getOccurrenceDetails(next);\n\n            const { startTime, endTime } = getTimes(occurrence);\n\n            const isOccurrenceExcluded = exdates.indexOf(startTime) !== -1;\n\n            // TODO check that within same day?\n            const exception = exceptions.find(ex => ex.uid === event.uid && ex.recurrenceId.toJSDate().getTime() === occurrence.startDate.toJSDate().getTime());\n\n            // We have passed the max date, stop\n            if (before && startTime > before.getTime()) break;\n\n            // Check that we are within our range\n            if (isEventWithinRange(startTime, endTime)) {\n              if (exception) {\n                ret.events.push(exception);\n              } else if (!isOccurrenceExcluded) {\n                ret.occurrences.push(occurrence);\n              }\n            }\n          }\n        }\n        while (next && (!this.maxIterations || i < this.maxIterations));\n\n        return;\n      }\n\n      // Non-recurring event:\n      const { startTime, endTime } = getTimes(event);\n\n      if (isEventWithinRange(startTime, endTime)) ret.events.push(event);\n    });\n\n    return ret;\n  }\n\n  before(before) {\n    return this.between(undefined, before);\n  }\n\n  after(after) {\n    return this.between(after);\n  }\n\n  all() {\n    return this.between();\n  }\n}\n\nfunction registerTimezones() {\n  Object.keys(timezones).forEach((key) => {\n    const icsData = timezones[key];\n    const icsTimezone = `BEGIN:VTIMEZONE\\r\\nTZID:${key}\\r\\n${icsData}\\r\\nEND:VTIMEZONE`;\n    const parsed = ICAL.parse(`BEGIN:VCALENDAR\\nPRODID:-//tzurl.org//NONSGML Olson 2012h//EN\\nVERSION:2.0\\n${icsTimezone}\\nEND:VCALENDAR`);\n    const comp = new ICAL.Component(parsed);\n    const vtimezone = comp.getFirstSubcomponent('vtimezone');\n\n    ICAL.TimezoneService.register(key, new ICAL.Timezone(vtimezone));\n  });\n}\n\nregisterTimezones();\n\nmodule.exports = IcalExpander;\n", "/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n  \"use strict\";\n\n  var Op = Object.prototype;\n  var hasOwn = Op.hasOwnProperty;\n  var undefined; // More compressible than void 0.\n  var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n  var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n  var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n  var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n  function define(obj, key, value) {\n    Object.defineProperty(obj, key, {\n      value: value,\n      enumerable: true,\n      configurable: true,\n      writable: true\n    });\n    return obj[key];\n  }\n  try {\n    // IE 8 has a broken Object.defineProperty that only works on DOM objects.\n    define({}, \"\");\n  } catch (err) {\n    define = function(obj, key, value) {\n      return obj[key] = value;\n    };\n  }\n\n  function wrap(innerFn, outerFn, self, tryLocsList) {\n    // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n    var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n    var generator = Object.create(protoGenerator.prototype);\n    var context = new Context(tryLocsList || []);\n\n    // The ._invoke method unifies the implementations of the .next,\n    // .throw, and .return methods.\n    generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n    return generator;\n  }\n  exports.wrap = wrap;\n\n  // Try/catch helper to minimize deoptimizations. Returns a completion\n  // record like context.tryEntries[i].completion. This interface could\n  // have been (and was previously) designed to take a closure to be\n  // invoked without arguments, but in all the cases we care about we\n  // already have an existing method we want to call, so there's no need\n  // to create a new function object. We can even get away with assuming\n  // the method takes exactly one argument, since that happens to be true\n  // in every case, so we don't have to touch the arguments object. The\n  // only additional allocation required is the completion record, which\n  // has a stable shape and so hopefully should be cheap to allocate.\n  function tryCatch(fn, obj, arg) {\n    try {\n      return { type: \"normal\", arg: fn.call(obj, arg) };\n    } catch (err) {\n      return { type: \"throw\", arg: err };\n    }\n  }\n\n  var GenStateSuspendedStart = \"suspendedStart\";\n  var GenStateSuspendedYield = \"suspendedYield\";\n  var GenStateExecuting = \"executing\";\n  var GenStateCompleted = \"completed\";\n\n  // Returning this object from the innerFn has the same effect as\n  // breaking out of the dispatch switch statement.\n  var ContinueSentinel = {};\n\n  // Dummy constructor functions that we use as the .constructor and\n  // .constructor.prototype properties for functions that return Generator\n  // objects. For full spec compliance, you may wish to configure your\n  // minifier not to mangle the names of these two functions.\n  function Generator() {}\n  function GeneratorFunction() {}\n  function GeneratorFunctionPrototype() {}\n\n  // This is a polyfill for %IteratorPrototype% for environments that\n  // don't natively support it.\n  var IteratorPrototype = {};\n  IteratorPrototype[iteratorSymbol] = function () {\n    return this;\n  };\n\n  var getProto = Object.getPrototypeOf;\n  var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n  if (NativeIteratorPrototype &&\n      NativeIteratorPrototype !== Op &&\n      hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n    // This environment has a native %IteratorPrototype%; use it instead\n    // of the polyfill.\n    IteratorPrototype = NativeIteratorPrototype;\n  }\n\n  var Gp = GeneratorFunctionPrototype.prototype =\n    Generator.prototype = Object.create(IteratorPrototype);\n  GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n  GeneratorFunctionPrototype.constructor = GeneratorFunction;\n  GeneratorFunction.displayName = define(\n    GeneratorFunctionPrototype,\n    toStringTagSymbol,\n    \"GeneratorFunction\"\n  );\n\n  // Helper for defining the .next, .throw, and .return methods of the\n  // Iterator interface in terms of a single ._invoke method.\n  function defineIteratorMethods(prototype) {\n    [\"next\", \"throw\", \"return\"].forEach(function(method) {\n      define(prototype, method, function(arg) {\n        return this._invoke(method, arg);\n      });\n    });\n  }\n\n  exports.isGeneratorFunction = function(genFun) {\n    var ctor = typeof genFun === \"function\" && genFun.constructor;\n    return ctor\n      ? ctor === GeneratorFunction ||\n        // For the native GeneratorFunction constructor, the best we can\n        // do is to check its .name property.\n        (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n      : false;\n  };\n\n  exports.mark = function(genFun) {\n    if (Object.setPrototypeOf) {\n      Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n    } else {\n      genFun.__proto__ = GeneratorFunctionPrototype;\n      define(genFun, toStringTagSymbol, \"GeneratorFunction\");\n    }\n    genFun.prototype = Object.create(Gp);\n    return genFun;\n  };\n\n  // Within the body of any async function, `await x` is transformed to\n  // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n  // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n  // meant to be awaited.\n  exports.awrap = function(arg) {\n    return { __await: arg };\n  };\n\n  function AsyncIterator(generator, PromiseImpl) {\n    function invoke(method, arg, resolve, reject) {\n      var record = tryCatch(generator[method], generator, arg);\n      if (record.type === \"throw\") {\n        reject(record.arg);\n      } else {\n        var result = record.arg;\n        var value = result.value;\n        if (value &&\n            typeof value === \"object\" &&\n            hasOwn.call(value, \"__await\")) {\n          return PromiseImpl.resolve(value.__await).then(function(value) {\n            invoke(\"next\", value, resolve, reject);\n          }, function(err) {\n            invoke(\"throw\", err, resolve, reject);\n          });\n        }\n\n        return PromiseImpl.resolve(value).then(function(unwrapped) {\n          // When a yielded Promise is resolved, its final value becomes\n          // the .value of the Promise<{value,done}> result for the\n          // current iteration.\n          result.value = unwrapped;\n          resolve(result);\n        }, function(error) {\n          // If a rejected Promise was yielded, throw the rejection back\n          // into the async generator function so it can be handled there.\n          return invoke(\"throw\", error, resolve, reject);\n        });\n      }\n    }\n\n    var previousPromise;\n\n    function enqueue(method, arg) {\n      function callInvokeWithMethodAndArg() {\n        return new PromiseImpl(function(resolve, reject) {\n          invoke(method, arg, resolve, reject);\n        });\n      }\n\n      return previousPromise =\n        // If enqueue has been called before, then we want to wait until\n        // all previous Promises have been resolved before calling invoke,\n        // so that results are always delivered in the correct order. If\n        // enqueue has not been called before, then it is important to\n        // call invoke immediately, without waiting on a callback to fire,\n        // so that the async generator function has the opportunity to do\n        // any necessary setup in a predictable way. This predictability\n        // is why the Promise constructor synchronously invokes its\n        // executor callback, and why async functions synchronously\n        // execute code before the first await. Since we implement simple\n        // async functions in terms of async generators, it is especially\n        // important to get this right, even though it requires care.\n        previousPromise ? previousPromise.then(\n          callInvokeWithMethodAndArg,\n          // Avoid propagating failures to Promises returned by later\n          // invocations of the iterator.\n          callInvokeWithMethodAndArg\n        ) : callInvokeWithMethodAndArg();\n    }\n\n    // Define the unified helper method that is used to implement .next,\n    // .throw, and .return (see defineIteratorMethods).\n    this._invoke = enqueue;\n  }\n\n  defineIteratorMethods(AsyncIterator.prototype);\n  AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n    return this;\n  };\n  exports.AsyncIterator = AsyncIterator;\n\n  // Note that simple async functions are implemented on top of\n  // AsyncIterator objects; they just return a Promise for the value of\n  // the final result produced by the iterator.\n  exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n    if (PromiseImpl === void 0) PromiseImpl = Promise;\n\n    var iter = new AsyncIterator(\n      wrap(innerFn, outerFn, self, tryLocsList),\n      PromiseImpl\n    );\n\n    return exports.isGeneratorFunction(outerFn)\n      ? iter // If outerFn is a generator, return the full iterator.\n      : iter.next().then(function(result) {\n          return result.done ? result.value : iter.next();\n        });\n  };\n\n  function makeInvokeMethod(innerFn, self, context) {\n    var state = GenStateSuspendedStart;\n\n    return function invoke(method, arg) {\n      if (state === GenStateExecuting) {\n        throw new Error(\"Generator is already running\");\n      }\n\n      if (state === GenStateCompleted) {\n        if (method === \"throw\") {\n          throw arg;\n        }\n\n        // Be forgiving, per 25.3.3.3.3 of the spec:\n        // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n        return doneResult();\n      }\n\n      context.method = method;\n      context.arg = arg;\n\n      while (true) {\n        var delegate = context.delegate;\n        if (delegate) {\n          var delegateResult = maybeInvokeDelegate(delegate, context);\n          if (delegateResult) {\n            if (delegateResult === ContinueSentinel) continue;\n            return delegateResult;\n          }\n        }\n\n        if (context.method === \"next\") {\n          // Setting context._sent for legacy support of Babel's\n          // function.sent implementation.\n          context.sent = context._sent = context.arg;\n\n        } else if (context.method === \"throw\") {\n          if (state === GenStateSuspendedStart) {\n            state = GenStateCompleted;\n            throw context.arg;\n          }\n\n          context.dispatchException(context.arg);\n\n        } else if (context.method === \"return\") {\n          context.abrupt(\"return\", context.arg);\n        }\n\n        state = GenStateExecuting;\n\n        var record = tryCatch(innerFn, self, context);\n        if (record.type === \"normal\") {\n          // If an exception is thrown from innerFn, we leave state ===\n          // GenStateExecuting and loop back for another invocation.\n          state = context.done\n            ? GenStateCompleted\n            : GenStateSuspendedYield;\n\n          if (record.arg === ContinueSentinel) {\n            continue;\n          }\n\n          return {\n            value: record.arg,\n            done: context.done\n          };\n\n        } else if (record.type === \"throw\") {\n          state = GenStateCompleted;\n          // Dispatch the exception by looping back around to the\n          // context.dispatchException(context.arg) call above.\n          context.method = \"throw\";\n          context.arg = record.arg;\n        }\n      }\n    };\n  }\n\n  // Call delegate.iterator[context.method](context.arg) and handle the\n  // result, either by returning a { value, done } result from the\n  // delegate iterator, or by modifying context.method and context.arg,\n  // setting context.delegate to null, and returning the ContinueSentinel.\n  function maybeInvokeDelegate(delegate, context) {\n    var method = delegate.iterator[context.method];\n    if (method === undefined) {\n      // A .throw or .return when the delegate iterator has no .throw\n      // method always terminates the yield* loop.\n      context.delegate = null;\n\n      if (context.method === \"throw\") {\n        // Note: [\"return\"] must be used for ES3 parsing compatibility.\n        if (delegate.iterator[\"return\"]) {\n          // If the delegate iterator has a return method, give it a\n          // chance to clean up.\n          context.method = \"return\";\n          context.arg = undefined;\n          maybeInvokeDelegate(delegate, context);\n\n          if (context.method === \"throw\") {\n            // If maybeInvokeDelegate(context) changed context.method from\n            // \"return\" to \"throw\", let that override the TypeError below.\n            return ContinueSentinel;\n          }\n        }\n\n        context.method = \"throw\";\n        context.arg = new TypeError(\n          \"The iterator does not provide a 'throw' method\");\n      }\n\n      return ContinueSentinel;\n    }\n\n    var record = tryCatch(method, delegate.iterator, context.arg);\n\n    if (record.type === \"throw\") {\n      context.method = \"throw\";\n      context.arg = record.arg;\n      context.delegate = null;\n      return ContinueSentinel;\n    }\n\n    var info = record.arg;\n\n    if (! info) {\n      context.method = \"throw\";\n      context.arg = new TypeError(\"iterator result is not an object\");\n      context.delegate = null;\n      return ContinueSentinel;\n    }\n\n    if (info.done) {\n      // Assign the result of the finished delegate to the temporary\n      // variable specified by delegate.resultName (see delegateYield).\n      context[delegate.resultName] = info.value;\n\n      // Resume execution at the desired location (see delegateYield).\n      context.next = delegate.nextLoc;\n\n      // If context.method was \"throw\" but the delegate handled the\n      // exception, let the outer generator proceed normally. If\n      // context.method was \"next\", forget context.arg since it has been\n      // \"consumed\" by the delegate iterator. If context.method was\n      // \"return\", allow the original .return call to continue in the\n      // outer generator.\n      if (context.method !== \"return\") {\n        context.method = \"next\";\n        context.arg = undefined;\n      }\n\n    } else {\n      // Re-yield the result returned by the delegate method.\n      return info;\n    }\n\n    // The delegate iterator is finished, so forget it and continue with\n    // the outer generator.\n    context.delegate = null;\n    return ContinueSentinel;\n  }\n\n  // Define Generator.prototype.{next,throw,return} in terms of the\n  // unified ._invoke helper method.\n  defineIteratorMethods(Gp);\n\n  define(Gp, toStringTagSymbol, \"Generator\");\n\n  // A Generator should always return itself as the iterator object when the\n  // @@iterator function is called on it. Some browsers' implementations of the\n  // iterator prototype chain incorrectly implement this, causing the Generator\n  // object to not be returned from this call. This ensures that doesn't happen.\n  // See https://github.com/facebook/regenerator/issues/274 for more details.\n  Gp[iteratorSymbol] = function() {\n    return this;\n  };\n\n  Gp.toString = function() {\n    return \"[object Generator]\";\n  };\n\n  function pushTryEntry(locs) {\n    var entry = { tryLoc: locs[0] };\n\n    if (1 in locs) {\n      entry.catchLoc = locs[1];\n    }\n\n    if (2 in locs) {\n      entry.finallyLoc = locs[2];\n      entry.afterLoc = locs[3];\n    }\n\n    this.tryEntries.push(entry);\n  }\n\n  function resetTryEntry(entry) {\n    var record = entry.completion || {};\n    record.type = \"normal\";\n    delete record.arg;\n    entry.completion = record;\n  }\n\n  function Context(tryLocsList) {\n    // The root entry object (effectively a try statement without a catch\n    // or a finally block) gives us a place to store values thrown from\n    // locations where there is no enclosing try statement.\n    this.tryEntries = [{ tryLoc: \"root\" }];\n    tryLocsList.forEach(pushTryEntry, this);\n    this.reset(true);\n  }\n\n  exports.keys = function(object) {\n    var keys = [];\n    for (var key in object) {\n      keys.push(key);\n    }\n    keys.reverse();\n\n    // Rather than returning an object with a next method, we keep\n    // things simple and return the next function itself.\n    return function next() {\n      while (keys.length) {\n        var key = keys.pop();\n        if (key in object) {\n          next.value = key;\n          next.done = false;\n          return next;\n        }\n      }\n\n      // To avoid creating an additional object, we just hang the .value\n      // and .done properties off the next function object itself. This\n      // also ensures that the minifier will not anonymize the function.\n      next.done = true;\n      return next;\n    };\n  };\n\n  function values(iterable) {\n    if (iterable) {\n      var iteratorMethod = iterable[iteratorSymbol];\n      if (iteratorMethod) {\n        return iteratorMethod.call(iterable);\n      }\n\n      if (typeof iterable.next === \"function\") {\n        return iterable;\n      }\n\n      if (!isNaN(iterable.length)) {\n        var i = -1, next = function next() {\n          while (++i < iterable.length) {\n            if (hasOwn.call(iterable, i)) {\n              next.value = iterable[i];\n              next.done = false;\n              return next;\n            }\n          }\n\n          next.value = undefined;\n          next.done = true;\n\n          return next;\n        };\n\n        return next.next = next;\n      }\n    }\n\n    // Return an iterator with no values.\n    return { next: doneResult };\n  }\n  exports.values = values;\n\n  function doneResult() {\n    return { value: undefined, done: true };\n  }\n\n  Context.prototype = {\n    constructor: Context,\n\n    reset: function(skipTempReset) {\n      this.prev = 0;\n      this.next = 0;\n      // Resetting context._sent for legacy support of Babel's\n      // function.sent implementation.\n      this.sent = this._sent = undefined;\n      this.done = false;\n      this.delegate = null;\n\n      this.method = \"next\";\n      this.arg = undefined;\n\n      this.tryEntries.forEach(resetTryEntry);\n\n      if (!skipTempReset) {\n        for (var name in this) {\n          // Not sure about the optimal order of these conditions:\n          if (name.charAt(0) === \"t\" &&\n              hasOwn.call(this, name) &&\n              !isNaN(+name.slice(1))) {\n            this[name] = undefined;\n          }\n        }\n      }\n    },\n\n    stop: function() {\n      this.done = true;\n\n      var rootEntry = this.tryEntries[0];\n      var rootRecord = rootEntry.completion;\n      if (rootRecord.type === \"throw\") {\n        throw rootRecord.arg;\n      }\n\n      return this.rval;\n    },\n\n    dispatchException: function(exception) {\n      if (this.done) {\n        throw exception;\n      }\n\n      var context = this;\n      function handle(loc, caught) {\n        record.type = \"throw\";\n        record.arg = exception;\n        context.next = loc;\n\n        if (caught) {\n          // If the dispatched exception was caught by a catch block,\n          // then let that catch block handle the exception normally.\n          context.method = \"next\";\n          context.arg = undefined;\n        }\n\n        return !! caught;\n      }\n\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n        var entry = this.tryEntries[i];\n        var record = entry.completion;\n\n        if (entry.tryLoc === \"root\") {\n          // Exception thrown outside of any try block that could handle\n          // it, so set the completion value of the entire function to\n          // throw the exception.\n          return handle(\"end\");\n        }\n\n        if (entry.tryLoc <= this.prev) {\n          var hasCatch = hasOwn.call(entry, \"catchLoc\");\n          var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n          if (hasCatch && hasFinally) {\n            if (this.prev < entry.catchLoc) {\n              return handle(entry.catchLoc, true);\n            } else if (this.prev < entry.finallyLoc) {\n              return handle(entry.finallyLoc);\n            }\n\n          } else if (hasCatch) {\n            if (this.prev < entry.catchLoc) {\n              return handle(entry.catchLoc, true);\n            }\n\n          } else if (hasFinally) {\n            if (this.prev < entry.finallyLoc) {\n              return handle(entry.finallyLoc);\n            }\n\n          } else {\n            throw new Error(\"try statement without catch or finally\");\n          }\n        }\n      }\n    },\n\n    abrupt: function(type, arg) {\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n        var entry = this.tryEntries[i];\n        if (entry.tryLoc <= this.prev &&\n            hasOwn.call(entry, \"finallyLoc\") &&\n            this.prev < entry.finallyLoc) {\n          var finallyEntry = entry;\n          break;\n        }\n      }\n\n      if (finallyEntry &&\n          (type === \"break\" ||\n           type === \"continue\") &&\n          finallyEntry.tryLoc <= arg &&\n          arg <= finallyEntry.finallyLoc) {\n        // Ignore the finally entry if control is not jumping to a\n        // location outside the try/catch block.\n        finallyEntry = null;\n      }\n\n      var record = finallyEntry ? finallyEntry.completion : {};\n      record.type = type;\n      record.arg = arg;\n\n      if (finallyEntry) {\n        this.method = \"next\";\n        this.next = finallyEntry.finallyLoc;\n        return ContinueSentinel;\n      }\n\n      return this.complete(record);\n    },\n\n    complete: function(record, afterLoc) {\n      if (record.type === \"throw\") {\n        throw record.arg;\n      }\n\n      if (record.type === \"break\" ||\n          record.type === \"continue\") {\n        this.next = record.arg;\n      } else if (record.type === \"return\") {\n        this.rval = this.arg = record.arg;\n        this.method = \"return\";\n        this.next = \"end\";\n      } else if (record.type === \"normal\" && afterLoc) {\n        this.next = afterLoc;\n      }\n\n      return ContinueSentinel;\n    },\n\n    finish: function(finallyLoc) {\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n        var entry = this.tryEntries[i];\n        if (entry.finallyLoc === finallyLoc) {\n          this.complete(entry.completion, entry.afterLoc);\n          resetTryEntry(entry);\n          return ContinueSentinel;\n        }\n      }\n    },\n\n    \"catch\": function(tryLoc) {\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n        var entry = this.tryEntries[i];\n        if (entry.tryLoc === tryLoc) {\n          var record = entry.completion;\n          if (record.type === \"throw\") {\n            var thrown = record.arg;\n            resetTryEntry(entry);\n          }\n          return thrown;\n        }\n      }\n\n      // The context.catch method must only be called with a location\n      // argument that corresponds to a known catch block.\n      throw new Error(\"illegal catch attempt\");\n    },\n\n    delegateYield: function(iterable, resultName, nextLoc) {\n      this.delegate = {\n        iterator: values(iterable),\n        resultName: resultName,\n        nextLoc: nextLoc\n      };\n\n      if (this.method === \"next\") {\n        // Deliberately forget the last sent value so that we don't\n        // accidentally pass it on to the delegate.\n        this.arg = undefined;\n      }\n\n      return ContinueSentinel;\n    }\n  };\n\n  // Regardless of whether this script is executing as a CommonJS module\n  // or not, return the runtime object so that we can declare the variable\n  // regeneratorRuntime in the outer scope, which allows this module to be\n  // injected easily by `bin/regenerator --include-runtime script.js`.\n  return exports;\n\n}(\n  // If this script is executing as a CommonJS module, use module.exports\n  // as the regeneratorRuntime namespace. Otherwise create a new empty\n  // object. Either way, the resulting object will be used to initialize\n  // the regeneratorRuntime variable at the top of this file.\n  typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n  regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n  // This module should not be running in strict mode, so the above\n  // assignment should always work unless something is misconfigured. Just\n  // in case runtime.js accidentally runs in strict mode, we can escape\n  // strict mode using a global Function call. This could conceivably fail\n  // if a Content Security Policy forbids using Function, but in that case\n  // the proper solution is to fix the accidental strict mode problem. If\n  // you've misconfigured your bundler to force strict mode and applied a\n  // CSP to forbid Function, and you're not willing to fix either of those\n  // problems, please detail your unique predicament in a GitHub issue.\n  Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n}\n", "import { XmlElement, XmlText } from '@rgrove/parse-xml';\n\nfunction isXmlElement(node: XmlElement | XmlText): node is XmlElement {\n  return !!(node as XmlElement).children;\n}\n\n/**\n * MMLTag - Xml tag converted to this MMLTag\n */\nexport class MMLTag {\n  name: string;\n  node: XmlElement | XmlText;\n  attributes: Record<string, string>;\n  children?: MMLTag[];\n  key?: string;\n\n  constructor(name: string, node: XmlElement | XmlText, children?: MMLTag[]) {\n    this.name = name;\n    this.node = node;\n    this.attributes = (this.node as XmlElement).attributes || {};\n    this.children = children;\n  }\n\n  getText() {\n    if (this.node.type === 'text') return this.node.text;\n    else if (isXmlElement(this.node) && this.node.children.length) return (this.node.children[0] as XmlText).text;\n    return '';\n  }\n\n  initialState() {\n    const { name, value } = this.attributes;\n    if (name) return { [name]: value };\n    return {};\n  }\n}\n", "import React, { PropsWithChildren } from 'react';\n\nexport type CardProps = {\n  /** Additional card class name */\n  className?: string;\n};\n\nexport const Card = ({ className = '', children }: PropsWithChildren<CardProps>) => {\n  return <div className={`mml-card ${className}`}>{children}</div>;\n};\n", "import React, { FC } from 'react';\n\nexport type IconProps = {\n  /** The name of the material icon, see https://material.io/resources/icons/ */\n  name: string;\n};\n\nexport const Icon: FC<IconProps> = ({ name }) => {\n  return <i className=\"mml-icon material-icons\">{name}</i>;\n};\n", "import React, { FC } from 'react';\n\nimport { Icon } from './Icon';\n\nexport type CardHeaderProps = {\n  /** Header text */\n  text: string;\n  /** The name of the material icon, see https://material.io/resources/icons/ */\n  icon?: string;\n  /** Additional card class name */\n  className?: string;\n};\n\nexport const CardHeader: FC<CardHeaderProps> = ({ text, icon = '', className = '' }) => {\n  return (\n    <div className={`mml-card-header ${className}`}>\n      {icon && <Icon name={icon} />}\n      <span className=\"mml-card-header__text\">{text}</span>\n    </div>\n  );\n};\n", "import React, { PropsWithChildren } from 'react';\n\nexport type CardBodyProps = {\n  /** Additional card class name */\n  className?: string;\n};\n\nexport const CardBody = ({ className = '', children }: PropsWithChildren<CardBodyProps>) => {\n  return <div className={`mml-card-body ${className}`}>{children}</div>;\n};\n", "import React, { FC, ReactElement } from 'react';\nimport { ButtonProps } from './Button';\n\nexport type ButtonListProps = {\n  /** A list of buttons */\n  children?: ReactElement<ButtonProps>[] | ReactElement<ButtonProps>;\n  /** Button style variant */\n  variant?: 'floating';\n};\n\n/**\n * A list of buttons\n */\nexport const ButtonList: FC<ButtonListProps> = ({ children, variant = '' }) => {\n  return (\n    <div className={`mml-btnlist ${variant === 'floating' ? ' mml-btnlist--floating' : 'mml-btnlist--grounded'}`}>\n      {children}\n    </div>\n  );\n};\n", "import React, { FC, ReactElement, SyntheticEvent } from 'react';\nimport dayjs from 'dayjs';\n\nimport { Card } from './Card';\nimport { CardHeader } from './CardHeader';\nimport { CardBody } from './CardBody';\nimport { ButtonList } from './ButtonList';\n\ntype SvgIconProps = {\n  /** The SVG path, calibrated for a 24 sized viewBox (as in Material Icons) */\n  path: string;\n};\n\n/**\n * Utility to have custom svg icons outside the `material-icons` system provided by the Icon component\n * Use case internal to this library is the AddToCalendar component which needs brand icons which are not\n * included in [the default material-icons set and probably never will be](https://git.io/Jk9yH)\n */\nconst SvgIcon: FC<SvgIconProps> = ({ path }) => (\n  <i className=\"mml-icon\">\n    <svg className=\"mml-icon__svg\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n      <path d={path} />\n    </svg>\n  </i>\n);\n\n/** Icon path from https://materialdesignicons.com/ */\nconst IconGoogle = (\n  <SvgIcon path=\"M21.35 11.1h-9.17v2.73h6.5c-.33 3.8-3.5 5.44-6.5 5.44C8.36 19.27 5 16.25 5 12c0-4.1 3.2-7.27 7.2-7.27 3.1 0 4.9 1.97 4.9 1.97L19 4.72S16.56 2 12.1 2C6.42 2 2.03 6.8 2.03 12c0 5.05 4.13 10 10.22 10 5.35 0 9.25-3.67 9.25-9.1 0-1.15-.15-1.8-.15-1.8h0z\" />\n);\n\n/** Icon path from https://materialdesignicons.com/ */\nconst IconMicrosoft = (\n  <SvgIcon path=\"M3 12V6.75l6-1.32v6.48L3 12m17-9v8.75l-10 .15V5.2L20 3M3 13l6 .1v6.8l-6-1.15V13m17 .25V22l-10-1.9v-7l10 .15z\" />\n);\n\n/** Icon path from https://materialdesignicons.com/ */\nconst IconApple = (\n  <SvgIcon path=\"M18.7 19.5c-.83 1.24-1.7 2.45-3.05 2.47-1.34.03-1.77-.8-3.3-.8-1.53 0-2 .77-3.27.82-1.3.05-2.3-1.32-3.14-2.53C4.25 17 2.94 12.45 4.7 9.4c.87-1.52 2.43-2.48 4.12-2.5 1.28-.02 2.5.87 3.3.87.78 0 2.26-1.07 3.8-.9.65.03 2.47.26 3.64 1.98-.1.06-2.17 1.28-2.15 3.8.03 3.02 2.65 4.03 2.68 4.04-.03.07-.42 1.44-1.38 2.83M13 3.5c.73-.83 1.94-1.46 2.94-1.5.13 1.17-.34 2.35-1.04 3.2-.7.85-1.83 1.5-2.95 1.42-.15-1.15.4-2.35 1.05-3.1z\" />\n);\n\nfunction isMobile() {\n  const ua = typeof navigator !== 'undefined' ? navigator.userAgent : '';\n  if (!ua) return false;\n  const mobileRE = /(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series[46]0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i;\n  if (mobileRE.test(ua)) return true;\n  if (\n    typeof navigator !== 'undefined' &&\n    navigator.maxTouchPoints > 1 &&\n    ua.indexOf('Macintosh') !== -1 &&\n    ua.indexOf('Safari') !== -1\n  )\n    return true;\n  return false;\n}\n\n// @ts-ignore (expect-error breaks in GH actions) TODO: replace deprecated method\nconst isIE = (typeof window !== 'undefined' && window.navigator.msSaveOrOpenBlob && window.Blob) as boolean;\n\nconst getCurrentURL = () => {\n  if (typeof window !== 'undefined') return window.location.href;\n  return '';\n};\n\nexport type AddToCalendarEvent = {\n  /**\n   * The title for the calendar entry, if a string it must be parseable as `Date`\n   */\n  start: string | Date;\n  /**\n   * The start time for the calendar entry, if a string it must be parseable as `Date`\n   */\n  end: string | Date;\n  /**\n   * The end time for the calendar entry\n   */\n  title: string;\n  /**\n   * The optional location for the calendar entry\n   */\n  location?: string;\n  /**\n   * The optional description for the calendar entry\n   */\n  description?: string;\n};\n\nexport type AddToCalendarProps = AddToCalendarEvent & {\n  /**\n   * Additional element class name\n   * @default ''\n   */\n  className?: string;\n};\n\n// we infer this from the the const CALENDAR_SERVICES, we might keep this\n// here if we want to make the calendar services configurable\n// type AddToCalendarService = {\n//   id: string;\n//   label: string;\n//   Icon?: FC;\n// };\ntype CalendarID = 'google' | 'apple' | 'outlook' | 'outlookcom';\n\nconst CALENDAR_SERVICES: Array<{ id: CalendarID; label: string; Icon: ReactElement }> = [\n  { id: 'google', label: 'Google', Icon: IconGoogle },\n  { id: 'apple', label: 'Apple Calendar', Icon: IconApple },\n  { id: 'outlook', label: 'Outlook', Icon: IconMicrosoft },\n  { id: 'outlookcom', label: 'Outlook.com', Icon: IconMicrosoft },\n];\n\n/**\n * Format time\n *\n * Adapted from the `moment` way of [react-add-to-calendar](https://git.io/JkWol)\n * to the dayjs way\n */\nfunction formatTime(date: string | Date, id: CalendarID) {\n  return dayjs(date).format(id === 'outlookcom' ? 'YYYY-MM-DDTHH:mm:ss' : 'YYYYMMDDTHHmmss') + 'Z';\n}\n\n/**\n * Create query string with given parameters\n *\n * It checks that the parameter value is not falsy\n */\nfunction createQueryString(params: Record<string, string | undefined> = {}) {\n  return Object.keys(params).reduce((acc, key) => {\n    const value = params[key];\n    if (value) acc += `&${key}=${encodeURIComponent(value)}`;\n    return acc;\n  }, '');\n}\n\n/**\n * Build calendar URL\n *\n * Resources:\n * - [SO question about Google](https://stackoverflow.com/q/22757908)\n * - [docs about outlook.com format](https://git.io/JkWp5)\n * - [addevent wrapper SaaS](https://www.addevent.com/)\n */\nfunction buildUrl(event: AddToCalendarEvent, id: CalendarID) {\n  const { start, end, title, location, description } = event;\n  const startFormatted = formatTime(start, id);\n  const endFormatted = formatTime(end, id);\n\n  if (id === 'google')\n    return `https://calendar.google.com/calendar/render?action=TEMPLATE&dates=${startFormatted}/${endFormatted}${createQueryString(\n      { location, text: title, details: description },\n    )}`;\n\n  if (id === 'outlookcom')\n    return `https://outlook.live.com/owa/?rru=addevent${createQueryString({\n      startdt: startFormatted,\n      enddt: endFormatted,\n      subject: title,\n      location,\n      body: description,\n      allday: 'false', // TODO: calculate it?\n    })}&path=/calendar/view/Month`;\n\n  let url = [\n    'BEGIN:VCALENDAR',\n    'VERSION:2.0',\n    'BEGIN:VEVENT',\n    'URL:' + getCurrentURL(),\n    'DTSTART:' + startFormatted,\n    'DTEND:' + endFormatted,\n    'SUMMARY:' + title,\n    'DESCRIPTION:' + description,\n    'LOCATION:' + location,\n    'END:VEVENT',\n    'END:VCALENDAR',\n  ].join('\\n');\n\n  if (!isIE && isMobile()) url = encodeURI('data:text/calendar;charset=utf8,' + url);\n\n  return url;\n}\n\n/**\n * AddToCalendar widget that supports google, apple and outlook calendars\n */\nexport const AddToCalendar: FC<AddToCalendarProps> = ({\n  title,\n  start,\n  end,\n  className = '',\n  location = '',\n  description = '',\n}) => {\n  const event = { start: start, end: end, title, location, description };\n\n  function handleLinkClick(event: SyntheticEvent<HTMLAnchorElement>) {\n    event.preventDefault();\n    const url = event.currentTarget.getAttribute('href') as string;\n\n    if (!isMobile() && (url.startsWith('data') || url.startsWith('BEGIN'))) {\n      const filename = 'download.ics';\n      const blob = new Blob([url], { type: 'text/calendar;charset=utf-8' });\n\n      if (isIE) {\n        // @ts-ignore (expect-error breaks in GH actions) TODO: replace deprecated method\n        window.navigator.msSaveOrOpenBlob(blob, filename);\n      } else {\n        // many browsers do not properly support downloading data URIs\n        // (even with \"download\" attribute in use) so this solution\n        // ensures the event will download cross-browser\n        const link = document.createElement('a');\n        link.href = window.URL.createObjectURL(blob);\n        link.setAttribute('download', filename);\n        document.body.appendChild(link);\n        link.click();\n        document.body.removeChild(link);\n      }\n    } else {\n      window.open(url, '_blank');\n    }\n  }\n\n  return (\n    <Card className={`mml-add-to-calendar ${className}`}>\n      <CardHeader icon=\"date_range\" text=\"Add to My Calendar\" />\n      <CardBody>\n        <ButtonList>\n          {CALENDAR_SERVICES.map(({ id, label, Icon }) => (\n            <a\n              key={id}\n              className={`mml-btn ${Icon ? 'mml-btn--with-icon' : ''}`}\n              onClick={handleLinkClick}\n              href={buildUrl(event, id)}\n              target=\"_blank\"\n              rel=\"nofollow noreferrer noopener\"\n            >\n              {Icon} {label}\n            </a>\n          ))}\n        </ButtonList>\n      </CardBody>\n    </Card>\n  );\n};\n", "import React, { FC, SyntheticEvent } from 'react';\nimport { sanitizeUrl } from '@braintree/sanitize-url';\n\nimport { Icon } from './Icon';\n\nexport type ButtonProps = {\n  /** Additional button class name */\n  className?: string;\n  /** The text to display in the button */\n  text: string;\n  /** The name of the button */\n  name?: string;\n  /** The value of the button */\n  value?: string;\n  /** If the button should open a link use this prop */\n  url?: string;\n  /** Button style variant */\n  variant?: 'floating';\n  /** Optional button icon name to display besides the text (from [material icons](https://material.io/resources/icons/)) */\n  icon?: string;\n};\n\n/**\n * Button can be used to open a URL, submit the form or trigger a select when clicked\n */\nexport const Button: FC<ButtonProps> = ({ className = '', text, name, value, url = '', variant, icon }) => {\n  if (icon) {\n    className += text ? ' mml-btn--with-icon' : ' mml-btn--icon';\n  } else {\n    className += ' mml-btn--text';\n  }\n  className += variant === 'floating' ? ' mml-btn--floating' : ' mml-btn--grounded';\n\n  if (url)\n    return (\n      <a className={`mml-btn ${className}`} href={sanitizeUrl(url)} target=\"_blank\" rel=\"nofollow noreferrer noopener\">\n        {icon && <Icon name={icon} />}\n        {text}\n      </a>\n    );\n\n  return (\n    <button\n      className={`mml-btn ${className}`}\n      type=\"submit\"\n      name={name}\n      value={value}\n      onClick={(event: SyntheticEvent) => {\n        const input = document.createElement('input');\n        input.type = 'hidden';\n        input.name = name || '';\n        input.value = value || '';\n        event.currentTarget?.closest('form')?.appendChild(input);\n      }}\n    >\n      {icon && <Icon name={icon} />}\n      {text}\n    </button>\n  );\n};\n", "import React, { FC, ReactElement, Children, cloneElement } from 'react';\nimport { CarouselItemProps } from './CarouselItem';\n\nexport type CarouselProps = {\n  /**\n   * The only children of the Carousel are the carousel item.\n   */\n  children?: ReactElement<CarouselItemProps>[] | ReactElement<CarouselItemProps>;\n  /**\n   * Base slide width set on the `Carousel` component level, it can be overriden for each CarouselItem by setting\n   * a `width` attribute on the `<item>` component.\n   *\n   * It can be set to either a percentage, e.g. `slideWidth=\"40%\"` or to a pixel based value `slideWidth=\"200px\"`.\n   *\n   * @default '120px'\n   */\n  slideWidth?: string;\n  /**\n   * Additional carousel class name\n   */\n  className?: string;\n};\n\n/**\n * A carousel is a nice mobile friendly way of letting a user select something\n *\n * Super simple scroll based carousel slightly inspired by [react-scroll-snap-slider](https://github.com/lifarl/react-scroll-snap-slider)\n */\nexport const Carousel: FC<CarouselProps> = ({ children, slideWidth = '120px', className = '' }) => {\n  return (\n    <div className={`mml-carousel ${className}`}>\n      <div className=\"mml-carousel__track\">\n        <div className=\"mml-carousel__slides\">\n          {Children.map(children as ReactElement, (child) =>\n            cloneElement(child, { className: 'mml-carousel__slide', slideWidth }),\n          )}\n        </div>\n      </div>\n    </div>\n  );\n};\n", "import React, { PropsWithChildren } from 'react';\nimport { CarouselProps } from './Carousel';\n\nexport type CarouselItemProps = {\n  /**\n   * Determines the slide width, it can be set to either a percentage, e.g. `width=\"40%\"` or to a pixel based value `width=\"200px\"`.\n   * It defaults to the `slideWidth` prop set at the `<carousel>` level\n   *\n   * @default ''\n   */\n  width?: string;\n  /**\n   * Additional carousel item class name\n   */\n  className?: string;\n} & Pick<CarouselProps, 'slideWidth'>;\n\n/**\n * A carousel item\n */\nexport const CarouselItem = ({\n  children,\n  slideWidth,\n  width = '',\n  className = '',\n}: PropsWithChildren<CarouselItemProps>) => {\n  const finalWidth = width || slideWidth;\n  return (\n    <div className={`mml-carousel-item ${className}`} style={{ flex: `0 0 ${finalWidth}`, minWidth: finalWidth }}>\n      {children}\n    </div>\n  );\n};\n", "import React, { PropsWithChildren } from 'react';\n\nexport type ColProps = {\n  /** The width of the column (grid is by default made of 12 columns, you can change it with scss variable `$mml-grid-columns`) */\n  width?: number | 'auto';\n  /** The offset for the column */\n  offset?: number;\n  /** Align horizontally */\n  align?: 'left' | 'center' | 'right';\n};\n\n/**\n * A grid column\n * TODO: Consider renaming this element\n */\nexport const Col = ({ children, width = 12, offset = 0, align = 'left' }: PropsWithChildren<ColProps>) => {\n  let classNames = `mml-col-${width}`;\n  if (offset) classNames = classNames + ` mml-offset-${offset}`;\n  classNames = classNames + ` mml-align-${align}`;\n\n  return <div className={classNames}>{children}</div>;\n};\n", "import React, { FC } from 'react';\n\nexport type ErrorProps = {\n  /** The error message */\n  error?: string;\n};\n\nexport const Error: FC<ErrorProps> = ({ error = '' }) => {\n  if (!error) return null;\n  return <span className=\"mml-error\">{error}</span>;\n};\n", "import React, { FC } from 'react';\n\nexport type ImageProps = {\n  /** The url to load the image from */\n  src: string;\n  /** The alt tag for the image */\n  alt?: string;\n  /** The title tag for the image */\n  title?: string;\n  /** Additional class name */\n  className?: string;\n};\n\nexport const Image: FC<ImageProps> = ({ src, alt = '', title = '', className = '' }) => {\n  return <img className={`mml-image ${className}`.trim()} src={src} alt={alt} title={title} />;\n};\n", "import React, { FC, useState } from 'react';\n\nexport type InputProps = {\n  /** The name of the input */\n  name: string;\n  /** The label of the input (it is presented as a `CardHeader` */\n  label?: string;\n  /** Initial value of the input */\n  value?: string;\n  /** The input type */\n  type?: string;\n  /** The placeholder of the input field */\n  placeholder?: string;\n};\n\n/**\n * Text input element. Usually you'll want to rely on regular messages\n */\nexport const Input: FC<InputProps> = ({ name, label, value = '', type = 'text', placeholder = '' }) => {\n  const [state, setState] = useState(value);\n  const id = `mml-${name}`;\n\n  return (\n    <>\n      {label && (\n        <label className=\"mml-card-header\" htmlFor={id}>\n          <span className=\"mml-card-header__text\">{label}</span>\n        </label>\n      )}\n      <input\n        id={id}\n        className=\"mml-input\"\n        name={name}\n        value={state}\n        type={type}\n        placeholder={placeholder}\n        onChange={(event) => setState(event.target.value)}\n      />\n    </>\n  );\n};\n", "import React, { FC } from 'react';\n\nexport type ProgressProps = {\n  /**\n   * The size of the progress spinner sets the diameter of the animated circle, it allows to override a specific progress size despite the default CSS value\n   * @default 'SCSS: $mml-progress-width: 1em'\n   */\n  size?: string | number;\n  /**\n   * The thickness of the circle, (it sets the `stroke-wdith` svg attribute)\n   * @default 3.6\n   */\n  thickness?: string | number;\n  /**\n   * The color of the progress circle, it allows to override a specific progress color despite the default CSS value\n   * @default 'SCSS: $mml-progress-color: #bbb'\n   */\n  color?: string;\n};\n\nconst SIZE = 44;\n\nexport const Progress: FC<ProgressProps> = ({ size, thickness = 3.6, color }) => {\n  thickness = typeof thickness === 'string' ? parseFloat(thickness) : thickness;\n  // interpret a digit only string or a number as a pixel value otherwise leave\n  // it as astring, it might be a value like `2em` or `120%`\n  size = (typeof size === 'string' && /^\\d+$/.test(size)) || typeof size === 'number' ? size + 'px' : size;\n\n  return (\n    <span className=\"mml-progress\" role=\"progressbar\" style={{ width: size, height: size, color }}>\n      <svg className=\"mml-progress__svg\" viewBox={`${SIZE / 2} ${SIZE / 2} ${SIZE} ${SIZE}`}>\n        <circle\n          className=\"mml-progress__circle\"\n          cx={SIZE}\n          cy={SIZE}\n          r={(SIZE - thickness) / 2}\n          fill=\"none\"\n          strokeWidth={thickness}\n        />\n      </svg>\n    </span>\n  );\n};\n", "import React, { FC } from 'react';\nimport { Progress, ProgressProps } from './Progress';\n\nexport type LoadingProps = {\n  /**\n   * Flag that indicates whether the component should show\n   * @default false\n   */\n  loading?: boolean;\n  /**\n   * Optional text to display besides the progress indicator\n   */\n  text?: string;\n  /**\n   * Additional element class name\n   * @default ''\n   */\n  className?: string;\n} & ProgressProps;\n\n/**\n * Loading indicator\n */\nexport const Loading: FC<LoadingProps> = ({ className = '', loading = false, text, size, thickness, color }) => {\n  if (!loading) return null;\n\n  return (\n    <div className={`mml-loading ${className}`}>\n      <Progress {...{ size, thickness, color }} />\n      {text && <div className=\"mml-loading__text\">{text}</div>}\n    </div>\n  );\n};\n", "import React, { FC, ReactElement } from 'react';\nimport ReactMarkdown from 'react-markdown';\nimport * as linkify from 'linkifyjs';\n\nexport const truncate = (input: string, length: number, end = '...') => {\n  if (input.length > length) return `${input.substring(0, length - end.length)}${end}`;\n  return input;\n};\n\nconst matchMarkdownLinks = (message: string) => {\n  const regexMdLinks = /\\[([^[]+)\\](\\(.*\\))/gm;\n  const matches = message.match(regexMdLinks);\n  const singleMatch = /\\[([^[]+)\\]\\((.*)\\)/;\n\n  const links = matches\n    ? matches.map((match) => {\n        const i = singleMatch.exec(match);\n        return i && i[2];\n      })\n    : [];\n  return links;\n};\n\nconst MDLinkRender: FC<{ href: string; children: ReactElement }> = (props) => {\n  if (!props.href || (!props.href.startsWith('http') && !props.href.startsWith('mailto:'))) return props.children;\n  return (\n    <a href={props.href} target=\"_blank\" rel=\"nofollow noreferrer noopener\">\n      {props.children}\n    </a>\n  );\n};\n\nconst markDownRenderers = { link: MDLinkRender };\n\nconst allowedMarkups: ReactMarkdown.NodeType[] = [\n  'html',\n  // @ts-ignore\n  'root',\n  'text',\n  'break',\n  'paragraph',\n  'emphasis',\n  'strong',\n  'link',\n  'list',\n  'listItem',\n  'code',\n  'inlineCode',\n  'blockquote',\n];\n\nexport type MDProps = {\n  /** The markdown text */\n  text: string;\n};\n\n/**\n * MD renders a given text as markdown\n */\nexport const MD: FC<MDProps> = ({ text }) => {\n  if (!text) return null;\n\n  let newText = text;\n  let markdownLinks = matchMarkdownLinks(newText);\n  // extract all valid links/emails within text and replace it with proper markup\n  linkify.find(newText).forEach(({ type, href, value }) => {\n    // check if message is already  markdown\n    const noParsingNeeded = markdownLinks && markdownLinks.filter((text) => text?.indexOf(href) !== -1);\n    if (noParsingNeeded.length > 0) return;\n\n    const displayLink = type === 'email' ? value : truncate(value.replace(/(http(s?):\\/\\/)?(www\\.)?/, ''), 20);\n    newText = newText.replace(value, `[${displayLink}](${encodeURI(href)})`);\n  });\n\n  return (\n    <div className=\"mml-md\">\n      <ReactMarkdown\n        allowedTypes={allowedMarkups}\n        renderers={markDownRenderers}\n        source={newText}\n        escapeHtml={true}\n        unwrapDisallowed={true}\n        transformLinkUri={(uri) => (uri.startsWith('app://') ? uri : ReactMarkdown.uriTransformer(uri))}\n      />\n    </div>\n  );\n};\n", "import React, { useState, FC } from 'react';\nimport { Icon } from './Icon';\n\nexport type NumberProps = {\n  /** The name of the number */\n  name: string;\n  /** The initial integer value */\n  value: string | number;\n};\n\n/**\n * Mobile friendly number input\n */\nexport const Number: FC<NumberProps> = ({ name, value }) => {\n  const [state, setState] = useState(parseInt(`${value}`, 10) || 0);\n\n  return (\n    <div className=\"mml-number\">\n      <input name={name} value={state} type=\"hidden\" />\n      <span className=\"mml-btn mml-btn--floating mml-btn--icon mml-number__dec\" onClick={() => setState(state - 1)}>\n        <Icon name=\"remove\" />\n      </span>\n      <span className=\"mml-number__count\">{state}</span>\n      <span className=\"mml-btn mml-btn--floating mml-btn--icon mml-number__inc\" onClick={() => setState(state + 1)}>\n        <Icon name=\"add\" />\n      </span>\n    </div>\n  );\n};\n", "import React, { FC, ReactElement } from 'react';\n\nimport { ColProps } from './Col';\n\nexport type RowProps = {\n  /** The children of a row must be columns */\n  children?: ReactElement<ColProps>[] | ReactElement<ColProps>;\n};\n\nexport const Row: FC<RowProps> = ({ children }) => {\n  return <div className=\"mml-row\">{children}</div>;\n};\n", "import React, { useState, useRef, useCallback, useEffect, FC } from 'react';\nimport { Virtuoso } from 'react-virtuoso';\nimport { Dayjs } from 'dayjs';\nimport { DatePickerProps } from './DatePicker';\n\nexport type DatePickerSelectProps = DatePickerSelectReadyProps & {\n  itemClassName?: string;\n  getItemData: (props: DatePickerSelectItemProps) => DatePickerItemData;\n};\n\n/**\n * Basic shape of DatePickerSelect extended by wrapper components as DatePickerDate and DatePickerTime\n */\nexport type DatePickerSelectReadyProps = Pick<DatePickerProps, 'icalFilter'> & {\n  format: string;\n  interval: number;\n  onChange: (value: Dayjs) => void;\n  value: Dayjs;\n};\n\n/**\n * Inside Virtuoso select items need an idx to indicate their position\n */\nexport type DatePickerSelectItemProps = {\n  format: string;\n  idx: number;\n  interval: number;\n  value: Dayjs;\n};\n\n/**\n * The data needed by each datepicker select item\n */\nexport type DatePickerItemData = {\n  displayValue: string;\n  idx: number;\n  isSelected: (currentValue: Dayjs) => boolean;\n  value: Dayjs;\n};\n\nconst ITEMS_PER_PAGE = 40;\nconst VERTICAL_COMPENSATION = 3;\nconst INITIAL_INDEX = ITEMS_PER_PAGE;\nconst VIRTUOSO_START_INDEX = 10000;\n\n/**\n * DatePicker select\n */\nexport const DatePickerSelect: FC<DatePickerSelectProps> = (props) => {\n  const { onChange, icalFilter, getItemData, itemClassName, interval, format, value } = props;\n\n  // Generate date items\n  const generateItems = useCallback(\n    (quantity: number, firstIdx: number) => {\n      return Array(quantity)\n        .fill(true)\n        .map((_, idx) => getItemData({ interval, format, value, idx: firstIdx + idx }))\n        .filter((newItem) => !icalFilter || (icalFilter && icalFilter(newItem.value)));\n    },\n    [interval, format, value, icalFilter, getItemData],\n  );\n\n  const [items, setItems] = useState<DatePickerItemData[]>(generateItems(ITEMS_PER_PAGE * 2, -ITEMS_PER_PAGE));\n  const [firstItemIndex, setFirstItemIndex] = useState(VIRTUOSO_START_INDEX);\n\n  const initialIndexOffset = useRef(INITIAL_INDEX);\n  const [selectedIdx, setSelectedIdx] = useState<number | null>(null);\n\n  const handleClick = useCallback(\n    (item: DatePickerItemData) => {\n      onChange(item.value);\n\n      const firstItemIndex = initialIndexOffset.current || 0;\n      let nextFirstItemIdx = firstItemIndex - INITIAL_INDEX - ITEMS_PER_PAGE;\n      const missingTopItems = nextFirstItemIdx - item.idx + VERTICAL_COMPENSATION;\n\n      // prepend date items, when the selected date's index is too low we prepend\n      // some date options so that it will remain vertically centered in the middle\n      if (missingTopItems >= 0) {\n        nextFirstItemIdx -= missingTopItems;\n        initialIndexOffset.current -= firstItemIndex - missingTopItems;\n        setItems((items) => [...generateItems(missingTopItems, nextFirstItemIdx), ...items]);\n      }\n      setSelectedIdx(item.idx);\n    },\n    [setItems, generateItems, initialIndexOffset, onChange],\n  );\n\n  const appendItems = useCallback(\n    (lastItemIndex: number) => {\n      setItems((items) => [...items, ...generateItems(ITEMS_PER_PAGE, lastItemIndex)]);\n    },\n    [setItems, generateItems],\n  );\n\n  // @see https://git.io/JIUuo\n  const prependItems = useCallback(() => {\n    const firstItemIndex = initialIndexOffset.current || 0;\n    const nextFirstItemIdx = firstItemIndex - INITIAL_INDEX - ITEMS_PER_PAGE;\n    if (initialIndexOffset) {\n      initialIndexOffset.current -= ITEMS_PER_PAGE;\n    }\n    setItems((items) => [...generateItems(ITEMS_PER_PAGE, nextFirstItemIdx), ...items]);\n    setFirstItemIndex(firstItemIndex - ITEMS_PER_PAGE);\n    return false;\n  }, [setItems, generateItems, initialIndexOffset]);\n\n  // on mount check if there is a selected value and save its idx in state\n  useEffect(() => {\n    if (value) {\n      let initialSelectedIdx = null;\n      for (let i = 0; i < items.length; i++) {\n        if (items[i].isSelected(value)) {\n          initialSelectedIdx = items[i].idx;\n          break;\n        }\n      }\n      setSelectedIdx(initialSelectedIdx);\n    }\n  }, []); // eslint-disable-line\n\n  return (\n    <Virtuoso\n      data={items}\n      firstItemIndex={firstItemIndex}\n      itemContent={(_, item) => (\n        <div\n          className={\n            itemClassName + ` mml-datepicker__item ${item.idx === selectedIdx ? 'mml-datepicker__item--selected' : ''}`\n          }\n          onClick={() => handleClick(item)}\n        >\n          {item.displayValue}\n        </div>\n      )}\n      endReached={appendItems}\n      startReached={prependItems}\n    />\n  );\n};\n", "import React, { FC } from 'react';\nimport dayjs, { Dayjs } from 'dayjs';\n\nimport { DatePickerProps } from './DatePicker';\nimport { DatePickerSelect, DatePickerSelectReadyProps, DatePickerSelectProps } from './DatePickerSelect';\n\nexport type DatePickerDateProps = DatePickerSelectReadyProps & {\n  format: NonNullable<DatePickerProps['dateFormat']>;\n  interval: NonNullable<DatePickerProps['dateInterval']>;\n};\n\n/**\n * Get item data\n */\nconst getItemData: DatePickerSelectProps['getItemData'] = (props) => {\n  const { idx, interval, value, format } = props;\n  const newValue =\n    idx >= 0\n      ? dayjs(value).add(idx * (interval * 24), 'hour')\n      : dayjs(value).subtract(idx * (interval * 24) * -1, 'hour');\n\n  return {\n    idx,\n    value: newValue,\n    displayValue: dayjs(newValue).format(format),\n    isSelected: (currentValue: Dayjs) =>\n      dayjs(newValue).isSame(interval === 1 ? dayjs(currentValue) : dayjs(currentValue).add(interval, 'day'), 'date'),\n  };\n};\n\n/**\n * DatePicker date\n */\nexport const DatePickerDate: FC<DatePickerDateProps> = (props) => (\n  <div className=\"mml-datepicker__select mml-datepicker__date\">\n    <DatePickerSelect {...props} itemClassName=\"mml-datepicker__item--day\" getItemData={getItemData} />\n  </div>\n);\n", "import React, { FC } from 'react';\nimport dayjs, { Dayjs } from 'dayjs';\nimport isBetween from 'dayjs/plugin/isBetween';\n\nimport { DatePickerProps } from './DatePicker';\nimport { DatePickerSelect, DatePickerSelectProps, DatePickerSelectReadyProps } from './DatePickerSelect';\n\ndayjs.extend(isBetween);\n\nexport type DatePickerTimeProps = DatePickerSelectReadyProps & {\n  format: NonNullable<DatePickerProps['timeFormat']>;\n  interval: NonNullable<DatePickerProps['timeInterval']>;\n};\n\n/**\n * Get item data\n */\nconst getItemData: DatePickerSelectProps['getItemData'] = (props) => {\n  const { idx, interval, value, format } = props;\n  const newValue =\n    idx >= 0 ? dayjs(value).add(idx * interval, 'minute') : dayjs(value).subtract(idx * -1 * interval, 'minute');\n\n  return {\n    idx,\n    value: newValue,\n    displayValue: dayjs(newValue).format(format),\n    isSelected: (currentValue: Dayjs) =>\n      dayjs(newValue).isBetween(currentValue, dayjs(currentValue).add(interval - 1, 'minute'), 'minute', '[]'),\n  };\n};\n\n/**\n * DatePicker time\n */\nexport const DatePickerTime: FC<DatePickerTimeProps> = (props) => (\n  <div className=\"mml-datepicker__select mml-datepicker__time\">\n    <DatePickerSelect {...props} itemClassName=\"mml-datepicker__item--time\" getItemData={getItemData} />\n  </div>\n);\n", "import React, { useState, FC } from 'react';\nimport { Dayjs } from 'dayjs';\n\nimport { DatePickerDate } from './DatePickerDate';\nimport { DatePickerTime } from './DatePickerTime';\n\nexport type DatePickerProps = {\n  /** The scheduler name attached to hidden input */\n  name: string;\n  /** The selected date time */\n  selected: Dayjs;\n  /** Interval in days for time selection */\n  dateInterval: number;\n  /**  Interval in minutes for time selection */\n  timeInterval: number;\n  /** Show only the date picker(without time picker) */\n  fullDay: boolean;\n  /** Date format, see [dayjs docs](https://day.js.org/docs/en/display/format) */\n  dateFormat: string;\n  /** Time format, see [dayjs docs](https://day.js.org/docs/en/display/format) */\n  timeFormat: string;\n  /** Filter dates, it should return a boolean */\n  icalFilter: (date: Dayjs) => boolean;\n};\n\nexport const DatePicker: FC<DatePickerProps> = ({\n  name,\n  selected,\n  dateInterval,\n  timeInterval,\n  dateFormat,\n  timeFormat,\n  fullDay,\n  icalFilter,\n}) => {\n  const [date, setDate] = useState(selected);\n\n  const handleChangeDate = (value: Dayjs) => {\n    setDate((prevDate) =>\n      prevDate\n        .set('date', value.get('date'))\n        .set('month', value.get('month'))\n        .set('year', value.get('year')),\n    );\n  };\n\n  const handleChangeTime = (value: Dayjs) => {\n    setDate((prevDate) => prevDate.set('minute', value.get('minute')).set('hour', value.get('hour')));\n  };\n\n  return (\n    <div className={`mml-datepicker mml-datepicker--${fullDay ? 'single' : 'double'}`}>\n      <input name={name} value={date.toISOString()} type=\"hidden\" />\n\n      <DatePickerDate\n        icalFilter={icalFilter}\n        format={dateFormat}\n        value={date}\n        onChange={handleChangeDate}\n        interval={dateInterval}\n      />\n\n      {!fullDay && (\n        <DatePickerTime\n          icalFilter={icalFilter}\n          format={timeFormat}\n          value={date}\n          onChange={handleChangeTime}\n          interval={timeInterval}\n        />\n      )}\n    </div>\n  );\n};\n", "import React, { useState, useEffect, FC } from 'react';\n// @ts-ignore\nimport IcalExpander from 'ical-expander';\nimport dayjs, { Dayjs } from 'dayjs';\n\nimport { DatePicker } from './DatePicker';\nimport { Card } from './Card';\nimport { CardHeader } from './CardHeader';\nimport { CardBody } from './CardBody';\nimport { Error as ErrorComponent } from './Error';\nimport { Loading as LoadingComponent } from './Loading';\n\nexport type SchedulerProps = {\n  /**\n   * The scheduler name attached to hidden input\n   */\n  name: string;\n  /**\n   * The selected date, it must be a valid parseable date string\n   */\n  selected?: string;\n  /**\n   * Interval in days for day selection\n   * @default 1\n   */\n  dateInterval?: number;\n  /**\n   * Interval in minutes for time selection\n   * @default 30\n   */\n  timeInterval?: number;\n  /**\n   * Date format, see [dayjs docs](https://day.js.org/docs/en/display/format)\n   * @default 'ddd MMM DD'\n   */\n  dateFormat?: string;\n  /**\n   * Time format, see [dayjs docs](https://day.js.org/docs/en/display/format)\n   * @default 'hh:mm A'\n   */\n  timeFormat?: string;\n  /**\n   * The duration of the event in minutes, used to check availability with ical\n   * @default 30\n   */\n  duration?: number;\n  /**\n   * ICal availability public URL\n   */\n  icalAvailability?: string;\n  /**\n   * Show only the date picker(without time picker) if events lasts a whole day\n   * @default false\n   */\n  fullDay?: boolean;\n};\n\nexport type ICalFilter = (start?: Dayjs) => boolean;\n\nconst setupIcalFilter = async (icalURL: string, duration: number) => {\n  const response = await fetch(icalURL, { method: 'GET', redirect: 'follow', credentials: 'same-origin' });\n  const body = await response.text();\n  if (!response.ok) throw new Error(body);\n\n  const icalExpander = new IcalExpander({ ics: body, maxIterations: 10 });\n\n  return () => (start?: Dayjs) => {\n    if (!start) return true;\n    const { events } = icalExpander.between(start.toDate(), start.add(duration, 'minute').toDate());\n    return !events.length;\n  };\n};\n\nexport const Scheduler: FC<SchedulerProps> = ({\n  name,\n  selected,\n  icalAvailability,\n  duration = 30,\n  dateInterval = 1,\n  timeInterval = 30,\n  dateFormat = 'ddd MMM DD',\n  timeFormat = 'hh:mm A',\n  fullDay = false,\n}) => {\n  const [loading, setLoading] = useState(false);\n  const [error, setError] = useState('');\n  const [icalFilter, setIcalFilter] = useState<ICalFilter>(() => () => true);\n\n  useEffect(() => {\n    if (!icalAvailability) return;\n\n    setLoading(true);\n    setupIcalFilter(icalAvailability, duration)\n      .then(setIcalFilter)\n      .catch((err) => {\n        console.warn('loading ical failed', { icalAvailability, err });\n        setError('iCal availability could not be loaded');\n      })\n      .finally(() => setLoading(false));\n  }, [icalAvailability, duration]);\n\n  return (\n    <Card className=\"mml-scheduler\">\n      <CardHeader icon=\"date_range\" text=\"Scheduler\" />\n      <CardBody>\n        {error && !loading && <ErrorComponent error={`Failed, error: ${error}`} />}\n        {!error && loading && <LoadingComponent loading={true} text=\"Loading availability\" />}\n        {!error && !loading && (\n          <DatePicker\n            name={name}\n            selected={selected ? dayjs(selected) : dayjs().startOf('hour')}\n            dateInterval={dateInterval}\n            timeInterval={timeInterval}\n            dateFormat={dateFormat}\n            timeFormat={timeFormat}\n            fullDay={fullDay}\n            icalFilter={icalFilter}\n          />\n        )}\n      </CardBody>\n    </Card>\n  );\n};\n", "import React, { FC } from 'react';\n\nexport type SuccessProps = { success?: string };\n\nexport const Success: FC<SuccessProps> = ({ success }) => {\n  if (success) return <div className=\"mml-success\">{success}</div>;\n\n  return null;\n};\n", "import React, { FC } from 'react';\n\nexport type TextProps = {\n  /** Text to render */\n  text: string;\n  /** Additional class name */\n  className?: string;\n};\n\n/**\n * Simple paragraph text element\n */\nexport const Text: FC<TextProps> = ({ text, className = '' }) => {\n  return <div className={`mml-text ${className}`.trim()}>{text}</div>;\n};\n", "import React, { ReactElement } from 'react';\n\nimport { MMLTag } from './MMLTag';\nimport {\n  AddToCalendar,\n  Button,\n  ButtonList,\n  Carousel,\n  CarouselItem,\n  Col,\n  Icon,\n  Image,\n  Input,\n  MD,\n  Scheduler,\n  Text,\n  Row,\n  Number,\n} from '../components';\n\nexport type ConvertorType = (tag: MMLTag, children?: ReactElement[]) => ReactElement;\n\n/**\n * The converters maps MML tags to react nodes\n * Every converter is passed the MML tag as well as the children (as React nodes)\n */\nexport const converters = {\n  button: (tag: MMLTag) => {\n    return (\n      <Button\n        {...tag.attributes}\n        key={tag.key}\n        text={tag.getText()}\n        name={tag.attributes.name}\n        value={tag.attributes.value}\n      />\n    );\n  },\n  button_list: (tag: MMLTag, children?: JSX.Element[]) => {\n    return (\n      <ButtonList {...tag.attributes} key={tag.key}>\n        {children}\n      </ButtonList>\n    );\n  },\n  input: (tag: MMLTag) => {\n    return <Input {...tag.attributes} key={tag.key} name={tag.attributes.name} value={tag.attributes.value} />;\n  },\n  add_to_calendar: (tag: MMLTag) => {\n    return (\n      <AddToCalendar\n        {...tag.attributes}\n        key={tag.key}\n        title={tag.attributes.title}\n        start={tag.attributes.start}\n        end={tag.attributes.end}\n      />\n    );\n  },\n  col: (tag: MMLTag, children?: JSX.Element[]) => {\n    return (\n      <Col {...tag.attributes} key={tag.key}>\n        {children}\n      </Col>\n    );\n  },\n  row: (tag: MMLTag, children?: JSX.Element[]) => {\n    return (\n      <Row {...tag.attributes} key={tag.key}>\n        {children}\n      </Row>\n    );\n  },\n  icon: (tag: MMLTag) => {\n    return <Icon {...tag.attributes} key={tag.key} name={tag.attributes.name} />;\n  },\n  image: (tag: MMLTag) => {\n    return <Image {...tag.attributes} key={tag.key} src={tag.attributes.src} />;\n  },\n  md: (tag: MMLTag) => {\n    return <MD {...tag.attributes} key={tag.key} text={tag.getText()} />;\n  },\n  text: (tag: MMLTag) => {\n    return <Text {...tag.attributes} key={tag.key} text={tag.getText()} />;\n  },\n  scheduler: (tag: MMLTag) => {\n    return (\n      <Scheduler\n        {...tag.attributes}\n        key={tag.key}\n        name={tag.attributes.name}\n        dateInterval={parseInt(tag.attributes.dateInterval, 10) || 1} // default to 1 day\n        timeInterval={parseInt(tag.attributes.timeInterval, 10) || 30} // default to 30 minutes\n        duration={parseInt(tag.attributes.duration, 10) || 30} // default to 30 minutes\n        selected={tag.attributes.selected}\n        fullDay={tag.attributes.fullDay === 'true'}\n        icalAvailability={tag.attributes.icalAvailability}\n      />\n    );\n  },\n  carousel: (tag: MMLTag, children?: JSX.Element[]) => {\n    return (\n      <Carousel slideWidth={tag.attributes.slideWidth} {...tag.attributes} key={tag.key}>\n        {children}\n      </Carousel>\n    );\n  },\n  item: (tag: MMLTag, children?: JSX.Element[]) => {\n    return (\n      <CarouselItem {...tag.attributes} key={tag.key}>\n        {children}\n      </CarouselItem>\n    );\n  },\n  number: (tag: MMLTag) => {\n    return <Number {...tag.attributes} key={tag.key} name={tag.attributes.name} value={tag.attributes.value} />;\n  },\n};\n", "import { ReactElement } from 'react';\nimport { XmlElement } from '@rgrove/parse-xml';\n\nimport { MMLTag } from './MMLTag';\nimport { converters as defaultConverters, ConvertorType } from './converters';\n\n/** The type attribute of <mml> determine how its inner content is visually displayed */\nexport type RootType = 'card';\n\n/**\n * Tree - The tree object for MML tags\n */\nexport class Tree {\n  converters: Record<string, ConvertorType>;\n  node: XmlElement;\n  children: MMLTag[];\n  reactElements: ReactElement[];\n  name?: string;\n  type?: RootType;\n\n  constructor(node: XmlElement, children: MMLTag[], customConvertors?: Record<string, ConvertorType>) {\n    this.converters = { ...defaultConverters, ...customConvertors };\n    this.node = node;\n    this.children = children;\n    this.reactElements = this.toReact();\n\n    this.name = node.attributes.name;\n    this.type = node.attributes.type as RootType;\n  }\n\n  /**\n   * convert all nodes to react and maintain the hierarchy\n   */\n  toReact(parent: Tree | MMLTag = this) {\n    const reactNodes: ReactElement[] = [];\n\n    (parent.children || []).forEach((child, i) => {\n      const converter = this.converters[child.name];\n      if (!converter || !Object.hasOwnProperty.call(this.converters, child.name)) {\n        throw Error(\n          `Converter not found for tag ${child.name}, Available converters are ${Object.keys(this.converters)}`,\n        );\n      }\n\n      const children = this.toReact(child);\n      child.key = `tag-${child.name}-position-${i}`;\n      reactNodes.push(converter(child, children));\n    });\n\n    return reactNodes;\n  }\n}\n", "import parseXml from '@rgrove/parse-xml';\n\nimport { ConvertorType } from './converters';\nimport { MMLTag } from './MMLTag';\nimport { Tree } from './tree';\n\n/**\n * SourceToXML - Takes an MML string and converts it to XML nodes\n *\n * @param {string} source MML tag string\n *\n * @returns {array} an Array of XML nodes\n */\nexport function SourceToXML(source: string) {\n  let src = source.trim();\n  // the wrapping MML tags are optional, for parsing simplicity we automatically add them if they are not already there\n  if (!src.startsWith('<mml')) src = `<mml>${source}</mml>`;\n\n  // emulate HTML handling of & escaping\n  const unescapedAmps = /&(?!amp;|lt;|gt;)/g;\n  src = src.replace(unescapedAmps, '&amp;');\n\n  // convert the string to XML nodes\n  // this library is relatively lightweight and doesn't do a ton of validation\n  return parseXml(src);\n}\n\nfunction convertNodes(nodes: parseXml.XmlNode[]) {\n  return nodes.reduce((acc: MMLTag[], node: parseXml.XmlNode) => {\n    const element = node as parseXml.XmlElement;\n    let children;\n    if (element.children) children = convertNodes(element.children);\n\n    let { name } = element;\n    if ((node as parseXml.XmlText).type === 'text') {\n      if ((node as parseXml.XmlText).text.trim().length) name = 'text';\n      else return acc; // skip empty text elements\n    }\n\n    acc.push(new MMLTag(name, node as parseXml.XmlElement | parseXml.XmlText, children));\n    return acc;\n  }, []);\n}\n\n/**\n * XMLtoMMLTree - Takes an array of XML nodes and converts it into an MML Tree\n *\n * @param {type} XMLNodes an array of XML nodes\n *\n * @returns {MMLTree} The MML tree\n */\nexport function XMLtoMMLTree(document: parseXml.XmlDocument, customConvertors?: Record<string, ConvertorType>) {\n  if (!document || !document.children || !document.children.length) throw new Error('bad input');\n\n  const mmlNode = document.children[0] as parseXml.XmlElement;\n  if (mmlNode.name !== 'mml') throw new Error('missing mml tag');\n\n  return new Tree(mmlNode, convertNodes(mmlNode.children), customConvertors);\n}\n\n/**\n * Takes an MML string and returns an MML Tree\n *\n * @param {string} source MML tag string\n *\n *  @returns {Tree} An MML Tree\n */\nexport function Parse(source: string, customConvertors?: Record<string, ConvertorType>) {\n  const XMLNodes = SourceToXML(source);\n  return XMLtoMMLTree(XMLNodes, customConvertors);\n}\n", "import React, { useState, useMemo, useCallback, FC, ComponentType, FormEvent } from 'react';\n\nimport { Parse, ConvertorType } from '../parser';\nimport { Loading as LoadingComponent, LoadingProps } from '../components/Loading';\nimport { Error as ErrorComponent, ErrorProps } from '../components/Error';\nimport { Success as SuccessComponent, SuccessProps } from '../components/Success';\n\nexport type MMLProps = {\n  /** The MML string source to render */\n  source: string;\n  /** The convert config allows you to overwrite the MML to react conversion */\n  converters?: Record<string, ConvertorType>;\n  /** The submit callback whenever a form is submitted, submit is expected to return a promise */\n  onSubmit?: (data: Record<string, any>) => Promise<any> | any;\n  /** Select a theme from built in available themes, it will be added as a className to the container(root) div */\n  theme?:\n    | 'base-dark'\n    | 'messaging-light'\n    | 'messaging-dark'\n    | 'team-light'\n    | 'team-dark'\n    | 'commerce-light'\n    | 'commerce-dark'\n    | 'livestream-light'\n    | 'livestream-dark'\n    | string;\n  /** Custom classname, appended to wrapper classname */\n  className?: string;\n  /** The Loading component, accepts null to render nothing */\n  Loading?: ComponentType<LoadingProps> | null;\n  /** The error component, accepts null to render nothing */\n  Error?: ComponentType<ErrorProps> | null;\n  /** The success message component, accepts null to render nothing */\n  Success?: ComponentType<SuccessProps> | null;\n};\n\n/**\n * MML root component\n */\nexport const MML: FC<MMLProps> = ({\n  source,\n  onSubmit,\n  converters,\n  theme = '',\n  className = '',\n  Loading = LoadingComponent,\n  Error = ErrorComponent,\n  Success = SuccessComponent,\n}) => {\n  const [error, setError] = useState('');\n  const [submitState, setSubmitState] = useState({ loading: false, error: '', success: '' });\n  const tree = useMemo(() => {\n    try {\n      return Parse(source, converters);\n    } catch (e) {\n      console.warn('mml parsing error: ', source, e);\n      setError(\"This chat message has invalid formatting and can't be shown\");\n      return null;\n    }\n  }, [source, converters]);\n\n  const handleSubmit = useCallback(\n    async (event: FormEvent<HTMLFormElement>) => {\n      event.preventDefault();\n\n      const state: Record<string, any> = {};\n      if (tree?.name) state.mml_name = tree.name; // include mml_name in the data\n      new FormData(event.currentTarget).forEach((value, key) => {\n        state[key] = value;\n      });\n\n      if (!onSubmit) return console.warn('Forgot to pass onSubmit prop to <MML/>? payload:', state);\n\n      try {\n        setSubmitState({ loading: true, error: '', success: '' });\n        await onSubmit(state);\n        setSubmitState({ loading: false, error: '', success: 'submitted' });\n      } catch (e) {\n        setSubmitState({ loading: false, error: 'Failed to send the request. Please try again.', success: '' });\n      }\n    },\n    [onSubmit, tree],\n  );\n\n  return (\n    <div className={`mml-container ${theme} ${className}`} data-testid=\"mml-container\">\n      {error ? (\n        <div className=\"mml-wrap\">{Error && <Error error={error} />}</div>\n      ) : (\n        <form onSubmit={handleSubmit} className=\"mml-wrap\" data-testid=\"mml-form\">\n          {tree?.type ? <div className=\"mml-card\">{tree?.reactElements}</div> : tree?.reactElements}\n          {submitState.loading && Loading && <Loading loading={submitState.loading} />}\n          {submitState.success && Success && <Success success={submitState.success} />}\n          {submitState.error && Error && <Error error={submitState.error} />}\n        </form>\n      )}\n    </div>\n  );\n};\n", "/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n  \"use strict\";\n\n  var Op = Object.prototype;\n  var hasOwn = Op.hasOwnProperty;\n  var undefined; // More compressible than void 0.\n  var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n  var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n  var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n  var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n  function define(obj, key, value) {\n    Object.defineProperty(obj, key, {\n      value: value,\n      enumerable: true,\n      configurable: true,\n      writable: true\n    });\n    return obj[key];\n  }\n  try {\n    // IE 8 has a broken Object.defineProperty that only works on DOM objects.\n    define({}, \"\");\n  } catch (err) {\n    define = function(obj, key, value) {\n      return obj[key] = value;\n    };\n  }\n\n  function wrap(innerFn, outerFn, self, tryLocsList) {\n    // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n    var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n    var generator = Object.create(protoGenerator.prototype);\n    var context = new Context(tryLocsList || []);\n\n    // The ._invoke method unifies the implementations of the .next,\n    // .throw, and .return methods.\n    generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n    return generator;\n  }\n  exports.wrap = wrap;\n\n  // Try/catch helper to minimize deoptimizations. Returns a completion\n  // record like context.tryEntries[i].completion. This interface could\n  // have been (and was previously) designed to take a closure to be\n  // invoked without arguments, but in all the cases we care about we\n  // already have an existing method we want to call, so there's no need\n  // to create a new function object. We can even get away with assuming\n  // the method takes exactly one argument, since that happens to be true\n  // in every case, so we don't have to touch the arguments object. The\n  // only additional allocation required is the completion record, which\n  // has a stable shape and so hopefully should be cheap to allocate.\n  function tryCatch(fn, obj, arg) {\n    try {\n      return { type: \"normal\", arg: fn.call(obj, arg) };\n    } catch (err) {\n      return { type: \"throw\", arg: err };\n    }\n  }\n\n  var GenStateSuspendedStart = \"suspendedStart\";\n  var GenStateSuspendedYield = \"suspendedYield\";\n  var GenStateExecuting = \"executing\";\n  var GenStateCompleted = \"completed\";\n\n  // Returning this object from the innerFn has the same effect as\n  // breaking out of the dispatch switch statement.\n  var ContinueSentinel = {};\n\n  // Dummy constructor functions that we use as the .constructor and\n  // .constructor.prototype properties for functions that return Generator\n  // objects. For full spec compliance, you may wish to configure your\n  // minifier not to mangle the names of these two functions.\n  function Generator() {}\n  function GeneratorFunction() {}\n  function GeneratorFunctionPrototype() {}\n\n  // This is a polyfill for %IteratorPrototype% for environments that\n  // don't natively support it.\n  var IteratorPrototype = {};\n  IteratorPrototype[iteratorSymbol] = function () {\n    return this;\n  };\n\n  var getProto = Object.getPrototypeOf;\n  var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n  if (NativeIteratorPrototype &&\n      NativeIteratorPrototype !== Op &&\n      hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n    // This environment has a native %IteratorPrototype%; use it instead\n    // of the polyfill.\n    IteratorPrototype = NativeIteratorPrototype;\n  }\n\n  var Gp = GeneratorFunctionPrototype.prototype =\n    Generator.prototype = Object.create(IteratorPrototype);\n  GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n  GeneratorFunctionPrototype.constructor = GeneratorFunction;\n  GeneratorFunction.displayName = define(\n    GeneratorFunctionPrototype,\n    toStringTagSymbol,\n    \"GeneratorFunction\"\n  );\n\n  // Helper for defining the .next, .throw, and .return methods of the\n  // Iterator interface in terms of a single ._invoke method.\n  function defineIteratorMethods(prototype) {\n    [\"next\", \"throw\", \"return\"].forEach(function(method) {\n      define(prototype, method, function(arg) {\n        return this._invoke(method, arg);\n      });\n    });\n  }\n\n  exports.isGeneratorFunction = function(genFun) {\n    var ctor = typeof genFun === \"function\" && genFun.constructor;\n    return ctor\n      ? ctor === GeneratorFunction ||\n        // For the native GeneratorFunction constructor, the best we can\n        // do is to check its .name property.\n        (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n      : false;\n  };\n\n  exports.mark = function(genFun) {\n    if (Object.setPrototypeOf) {\n      Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n    } else {\n      genFun.__proto__ = GeneratorFunctionPrototype;\n      define(genFun, toStringTagSymbol, \"GeneratorFunction\");\n    }\n    genFun.prototype = Object.create(Gp);\n    return genFun;\n  };\n\n  // Within the body of any async function, `await x` is transformed to\n  // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n  // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n  // meant to be awaited.\n  exports.awrap = function(arg) {\n    return { __await: arg };\n  };\n\n  function AsyncIterator(generator, PromiseImpl) {\n    function invoke(method, arg, resolve, reject) {\n      var record = tryCatch(generator[method], generator, arg);\n      if (record.type === \"throw\") {\n        reject(record.arg);\n      } else {\n        var result = record.arg;\n        var value = result.value;\n        if (value &&\n            typeof value === \"object\" &&\n            hasOwn.call(value, \"__await\")) {\n          return PromiseImpl.resolve(value.__await).then(function(value) {\n            invoke(\"next\", value, resolve, reject);\n          }, function(err) {\n            invoke(\"throw\", err, resolve, reject);\n          });\n        }\n\n        return PromiseImpl.resolve(value).then(function(unwrapped) {\n          // When a yielded Promise is resolved, its final value becomes\n          // the .value of the Promise<{value,done}> result for the\n          // current iteration.\n          result.value = unwrapped;\n          resolve(result);\n        }, function(error) {\n          // If a rejected Promise was yielded, throw the rejection back\n          // into the async generator function so it can be handled there.\n          return invoke(\"throw\", error, resolve, reject);\n        });\n      }\n    }\n\n    var previousPromise;\n\n    function enqueue(method, arg) {\n      function callInvokeWithMethodAndArg() {\n        return new PromiseImpl(function(resolve, reject) {\n          invoke(method, arg, resolve, reject);\n        });\n      }\n\n      return previousPromise =\n        // If enqueue has been called before, then we want to wait until\n        // all previous Promises have been resolved before calling invoke,\n        // so that results are always delivered in the correct order. If\n        // enqueue has not been called before, then it is important to\n        // call invoke immediately, without waiting on a callback to fire,\n        // so that the async generator function has the opportunity to do\n        // any necessary setup in a predictable way. This predictability\n        // is why the Promise constructor synchronously invokes its\n        // executor callback, and why async functions synchronously\n        // execute code before the first await. Since we implement simple\n        // async functions in terms of async generators, it is especially\n        // important to get this right, even though it requires care.\n        previousPromise ? previousPromise.then(\n          callInvokeWithMethodAndArg,\n          // Avoid propagating failures to Promises returned by later\n          // invocations of the iterator.\n          callInvokeWithMethodAndArg\n        ) : callInvokeWithMethodAndArg();\n    }\n\n    // Define the unified helper method that is used to implement .next,\n    // .throw, and .return (see defineIteratorMethods).\n    this._invoke = enqueue;\n  }\n\n  defineIteratorMethods(AsyncIterator.prototype);\n  AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n    return this;\n  };\n  exports.AsyncIterator = AsyncIterator;\n\n  // Note that simple async functions are implemented on top of\n  // AsyncIterator objects; they just return a Promise for the value of\n  // the final result produced by the iterator.\n  exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n    if (PromiseImpl === void 0) PromiseImpl = Promise;\n\n    var iter = new AsyncIterator(\n      wrap(innerFn, outerFn, self, tryLocsList),\n      PromiseImpl\n    );\n\n    return exports.isGeneratorFunction(outerFn)\n      ? iter // If outerFn is a generator, return the full iterator.\n      : iter.next().then(function(result) {\n          return result.done ? result.value : iter.next();\n        });\n  };\n\n  function makeInvokeMethod(innerFn, self, context) {\n    var state = GenStateSuspendedStart;\n\n    return function invoke(method, arg) {\n      if (state === GenStateExecuting) {\n        throw new Error(\"Generator is already running\");\n      }\n\n      if (state === GenStateCompleted) {\n        if (method === \"throw\") {\n          throw arg;\n        }\n\n        // Be forgiving, per 25.3.3.3.3 of the spec:\n        // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n        return doneResult();\n      }\n\n      context.method = method;\n      context.arg = arg;\n\n      while (true) {\n        var delegate = context.delegate;\n        if (delegate) {\n          var delegateResult = maybeInvokeDelegate(delegate, context);\n          if (delegateResult) {\n            if (delegateResult === ContinueSentinel) continue;\n            return delegateResult;\n          }\n        }\n\n        if (context.method === \"next\") {\n          // Setting context._sent for legacy support of Babel's\n          // function.sent implementation.\n          context.sent = context._sent = context.arg;\n\n        } else if (context.method === \"throw\") {\n          if (state === GenStateSuspendedStart) {\n            state = GenStateCompleted;\n            throw context.arg;\n          }\n\n          context.dispatchException(context.arg);\n\n        } else if (context.method === \"return\") {\n          context.abrupt(\"return\", context.arg);\n        }\n\n        state = GenStateExecuting;\n\n        var record = tryCatch(innerFn, self, context);\n        if (record.type === \"normal\") {\n          // If an exception is thrown from innerFn, we leave state ===\n          // GenStateExecuting and loop back for another invocation.\n          state = context.done\n            ? GenStateCompleted\n            : GenStateSuspendedYield;\n\n          if (record.arg === ContinueSentinel) {\n            continue;\n          }\n\n          return {\n            value: record.arg,\n            done: context.done\n          };\n\n        } else if (record.type === \"throw\") {\n          state = GenStateCompleted;\n          // Dispatch the exception by looping back around to the\n          // context.dispatchException(context.arg) call above.\n          context.method = \"throw\";\n          context.arg = record.arg;\n        }\n      }\n    };\n  }\n\n  // Call delegate.iterator[context.method](context.arg) and handle the\n  // result, either by returning a { value, done } result from the\n  // delegate iterator, or by modifying context.method and context.arg,\n  // setting context.delegate to null, and returning the ContinueSentinel.\n  function maybeInvokeDelegate(delegate, context) {\n    var method = delegate.iterator[context.method];\n    if (method === undefined) {\n      // A .throw or .return when the delegate iterator has no .throw\n      // method always terminates the yield* loop.\n      context.delegate = null;\n\n      if (context.method === \"throw\") {\n        // Note: [\"return\"] must be used for ES3 parsing compatibility.\n        if (delegate.iterator[\"return\"]) {\n          // If the delegate iterator has a return method, give it a\n          // chance to clean up.\n          context.method = \"return\";\n          context.arg = undefined;\n          maybeInvokeDelegate(delegate, context);\n\n          if (context.method === \"throw\") {\n            // If maybeInvokeDelegate(context) changed context.method from\n            // \"return\" to \"throw\", let that override the TypeError below.\n            return ContinueSentinel;\n          }\n        }\n\n        context.method = \"throw\";\n        context.arg = new TypeError(\n          \"The iterator does not provide a 'throw' method\");\n      }\n\n      return ContinueSentinel;\n    }\n\n    var record = tryCatch(method, delegate.iterator, context.arg);\n\n    if (record.type === \"throw\") {\n      context.method = \"throw\";\n      context.arg = record.arg;\n      context.delegate = null;\n      return ContinueSentinel;\n    }\n\n    var info = record.arg;\n\n    if (! info) {\n      context.method = \"throw\";\n      context.arg = new TypeError(\"iterator result is not an object\");\n      context.delegate = null;\n      return ContinueSentinel;\n    }\n\n    if (info.done) {\n      // Assign the result of the finished delegate to the temporary\n      // variable specified by delegate.resultName (see delegateYield).\n      context[delegate.resultName] = info.value;\n\n      // Resume execution at the desired location (see delegateYield).\n      context.next = delegate.nextLoc;\n\n      // If context.method was \"throw\" but the delegate handled the\n      // exception, let the outer generator proceed normally. If\n      // context.method was \"next\", forget context.arg since it has been\n      // \"consumed\" by the delegate iterator. If context.method was\n      // \"return\", allow the original .return call to continue in the\n      // outer generator.\n      if (context.method !== \"return\") {\n        context.method = \"next\";\n        context.arg = undefined;\n      }\n\n    } else {\n      // Re-yield the result returned by the delegate method.\n      return info;\n    }\n\n    // The delegate iterator is finished, so forget it and continue with\n    // the outer generator.\n    context.delegate = null;\n    return ContinueSentinel;\n  }\n\n  // Define Generator.prototype.{next,throw,return} in terms of the\n  // unified ._invoke helper method.\n  defineIteratorMethods(Gp);\n\n  define(Gp, toStringTagSymbol, \"Generator\");\n\n  // A Generator should always return itself as the iterator object when the\n  // @@iterator function is called on it. Some browsers' implementations of the\n  // iterator prototype chain incorrectly implement this, causing the Generator\n  // object to not be returned from this call. This ensures that doesn't happen.\n  // See https://github.com/facebook/regenerator/issues/274 for more details.\n  Gp[iteratorSymbol] = function() {\n    return this;\n  };\n\n  Gp.toString = function() {\n    return \"[object Generator]\";\n  };\n\n  function pushTryEntry(locs) {\n    var entry = { tryLoc: locs[0] };\n\n    if (1 in locs) {\n      entry.catchLoc = locs[1];\n    }\n\n    if (2 in locs) {\n      entry.finallyLoc = locs[2];\n      entry.afterLoc = locs[3];\n    }\n\n    this.tryEntries.push(entry);\n  }\n\n  function resetTryEntry(entry) {\n    var record = entry.completion || {};\n    record.type = \"normal\";\n    delete record.arg;\n    entry.completion = record;\n  }\n\n  function Context(tryLocsList) {\n    // The root entry object (effectively a try statement without a catch\n    // or a finally block) gives us a place to store values thrown from\n    // locations where there is no enclosing try statement.\n    this.tryEntries = [{ tryLoc: \"root\" }];\n    tryLocsList.forEach(pushTryEntry, this);\n    this.reset(true);\n  }\n\n  exports.keys = function(object) {\n    var keys = [];\n    for (var key in object) {\n      keys.push(key);\n    }\n    keys.reverse();\n\n    // Rather than returning an object with a next method, we keep\n    // things simple and return the next function itself.\n    return function next() {\n      while (keys.length) {\n        var key = keys.pop();\n        if (key in object) {\n          next.value = key;\n          next.done = false;\n          return next;\n        }\n      }\n\n      // To avoid creating an additional object, we just hang the .value\n      // and .done properties off the next function object itself. This\n      // also ensures that the minifier will not anonymize the function.\n      next.done = true;\n      return next;\n    };\n  };\n\n  function values(iterable) {\n    if (iterable) {\n      var iteratorMethod = iterable[iteratorSymbol];\n      if (iteratorMethod) {\n        return iteratorMethod.call(iterable);\n      }\n\n      if (typeof iterable.next === \"function\") {\n        return iterable;\n      }\n\n      if (!isNaN(iterable.length)) {\n        var i = -1, next = function next() {\n          while (++i < iterable.length) {\n            if (hasOwn.call(iterable, i)) {\n              next.value = iterable[i];\n              next.done = false;\n              return next;\n            }\n          }\n\n          next.value = undefined;\n          next.done = true;\n\n          return next;\n        };\n\n        return next.next = next;\n      }\n    }\n\n    // Return an iterator with no values.\n    return { next: doneResult };\n  }\n  exports.values = values;\n\n  function doneResult() {\n    return { value: undefined, done: true };\n  }\n\n  Context.prototype = {\n    constructor: Context,\n\n    reset: function(skipTempReset) {\n      this.prev = 0;\n      this.next = 0;\n      // Resetting context._sent for legacy support of Babel's\n      // function.sent implementation.\n      this.sent = this._sent = undefined;\n      this.done = false;\n      this.delegate = null;\n\n      this.method = \"next\";\n      this.arg = undefined;\n\n      this.tryEntries.forEach(resetTryEntry);\n\n      if (!skipTempReset) {\n        for (var name in this) {\n          // Not sure about the optimal order of these conditions:\n          if (name.charAt(0) === \"t\" &&\n              hasOwn.call(this, name) &&\n              !isNaN(+name.slice(1))) {\n            this[name] = undefined;\n          }\n        }\n      }\n    },\n\n    stop: function() {\n      this.done = true;\n\n      var rootEntry = this.tryEntries[0];\n      var rootRecord = rootEntry.completion;\n      if (rootRecord.type === \"throw\") {\n        throw rootRecord.arg;\n      }\n\n      return this.rval;\n    },\n\n    dispatchException: function(exception) {\n      if (this.done) {\n        throw exception;\n      }\n\n      var context = this;\n      function handle(loc, caught) {\n        record.type = \"throw\";\n        record.arg = exception;\n        context.next = loc;\n\n        if (caught) {\n          // If the dispatched exception was caught by a catch block,\n          // then let that catch block handle the exception normally.\n          context.method = \"next\";\n          context.arg = undefined;\n        }\n\n        return !! caught;\n      }\n\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n        var entry = this.tryEntries[i];\n        var record = entry.completion;\n\n        if (entry.tryLoc === \"root\") {\n          // Exception thrown outside of any try block that could handle\n          // it, so set the completion value of the entire function to\n          // throw the exception.\n          return handle(\"end\");\n        }\n\n        if (entry.tryLoc <= this.prev) {\n          var hasCatch = hasOwn.call(entry, \"catchLoc\");\n          var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n          if (hasCatch && hasFinally) {\n            if (this.prev < entry.catchLoc) {\n              return handle(entry.catchLoc, true);\n            } else if (this.prev < entry.finallyLoc) {\n              return handle(entry.finallyLoc);\n            }\n\n          } else if (hasCatch) {\n            if (this.prev < entry.catchLoc) {\n              return handle(entry.catchLoc, true);\n            }\n\n          } else if (hasFinally) {\n            if (this.prev < entry.finallyLoc) {\n              return handle(entry.finallyLoc);\n            }\n\n          } else {\n            throw new Error(\"try statement without catch or finally\");\n          }\n        }\n      }\n    },\n\n    abrupt: function(type, arg) {\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n        var entry = this.tryEntries[i];\n        if (entry.tryLoc <= this.prev &&\n            hasOwn.call(entry, \"finallyLoc\") &&\n            this.prev < entry.finallyLoc) {\n          var finallyEntry = entry;\n          break;\n        }\n      }\n\n      if (finallyEntry &&\n          (type === \"break\" ||\n           type === \"continue\") &&\n          finallyEntry.tryLoc <= arg &&\n          arg <= finallyEntry.finallyLoc) {\n        // Ignore the finally entry if control is not jumping to a\n        // location outside the try/catch block.\n        finallyEntry = null;\n      }\n\n      var record = finallyEntry ? finallyEntry.completion : {};\n      record.type = type;\n      record.arg = arg;\n\n      if (finallyEntry) {\n        this.method = \"next\";\n        this.next = finallyEntry.finallyLoc;\n        return ContinueSentinel;\n      }\n\n      return this.complete(record);\n    },\n\n    complete: function(record, afterLoc) {\n      if (record.type === \"throw\") {\n        throw record.arg;\n      }\n\n      if (record.type === \"break\" ||\n          record.type === \"continue\") {\n        this.next = record.arg;\n      } else if (record.type === \"return\") {\n        this.rval = this.arg = record.arg;\n        this.method = \"return\";\n        this.next = \"end\";\n      } else if (record.type === \"normal\" && afterLoc) {\n        this.next = afterLoc;\n      }\n\n      return ContinueSentinel;\n    },\n\n    finish: function(finallyLoc) {\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n        var entry = this.tryEntries[i];\n        if (entry.finallyLoc === finallyLoc) {\n          this.complete(entry.completion, entry.afterLoc);\n          resetTryEntry(entry);\n          return ContinueSentinel;\n        }\n      }\n    },\n\n    \"catch\": function(tryLoc) {\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n        var entry = this.tryEntries[i];\n        if (entry.tryLoc === tryLoc) {\n          var record = entry.completion;\n          if (record.type === \"throw\") {\n            var thrown = record.arg;\n            resetTryEntry(entry);\n          }\n          return thrown;\n        }\n      }\n\n      // The context.catch method must only be called with a location\n      // argument that corresponds to a known catch block.\n      throw new Error(\"illegal catch attempt\");\n    },\n\n    delegateYield: function(iterable, resultName, nextLoc) {\n      this.delegate = {\n        iterator: values(iterable),\n        resultName: resultName,\n        nextLoc: nextLoc\n      };\n\n      if (this.method === \"next\") {\n        // Deliberately forget the last sent value so that we don't\n        // accidentally pass it on to the delegate.\n        this.arg = undefined;\n      }\n\n      return ContinueSentinel;\n    }\n  };\n\n  // Regardless of whether this script is executing as a CommonJS module\n  // or not, return the runtime object so that we can declare the variable\n  // regeneratorRuntime in the outer scope, which allows this module to be\n  // injected easily by `bin/regenerator --include-runtime script.js`.\n  return exports;\n\n}(\n  // If this script is executing as a CommonJS module, use module.exports\n  // as the regeneratorRuntime namespace. Otherwise create a new empty\n  // object. Either way, the resulting object will be used to initialize\n  // the regeneratorRuntime variable at the top of this file.\n  typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n  regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n  // This module should not be running in strict mode, so the above\n  // assignment should always work unless something is misconfigured. Just\n  // in case runtime.js accidentally runs in strict mode, we can escape\n  // strict mode using a global Function call. This could conceivably fail\n  // if a Content Security Policy forbids using Function, but in that case\n  // the proper solution is to fix the accidental strict mode problem. If\n  // you've misconfigured your bundler to force strict mode and applied a\n  // CSP to forbid Function, and you're not willing to fix either of those\n  // problems, please detail your unique predicament in a GitHub issue.\n  Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n}\n", "import { XmlElement, XmlText } from '@rgrove/parse-xml';\n\nfunction isXmlElement(node: XmlElement | XmlText): node is XmlElement {\n  return !!(node as XmlElement).children;\n}\n\n/**\n * MMLTag - Xml tag converted to this MMLTag\n */\nexport class MMLTag {\n  name: string;\n  node: XmlElement | XmlText;\n  attributes: Record<string, string>;\n  children?: MMLTag[];\n  key?: string;\n\n  constructor(name: string, node: XmlElement | XmlText, children?: MMLTag[]) {\n    this.name = name;\n    this.node = node;\n    this.attributes = (this.node as XmlElement).attributes || {};\n    this.children = children;\n  }\n\n  getText() {\n    if (this.node.type === 'text') return this.node.text;\n    else if (isXmlElement(this.node) && this.node.children.length) return (this.node.children[0] as XmlText).text;\n    return '';\n  }\n\n  initialState() {\n    const { name, value } = this.attributes;\n    if (name) return { [name]: value };\n    return {};\n  }\n}\n", "import React, { PropsWithChildren } from 'react';\n\nexport type CardProps = {\n  /** Additional card class name */\n  className?: string;\n};\n\nexport const Card = ({ className = '', children }: PropsWithChildren<CardProps>) => {\n  return <div className={`mml-card ${className}`}>{children}</div>;\n};\n", "import React, { FC } from 'react';\n\nexport type IconProps = {\n  /** The name of the material icon, see https://material.io/resources/icons/ */\n  name: string;\n};\n\nexport const Icon: FC<IconProps> = ({ name }) => {\n  return <i className=\"mml-icon material-icons\">{name}</i>;\n};\n", "import React, { FC } from 'react';\n\nimport { Icon } from './Icon';\n\nexport type CardHeaderProps = {\n  /** Header text */\n  text: string;\n  /** The name of the material icon, see https://material.io/resources/icons/ */\n  icon?: string;\n  /** Additional card class name */\n  className?: string;\n};\n\nexport const CardHeader: FC<CardHeaderProps> = ({ text, icon = '', className = '' }) => {\n  return (\n    <div className={`mml-card-header ${className}`}>\n      {icon && <Icon name={icon} />}\n      <span className=\"mml-card-header__text\">{text}</span>\n    </div>\n  );\n};\n", "import React, { PropsWithChildren } from 'react';\n\nexport type CardBodyProps = {\n  /** Additional card class name */\n  className?: string;\n};\n\nexport const CardBody = ({ className = '', children }: PropsWithChildren<CardBodyProps>) => {\n  return <div className={`mml-card-body ${className}`}>{children}</div>;\n};\n", "import React, { FC, ReactElement } from 'react';\nimport { ButtonProps } from './Button';\n\nexport type ButtonListProps = {\n  /** A list of buttons */\n  children?: ReactElement<ButtonProps>[] | ReactElement<ButtonProps>;\n  /** Button style variant */\n  variant?: 'floating';\n};\n\n/**\n * A list of buttons\n */\nexport const ButtonList: FC<ButtonListProps> = ({ children, variant = '' }) => {\n  return (\n    <div className={`mml-btnlist ${variant === 'floating' ? ' mml-btnlist--floating' : 'mml-btnlist--grounded'}`}>\n      {children}\n    </div>\n  );\n};\n", "import React, { FC, ReactElement, SyntheticEvent } from 'react';\nimport dayjs from 'dayjs';\n\nimport { Card } from './Card';\nimport { CardHeader } from './CardHeader';\nimport { CardBody } from './CardBody';\nimport { ButtonList } from './ButtonList';\n\ntype SvgIconProps = {\n  /** The SVG path, calibrated for a 24 sized viewBox (as in Material Icons) */\n  path: string;\n};\n\n/**\n * Utility to have custom svg icons outside the `material-icons` system provided by the Icon component\n * Use case internal to this library is the AddToCalendar component which needs brand icons which are not\n * included in [the default material-icons set and probably never will be](https://git.io/Jk9yH)\n */\nconst SvgIcon: FC<SvgIconProps> = ({ path }) => (\n  <i className=\"mml-icon\">\n    <svg className=\"mml-icon__svg\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n      <path d={path} />\n    </svg>\n  </i>\n);\n\n/** Icon path from https://materialdesignicons.com/ */\nconst IconGoogle = (\n  <SvgIcon path=\"M21.35 11.1h-9.17v2.73h6.5c-.33 3.8-3.5 5.44-6.5 5.44C8.36 19.27 5 16.25 5 12c0-4.1 3.2-7.27 7.2-7.27 3.1 0 4.9 1.97 4.9 1.97L19 4.72S16.56 2 12.1 2C6.42 2 2.03 6.8 2.03 12c0 5.05 4.13 10 10.22 10 5.35 0 9.25-3.67 9.25-9.1 0-1.15-.15-1.8-.15-1.8h0z\" />\n);\n\n/** Icon path from https://materialdesignicons.com/ */\nconst IconMicrosoft = (\n  <SvgIcon path=\"M3 12V6.75l6-1.32v6.48L3 12m17-9v8.75l-10 .15V5.2L20 3M3 13l6 .1v6.8l-6-1.15V13m17 .25V22l-10-1.9v-7l10 .15z\" />\n);\n\n/** Icon path from https://materialdesignicons.com/ */\nconst IconApple = (\n  <SvgIcon path=\"M18.7 19.5c-.83 1.24-1.7 2.45-3.05 2.47-1.34.03-1.77-.8-3.3-.8-1.53 0-2 .77-3.27.82-1.3.05-2.3-1.32-3.14-2.53C4.25 17 2.94 12.45 4.7 9.4c.87-1.52 2.43-2.48 4.12-2.5 1.28-.02 2.5.87 3.3.87.78 0 2.26-1.07 3.8-.9.65.03 2.47.26 3.64 1.98-.1.06-2.17 1.28-2.15 3.8.03 3.02 2.65 4.03 2.68 4.04-.03.07-.42 1.44-1.38 2.83M13 3.5c.73-.83 1.94-1.46 2.94-1.5.13 1.17-.34 2.35-1.04 3.2-.7.85-1.83 1.5-2.95 1.42-.15-1.15.4-2.35 1.05-3.1z\" />\n);\n\nfunction isMobile() {\n  const ua = typeof navigator !== 'undefined' ? navigator.userAgent : '';\n  if (!ua) return false;\n  const mobileRE = /(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series[46]0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i;\n  if (mobileRE.test(ua)) return true;\n  if (\n    typeof navigator !== 'undefined' &&\n    navigator.maxTouchPoints > 1 &&\n    ua.indexOf('Macintosh') !== -1 &&\n    ua.indexOf('Safari') !== -1\n  )\n    return true;\n  return false;\n}\n\n// @ts-ignore (expect-error breaks in GH actions) TODO: replace deprecated method\nconst isIE = (typeof window !== 'undefined' && window.navigator.msSaveOrOpenBlob && window.Blob) as boolean;\n\nconst getCurrentURL = () => {\n  if (typeof window !== 'undefined') return window.location.href;\n  return '';\n};\n\nexport type AddToCalendarEvent = {\n  /**\n   * The title for the calendar entry, if a string it must be parseable as `Date`\n   */\n  start: string | Date;\n  /**\n   * The start time for the calendar entry, if a string it must be parseable as `Date`\n   */\n  end: string | Date;\n  /**\n   * The end time for the calendar entry\n   */\n  title: string;\n  /**\n   * The optional location for the calendar entry\n   */\n  location?: string;\n  /**\n   * The optional description for the calendar entry\n   */\n  description?: string;\n};\n\nexport type AddToCalendarProps = AddToCalendarEvent & {\n  /**\n   * Additional element class name\n   * @default ''\n   */\n  className?: string;\n};\n\n// we infer this from the the const CALENDAR_SERVICES, we might keep this\n// here if we want to make the calendar services configurable\n// type AddToCalendarService = {\n//   id: string;\n//   label: string;\n//   Icon?: FC;\n// };\ntype CalendarID = 'google' | 'apple' | 'outlook' | 'outlookcom';\n\nconst CALENDAR_SERVICES: Array<{ id: CalendarID; label: string; Icon: ReactElement }> = [\n  { id: 'google', label: 'Google', Icon: IconGoogle },\n  { id: 'apple', label: 'Apple Calendar', Icon: IconApple },\n  { id: 'outlook', label: 'Outlook', Icon: IconMicrosoft },\n  { id: 'outlookcom', label: 'Outlook.com', Icon: IconMicrosoft },\n];\n\n/**\n * Format time\n *\n * Adapted from the `moment` way of [react-add-to-calendar](https://git.io/JkWol)\n * to the dayjs way\n */\nfunction formatTime(date: string | Date, id: CalendarID) {\n  return dayjs(date).format(id === 'outlookcom' ? 'YYYY-MM-DDTHH:mm:ss' : 'YYYYMMDDTHHmmss') + 'Z';\n}\n\n/**\n * Create query string with given parameters\n *\n * It checks that the parameter value is not falsy\n */\nfunction createQueryString(params: Record<string, string | undefined> = {}) {\n  return Object.keys(params).reduce((acc, key) => {\n    const value = params[key];\n    if (value) acc += `&${key}=${encodeURIComponent(value)}`;\n    return acc;\n  }, '');\n}\n\n/**\n * Build calendar URL\n *\n * Resources:\n * - [SO question about Google](https://stackoverflow.com/q/22757908)\n * - [docs about outlook.com format](https://git.io/JkWp5)\n * - [addevent wrapper SaaS](https://www.addevent.com/)\n */\nfunction buildUrl(event: AddToCalendarEvent, id: CalendarID) {\n  const { start, end, title, location, description } = event;\n  const startFormatted = formatTime(start, id);\n  const endFormatted = formatTime(end, id);\n\n  if (id === 'google')\n    return `https://calendar.google.com/calendar/render?action=TEMPLATE&dates=${startFormatted}/${endFormatted}${createQueryString(\n      { location, text: title, details: description },\n    )}`;\n\n  if (id === 'outlookcom')\n    return `https://outlook.live.com/owa/?rru=addevent${createQueryString({\n      startdt: startFormatted,\n      enddt: endFormatted,\n      subject: title,\n      location,\n      body: description,\n      allday: 'false', // TODO: calculate it?\n    })}&path=/calendar/view/Month`;\n\n  let url = [\n    'BEGIN:VCALENDAR',\n    'VERSION:2.0',\n    'BEGIN:VEVENT',\n    'URL:' + getCurrentURL(),\n    'DTSTART:' + startFormatted,\n    'DTEND:' + endFormatted,\n    'SUMMARY:' + title,\n    'DESCRIPTION:' + description,\n    'LOCATION:' + location,\n    'END:VEVENT',\n    'END:VCALENDAR',\n  ].join('\\n');\n\n  if (!isIE && isMobile()) url = encodeURI('data:text/calendar;charset=utf8,' + url);\n\n  return url;\n}\n\n/**\n * AddToCalendar widget that supports google, apple and outlook calendars\n */\nexport const AddToCalendar: FC<AddToCalendarProps> = ({\n  title,\n  start,\n  end,\n  className = '',\n  location = '',\n  description = '',\n}) => {\n  const event = { start: start, end: end, title, location, description };\n\n  function handleLinkClick(event: SyntheticEvent<HTMLAnchorElement>) {\n    event.preventDefault();\n    const url = event.currentTarget.getAttribute('href') as string;\n\n    if (!isMobile() && (url.startsWith('data') || url.startsWith('BEGIN'))) {\n      const filename = 'download.ics';\n      const blob = new Blob([url], { type: 'text/calendar;charset=utf-8' });\n\n      if (isIE) {\n        // @ts-ignore (expect-error breaks in GH actions) TODO: replace deprecated method\n        window.navigator.msSaveOrOpenBlob(blob, filename);\n      } else {\n        // many browsers do not properly support downloading data URIs\n        // (even with \"download\" attribute in use) so this solution\n        // ensures the event will download cross-browser\n        const link = document.createElement('a');\n        link.href = window.URL.createObjectURL(blob);\n        link.setAttribute('download', filename);\n        document.body.appendChild(link);\n        link.click();\n        document.body.removeChild(link);\n      }\n    } else {\n      window.open(url, '_blank');\n    }\n  }\n\n  return (\n    <Card className={`mml-add-to-calendar ${className}`}>\n      <CardHeader icon=\"date_range\" text=\"Add to My Calendar\" />\n      <CardBody>\n        <ButtonList>\n          {CALENDAR_SERVICES.map(({ id, label, Icon }) => (\n            <a\n              key={id}\n              className={`mml-btn ${Icon ? 'mml-btn--with-icon' : ''}`}\n              onClick={handleLinkClick}\n              href={buildUrl(event, id)}\n              target=\"_blank\"\n              rel=\"nofollow noreferrer noopener\"\n            >\n              {Icon} {label}\n            </a>\n          ))}\n        </ButtonList>\n      </CardBody>\n    </Card>\n  );\n};\n", "import React, { FC, SyntheticEvent } from 'react';\nimport { sanitizeUrl } from '@braintree/sanitize-url';\n\nimport { Icon } from './Icon';\n\nexport type ButtonProps = {\n  /** Additional button class name */\n  className?: string;\n  /** The text to display in the button */\n  text: string;\n  /** The name of the button */\n  name?: string;\n  /** The value of the button */\n  value?: string;\n  /** If the button should open a link use this prop */\n  url?: string;\n  /** Button style variant */\n  variant?: 'floating';\n  /** Optional button icon name to display besides the text (from [material icons](https://material.io/resources/icons/)) */\n  icon?: string;\n};\n\n/**\n * Button can be used to open a URL, submit the form or trigger a select when clicked\n */\nexport const Button: FC<ButtonProps> = ({ className = '', text, name, value, url = '', variant, icon }) => {\n  if (icon) {\n    className += text ? ' mml-btn--with-icon' : ' mml-btn--icon';\n  } else {\n    className += ' mml-btn--text';\n  }\n  className += variant === 'floating' ? ' mml-btn--floating' : ' mml-btn--grounded';\n\n  if (url)\n    return (\n      <a className={`mml-btn ${className}`} href={sanitizeUrl(url)} target=\"_blank\" rel=\"nofollow noreferrer noopener\">\n        {icon && <Icon name={icon} />}\n        {text}\n      </a>\n    );\n\n  return (\n    <button\n      className={`mml-btn ${className}`}\n      type=\"submit\"\n      name={name}\n      value={value}\n      onClick={(event: SyntheticEvent) => {\n        const input = document.createElement('input');\n        input.type = 'hidden';\n        input.name = name || '';\n        input.value = value || '';\n        event.currentTarget?.closest('form')?.appendChild(input);\n      }}\n    >\n      {icon && <Icon name={icon} />}\n      {text}\n    </button>\n  );\n};\n", "import React, { FC, ReactElement, Children, cloneElement } from 'react';\nimport { CarouselItemProps } from './CarouselItem';\n\nexport type CarouselProps = {\n  /**\n   * The only children of the Carousel are the carousel item.\n   */\n  children?: ReactElement<CarouselItemProps>[] | ReactElement<CarouselItemProps>;\n  /**\n   * Base slide width set on the `Carousel` component level, it can be overriden for each CarouselItem by setting\n   * a `width` attribute on the `<item>` component.\n   *\n   * It can be set to either a percentage, e.g. `slideWidth=\"40%\"` or to a pixel based value `slideWidth=\"200px\"`.\n   *\n   * @default '120px'\n   */\n  slideWidth?: string;\n  /**\n   * Additional carousel class name\n   */\n  className?: string;\n};\n\n/**\n * A carousel is a nice mobile friendly way of letting a user select something\n *\n * Super simple scroll based carousel slightly inspired by [react-scroll-snap-slider](https://github.com/lifarl/react-scroll-snap-slider)\n */\nexport const Carousel: FC<CarouselProps> = ({ children, slideWidth = '120px', className = '' }) => {\n  return (\n    <div className={`mml-carousel ${className}`}>\n      <div className=\"mml-carousel__track\">\n        <div className=\"mml-carousel__slides\">\n          {Children.map(children as ReactElement, (child) =>\n            cloneElement(child, { className: 'mml-carousel__slide', slideWidth }),\n          )}\n        </div>\n      </div>\n    </div>\n  );\n};\n", "import React, { PropsWithChildren } from 'react';\nimport { CarouselProps } from './Carousel';\n\nexport type CarouselItemProps = {\n  /**\n   * Determines the slide width, it can be set to either a percentage, e.g. `width=\"40%\"` or to a pixel based value `width=\"200px\"`.\n   * It defaults to the `slideWidth` prop set at the `<carousel>` level\n   *\n   * @default ''\n   */\n  width?: string;\n  /**\n   * Additional carousel item class name\n   */\n  className?: string;\n} & Pick<CarouselProps, 'slideWidth'>;\n\n/**\n * A carousel item\n */\nexport const CarouselItem = ({\n  children,\n  slideWidth,\n  width = '',\n  className = '',\n}: PropsWithChildren<CarouselItemProps>) => {\n  const finalWidth = width || slideWidth;\n  return (\n    <div className={`mml-carousel-item ${className}`} style={{ flex: `0 0 ${finalWidth}`, minWidth: finalWidth }}>\n      {children}\n    </div>\n  );\n};\n", "import React, { PropsWithChildren } from 'react';\n\nexport type ColProps = {\n  /** The width of the column (grid is by default made of 12 columns, you can change it with scss variable `$mml-grid-columns`) */\n  width?: number | 'auto';\n  /** The offset for the column */\n  offset?: number;\n  /** Align horizontally */\n  align?: 'left' | 'center' | 'right';\n};\n\n/**\n * A grid column\n * TODO: Consider renaming this element\n */\nexport const Col = ({ children, width = 12, offset = 0, align = 'left' }: PropsWithChildren<ColProps>) => {\n  let classNames = `mml-col-${width}`;\n  if (offset) classNames = classNames + ` mml-offset-${offset}`;\n  classNames = classNames + ` mml-align-${align}`;\n\n  return <div className={classNames}>{children}</div>;\n};\n", "import React, { FC } from 'react';\n\nexport type ErrorProps = {\n  /** The error message */\n  error?: string;\n};\n\nexport const Error: FC<ErrorProps> = ({ error = '' }) => {\n  if (!error) return null;\n  return <span className=\"mml-error\">{error}</span>;\n};\n", "import React, { FC } from 'react';\n\nexport type ImageProps = {\n  /** The url to load the image from */\n  src: string;\n  /** The alt tag for the image */\n  alt?: string;\n  /** The title tag for the image */\n  title?: string;\n  /** Additional class name */\n  className?: string;\n};\n\nexport const Image: FC<ImageProps> = ({ src, alt = '', title = '', className = '' }) => {\n  return <img className={`mml-image ${className}`.trim()} src={src} alt={alt} title={title} />;\n};\n", "import React, { FC, useState } from 'react';\n\nexport type InputProps = {\n  /** The name of the input */\n  name: string;\n  /** The label of the input (it is presented as a `CardHeader` */\n  label?: string;\n  /** Initial value of the input */\n  value?: string;\n  /** The input type */\n  type?: string;\n  /** The placeholder of the input field */\n  placeholder?: string;\n};\n\n/**\n * Text input element. Usually you'll want to rely on regular messages\n */\nexport const Input: FC<InputProps> = ({ name, label, value = '', type = 'text', placeholder = '' }) => {\n  const [state, setState] = useState(value);\n  const id = `mml-${name}`;\n\n  return (\n    <>\n      {label && (\n        <label className=\"mml-card-header\" htmlFor={id}>\n          <span className=\"mml-card-header__text\">{label}</span>\n        </label>\n      )}\n      <input\n        id={id}\n        className=\"mml-input\"\n        name={name}\n        value={state}\n        type={type}\n        placeholder={placeholder}\n        onChange={(event) => setState(event.target.value)}\n      />\n    </>\n  );\n};\n", "import React, { FC } from 'react';\n\nexport type ProgressProps = {\n  /**\n   * The size of the progress spinner sets the diameter of the animated circle, it allows to override a specific progress size despite the default CSS value\n   * @default 'SCSS: $mml-progress-width: 1em'\n   */\n  size?: string | number;\n  /**\n   * The thickness of the circle, (it sets the `stroke-wdith` svg attribute)\n   * @default 3.6\n   */\n  thickness?: string | number;\n  /**\n   * The color of the progress circle, it allows to override a specific progress color despite the default CSS value\n   * @default 'SCSS: $mml-progress-color: #bbb'\n   */\n  color?: string;\n};\n\nconst SIZE = 44;\n\nexport const Progress: FC<ProgressProps> = ({ size, thickness = 3.6, color }) => {\n  thickness = typeof thickness === 'string' ? parseFloat(thickness) : thickness;\n  // interpret a digit only string or a number as a pixel value otherwise leave\n  // it as astring, it might be a value like `2em` or `120%`\n  size = (typeof size === 'string' && /^\\d+$/.test(size)) || typeof size === 'number' ? size + 'px' : size;\n\n  return (\n    <span className=\"mml-progress\" role=\"progressbar\" style={{ width: size, height: size, color }}>\n      <svg className=\"mml-progress__svg\" viewBox={`${SIZE / 2} ${SIZE / 2} ${SIZE} ${SIZE}`}>\n        <circle\n          className=\"mml-progress__circle\"\n          cx={SIZE}\n          cy={SIZE}\n          r={(SIZE - thickness) / 2}\n          fill=\"none\"\n          strokeWidth={thickness}\n        />\n      </svg>\n    </span>\n  );\n};\n", "import React, { FC } from 'react';\nimport { Progress, ProgressProps } from './Progress';\n\nexport type LoadingProps = {\n  /**\n   * Flag that indicates whether the component should show\n   * @default false\n   */\n  loading?: boolean;\n  /**\n   * Optional text to display besides the progress indicator\n   */\n  text?: string;\n  /**\n   * Additional element class name\n   * @default ''\n   */\n  className?: string;\n} & ProgressProps;\n\n/**\n * Loading indicator\n */\nexport const Loading: FC<LoadingProps> = ({ className = '', loading = false, text, size, thickness, color }) => {\n  if (!loading) return null;\n\n  return (\n    <div className={`mml-loading ${className}`}>\n      <Progress {...{ size, thickness, color }} />\n      {text && <div className=\"mml-loading__text\">{text}</div>}\n    </div>\n  );\n};\n", "import React, { FC, ReactElement } from 'react';\nimport ReactMarkdown from 'react-markdown';\nimport * as linkify from 'linkifyjs';\n\nexport const truncate = (input: string, length: number, end = '...') => {\n  if (input.length > length) return `${input.substring(0, length - end.length)}${end}`;\n  return input;\n};\n\nconst matchMarkdownLinks = (message: string) => {\n  const regexMdLinks = /\\[([^[]+)\\](\\(.*\\))/gm;\n  const matches = message.match(regexMdLinks);\n  const singleMatch = /\\[([^[]+)\\]\\((.*)\\)/;\n\n  const links = matches\n    ? matches.map((match) => {\n        const i = singleMatch.exec(match);\n        return i && i[2];\n      })\n    : [];\n  return links;\n};\n\nconst MDLinkRender: FC<{ href: string; children: ReactElement }> = (props) => {\n  if (!props.href || (!props.href.startsWith('http') && !props.href.startsWith('mailto:'))) return props.children;\n  return (\n    <a href={props.href} target=\"_blank\" rel=\"nofollow noreferrer noopener\">\n      {props.children}\n    </a>\n  );\n};\n\nconst markDownRenderers = { link: MDLinkRender };\n\nconst allowedMarkups: ReactMarkdown.NodeType[] = [\n  'html',\n  // @ts-ignore\n  'root',\n  'text',\n  'break',\n  'paragraph',\n  'emphasis',\n  'strong',\n  'link',\n  'list',\n  'listItem',\n  'code',\n  'inlineCode',\n  'blockquote',\n];\n\nexport type MDProps = {\n  /** The markdown text */\n  text: string;\n};\n\n/**\n * MD renders a given text as markdown\n */\nexport const MD: FC<MDProps> = ({ text }) => {\n  if (!text) return null;\n\n  let newText = text;\n  let markdownLinks = matchMarkdownLinks(newText);\n  // extract all valid links/emails within text and replace it with proper markup\n  linkify.find(newText).forEach(({ type, href, value }) => {\n    // check if message is already  markdown\n    const noParsingNeeded = markdownLinks && markdownLinks.filter((text) => text?.indexOf(href) !== -1);\n    if (noParsingNeeded.length > 0) return;\n\n    const displayLink = type === 'email' ? value : truncate(value.replace(/(http(s?):\\/\\/)?(www\\.)?/, ''), 20);\n    newText = newText.replace(value, `[${displayLink}](${encodeURI(href)})`);\n  });\n\n  return (\n    <div className=\"mml-md\">\n      <ReactMarkdown\n        allowedTypes={allowedMarkups}\n        renderers={markDownRenderers}\n        source={newText}\n        escapeHtml={true}\n        unwrapDisallowed={true}\n        transformLinkUri={(uri) => (uri.startsWith('app://') ? uri : ReactMarkdown.uriTransformer(uri))}\n      />\n    </div>\n  );\n};\n", "import React, { useState, FC } from 'react';\nimport { Icon } from './Icon';\n\nexport type NumberProps = {\n  /** The name of the number */\n  name: string;\n  /** The initial integer value */\n  value: string | number;\n};\n\n/**\n * Mobile friendly number input\n */\nexport const Number: FC<NumberProps> = ({ name, value }) => {\n  const [state, setState] = useState(parseInt(`${value}`, 10) || 0);\n\n  return (\n    <div className=\"mml-number\">\n      <input name={name} value={state} type=\"hidden\" />\n      <span className=\"mml-btn mml-btn--floating mml-btn--icon mml-number__dec\" onClick={() => setState(state - 1)}>\n        <Icon name=\"remove\" />\n      </span>\n      <span className=\"mml-number__count\">{state}</span>\n      <span className=\"mml-btn mml-btn--floating mml-btn--icon mml-number__inc\" onClick={() => setState(state + 1)}>\n        <Icon name=\"add\" />\n      </span>\n    </div>\n  );\n};\n", "import React, { FC, ReactElement } from 'react';\n\nimport { ColProps } from './Col';\n\nexport type RowProps = {\n  /** The children of a row must be columns */\n  children?: ReactElement<ColProps>[] | ReactElement<ColProps>;\n};\n\nexport const Row: FC<RowProps> = ({ children }) => {\n  return <div className=\"mml-row\">{children}</div>;\n};\n", "import React, { useState, useRef, useCallback, useEffect, FC } from 'react';\nimport { Virtuoso } from 'react-virtuoso';\nimport { Dayjs } from 'dayjs';\nimport { DatePickerProps } from './DatePicker';\n\nexport type DatePickerSelectProps = DatePickerSelectReadyProps & {\n  itemClassName?: string;\n  getItemData: (props: DatePickerSelectItemProps) => DatePickerItemData;\n};\n\n/**\n * Basic shape of DatePickerSelect extended by wrapper components as DatePickerDate and DatePickerTime\n */\nexport type DatePickerSelectReadyProps = Pick<DatePickerProps, 'icalFilter'> & {\n  format: string;\n  interval: number;\n  onChange: (value: Dayjs) => void;\n  value: Dayjs;\n};\n\n/**\n * Inside Virtuoso select items need an idx to indicate their position\n */\nexport type DatePickerSelectItemProps = {\n  format: string;\n  idx: number;\n  interval: number;\n  value: Dayjs;\n};\n\n/**\n * The data needed by each datepicker select item\n */\nexport type DatePickerItemData = {\n  displayValue: string;\n  idx: number;\n  isSelected: (currentValue: Dayjs) => boolean;\n  value: Dayjs;\n};\n\nconst ITEMS_PER_PAGE = 40;\nconst VERTICAL_COMPENSATION = 3;\nconst INITIAL_INDEX = ITEMS_PER_PAGE;\nconst VIRTUOSO_START_INDEX = 10000;\n\n/**\n * DatePicker select\n */\nexport const DatePickerSelect: FC<DatePickerSelectProps> = (props) => {\n  const { onChange, icalFilter, getItemData, itemClassName, interval, format, value } = props;\n\n  // Generate date items\n  const generateItems = useCallback(\n    (quantity: number, firstIdx: number) => {\n      return Array(quantity)\n        .fill(true)\n        .map((_, idx) => getItemData({ interval, format, value, idx: firstIdx + idx }))\n        .filter((newItem) => !icalFilter || (icalFilter && icalFilter(newItem.value)));\n    },\n    [interval, format, value, icalFilter, getItemData],\n  );\n\n  const [items, setItems] = useState<DatePickerItemData[]>(generateItems(ITEMS_PER_PAGE * 2, -ITEMS_PER_PAGE));\n  const [firstItemIndex, setFirstItemIndex] = useState(VIRTUOSO_START_INDEX);\n\n  const initialIndexOffset = useRef(INITIAL_INDEX);\n  const [selectedIdx, setSelectedIdx] = useState<number | null>(null);\n\n  const handleClick = useCallback(\n    (item: DatePickerItemData) => {\n      onChange(item.value);\n\n      const firstItemIndex = initialIndexOffset.current || 0;\n      let nextFirstItemIdx = firstItemIndex - INITIAL_INDEX - ITEMS_PER_PAGE;\n      const missingTopItems = nextFirstItemIdx - item.idx + VERTICAL_COMPENSATION;\n\n      // prepend date items, when the selected date's index is too low we prepend\n      // some date options so that it will remain vertically centered in the middle\n      if (missingTopItems >= 0) {\n        nextFirstItemIdx -= missingTopItems;\n        initialIndexOffset.current -= firstItemIndex - missingTopItems;\n        setItems((items) => [...generateItems(missingTopItems, nextFirstItemIdx), ...items]);\n      }\n      setSelectedIdx(item.idx);\n    },\n    [setItems, generateItems, initialIndexOffset, onChange],\n  );\n\n  const appendItems = useCallback(\n    (lastItemIndex: number) => {\n      setItems((items) => [...items, ...generateItems(ITEMS_PER_PAGE, lastItemIndex)]);\n    },\n    [setItems, generateItems],\n  );\n\n  // @see https://git.io/JIUuo\n  const prependItems = useCallback(() => {\n    const firstItemIndex = initialIndexOffset.current || 0;\n    const nextFirstItemIdx = firstItemIndex - INITIAL_INDEX - ITEMS_PER_PAGE;\n    if (initialIndexOffset) {\n      initialIndexOffset.current -= ITEMS_PER_PAGE;\n    }\n    setItems((items) => [...generateItems(ITEMS_PER_PAGE, nextFirstItemIdx), ...items]);\n    setFirstItemIndex(firstItemIndex - ITEMS_PER_PAGE);\n    return false;\n  }, [setItems, generateItems, initialIndexOffset]);\n\n  // on mount check if there is a selected value and save its idx in state\n  useEffect(() => {\n    if (value) {\n      let initialSelectedIdx = null;\n      for (let i = 0; i < items.length; i++) {\n        if (items[i].isSelected(value)) {\n          initialSelectedIdx = items[i].idx;\n          break;\n        }\n      }\n      setSelectedIdx(initialSelectedIdx);\n    }\n  }, []); // eslint-disable-line\n\n  return (\n    <Virtuoso\n      data={items}\n      firstItemIndex={firstItemIndex}\n      itemContent={(_, item) => (\n        <div\n          className={\n            itemClassName + ` mml-datepicker__item ${item.idx === selectedIdx ? 'mml-datepicker__item--selected' : ''}`\n          }\n          onClick={() => handleClick(item)}\n        >\n          {item.displayValue}\n        </div>\n      )}\n      endReached={appendItems}\n      startReached={prependItems}\n    />\n  );\n};\n", "import React, { FC } from 'react';\nimport dayjs, { Dayjs } from 'dayjs';\n\nimport { DatePickerProps } from './DatePicker';\nimport { DatePickerSelect, DatePickerSelectReadyProps, DatePickerSelectProps } from './DatePickerSelect';\n\nexport type DatePickerDateProps = DatePickerSelectReadyProps & {\n  format: NonNullable<DatePickerProps['dateFormat']>;\n  interval: NonNullable<DatePickerProps['dateInterval']>;\n};\n\n/**\n * Get item data\n */\nconst getItemData: DatePickerSelectProps['getItemData'] = (props) => {\n  const { idx, interval, value, format } = props;\n  const newValue =\n    idx >= 0\n      ? dayjs(value).add(idx * (interval * 24), 'hour')\n      : dayjs(value).subtract(idx * (interval * 24) * -1, 'hour');\n\n  return {\n    idx,\n    value: newValue,\n    displayValue: dayjs(newValue).format(format),\n    isSelected: (currentValue: Dayjs) =>\n      dayjs(newValue).isSame(interval === 1 ? dayjs(currentValue) : dayjs(currentValue).add(interval, 'day'), 'date'),\n  };\n};\n\n/**\n * DatePicker date\n */\nexport const DatePickerDate: FC<DatePickerDateProps> = (props) => (\n  <div className=\"mml-datepicker__select mml-datepicker__date\">\n    <DatePickerSelect {...props} itemClassName=\"mml-datepicker__item--day\" getItemData={getItemData} />\n  </div>\n);\n", "import React, { FC } from 'react';\nimport dayjs, { Dayjs } from 'dayjs';\nimport isBetween from 'dayjs/plugin/isBetween';\n\nimport { DatePickerProps } from './DatePicker';\nimport { DatePickerSelect, DatePickerSelectProps, DatePickerSelectReadyProps } from './DatePickerSelect';\n\ndayjs.extend(isBetween);\n\nexport type DatePickerTimeProps = DatePickerSelectReadyProps & {\n  format: NonNullable<DatePickerProps['timeFormat']>;\n  interval: NonNullable<DatePickerProps['timeInterval']>;\n};\n\n/**\n * Get item data\n */\nconst getItemData: DatePickerSelectProps['getItemData'] = (props) => {\n  const { idx, interval, value, format } = props;\n  const newValue =\n    idx >= 0 ? dayjs(value).add(idx * interval, 'minute') : dayjs(value).subtract(idx * -1 * interval, 'minute');\n\n  return {\n    idx,\n    value: newValue,\n    displayValue: dayjs(newValue).format(format),\n    isSelected: (currentValue: Dayjs) =>\n      dayjs(newValue).isBetween(currentValue, dayjs(currentValue).add(interval - 1, 'minute'), 'minute', '[]'),\n  };\n};\n\n/**\n * DatePicker time\n */\nexport const DatePickerTime: FC<DatePickerTimeProps> = (props) => (\n  <div className=\"mml-datepicker__select mml-datepicker__time\">\n    <DatePickerSelect {...props} itemClassName=\"mml-datepicker__item--time\" getItemData={getItemData} />\n  </div>\n);\n", "import React, { useState, FC } from 'react';\nimport { Dayjs } from 'dayjs';\n\nimport { DatePickerDate } from './DatePickerDate';\nimport { DatePickerTime } from './DatePickerTime';\n\nexport type DatePickerProps = {\n  /** The scheduler name attached to hidden input */\n  name: string;\n  /** The selected date time */\n  selected: Dayjs;\n  /** Interval in days for time selection */\n  dateInterval: number;\n  /**  Interval in minutes for time selection */\n  timeInterval: number;\n  /** Show only the date picker(without time picker) */\n  fullDay: boolean;\n  /** Date format, see [dayjs docs](https://day.js.org/docs/en/display/format) */\n  dateFormat: string;\n  /** Time format, see [dayjs docs](https://day.js.org/docs/en/display/format) */\n  timeFormat: string;\n  /** Filter dates, it should return a boolean */\n  icalFilter: (date: Dayjs) => boolean;\n};\n\nexport const DatePicker: FC<DatePickerProps> = ({\n  name,\n  selected,\n  dateInterval,\n  timeInterval,\n  dateFormat,\n  timeFormat,\n  fullDay,\n  icalFilter,\n}) => {\n  const [date, setDate] = useState(selected);\n\n  const handleChangeDate = (value: Dayjs) => {\n    setDate((prevDate) =>\n      prevDate\n        .set('date', value.get('date'))\n        .set('month', value.get('month'))\n        .set('year', value.get('year')),\n    );\n  };\n\n  const handleChangeTime = (value: Dayjs) => {\n    setDate((prevDate) => prevDate.set('minute', value.get('minute')).set('hour', value.get('hour')));\n  };\n\n  return (\n    <div className={`mml-datepicker mml-datepicker--${fullDay ? 'single' : 'double'}`}>\n      <input name={name} value={date.toISOString()} type=\"hidden\" />\n\n      <DatePickerDate\n        icalFilter={icalFilter}\n        format={dateFormat}\n        value={date}\n        onChange={handleChangeDate}\n        interval={dateInterval}\n      />\n\n      {!fullDay && (\n        <DatePickerTime\n          icalFilter={icalFilter}\n          format={timeFormat}\n          value={date}\n          onChange={handleChangeTime}\n          interval={timeInterval}\n        />\n      )}\n    </div>\n  );\n};\n", "import React, { useState, useEffect, FC } from 'react';\n// @ts-ignore\nimport IcalExpander from 'ical-expander';\nimport dayjs, { Dayjs } from 'dayjs';\n\nimport { DatePicker } from './DatePicker';\nimport { Card } from './Card';\nimport { CardHeader } from './CardHeader';\nimport { CardBody } from './CardBody';\nimport { Error as ErrorComponent } from './Error';\nimport { Loading as LoadingComponent } from './Loading';\n\nexport type SchedulerProps = {\n  /**\n   * The scheduler name attached to hidden input\n   */\n  name: string;\n  /**\n   * The selected date, it must be a valid parseable date string\n   */\n  selected?: string;\n  /**\n   * Interval in days for day selection\n   * @default 1\n   */\n  dateInterval?: number;\n  /**\n   * Interval in minutes for time selection\n   * @default 30\n   */\n  timeInterval?: number;\n  /**\n   * Date format, see [dayjs docs](https://day.js.org/docs/en/display/format)\n   * @default 'ddd MMM DD'\n   */\n  dateFormat?: string;\n  /**\n   * Time format, see [dayjs docs](https://day.js.org/docs/en/display/format)\n   * @default 'hh:mm A'\n   */\n  timeFormat?: string;\n  /**\n   * The duration of the event in minutes, used to check availability with ical\n   * @default 30\n   */\n  duration?: number;\n  /**\n   * ICal availability public URL\n   */\n  icalAvailability?: string;\n  /**\n   * Show only the date picker(without time picker) if events lasts a whole day\n   * @default false\n   */\n  fullDay?: boolean;\n};\n\nexport type ICalFilter = (start?: Dayjs) => boolean;\n\nconst setupIcalFilter = async (icalURL: string, duration: number) => {\n  const response = await fetch(icalURL, { method: 'GET', redirect: 'follow', credentials: 'same-origin' });\n  const body = await response.text();\n  if (!response.ok) throw new Error(body);\n\n  const icalExpander = new IcalExpander({ ics: body, maxIterations: 10 });\n\n  return () => (start?: Dayjs) => {\n    if (!start) return true;\n    const { events } = icalExpander.between(start.toDate(), start.add(duration, 'minute').toDate());\n    return !events.length;\n  };\n};\n\nexport const Scheduler: FC<SchedulerProps> = ({\n  name,\n  selected,\n  icalAvailability,\n  duration = 30,\n  dateInterval = 1,\n  timeInterval = 30,\n  dateFormat = 'ddd MMM DD',\n  timeFormat = 'hh:mm A',\n  fullDay = false,\n}) => {\n  const [loading, setLoading] = useState(false);\n  const [error, setError] = useState('');\n  const [icalFilter, setIcalFilter] = useState<ICalFilter>(() => () => true);\n\n  useEffect(() => {\n    if (!icalAvailability) return;\n\n    setLoading(true);\n    setupIcalFilter(icalAvailability, duration)\n      .then(setIcalFilter)\n      .catch((err) => {\n        console.warn('loading ical failed', { icalAvailability, err });\n        setError('iCal availability could not be loaded');\n      })\n      .finally(() => setLoading(false));\n  }, [icalAvailability, duration]);\n\n  return (\n    <Card className=\"mml-scheduler\">\n      <CardHeader icon=\"date_range\" text=\"Scheduler\" />\n      <CardBody>\n        {error && !loading && <ErrorComponent error={`Failed, error: ${error}`} />}\n        {!error && loading && <LoadingComponent loading={true} text=\"Loading availability\" />}\n        {!error && !loading && (\n          <DatePicker\n            name={name}\n            selected={selected ? dayjs(selected) : dayjs().startOf('hour')}\n            dateInterval={dateInterval}\n            timeInterval={timeInterval}\n            dateFormat={dateFormat}\n            timeFormat={timeFormat}\n            fullDay={fullDay}\n            icalFilter={icalFilter}\n          />\n        )}\n      </CardBody>\n    </Card>\n  );\n};\n", "import React, { FC } from 'react';\n\nexport type SuccessProps = { success?: string };\n\nexport const Success: FC<SuccessProps> = ({ success }) => {\n  if (success) return <div className=\"mml-success\">{success}</div>;\n\n  return null;\n};\n", "import React, { FC } from 'react';\n\nexport type TextProps = {\n  /** Text to render */\n  text: string;\n  /** Additional class name */\n  className?: string;\n};\n\n/**\n * Simple paragraph text element\n */\nexport const Text: FC<TextProps> = ({ text, className = '' }) => {\n  return <div className={`mml-text ${className}`.trim()}>{text}</div>;\n};\n", "import React, { ReactElement } from 'react';\n\nimport { MMLTag } from './MMLTag';\nimport {\n  AddToCalendar,\n  Button,\n  ButtonList,\n  Carousel,\n  CarouselItem,\n  Col,\n  Icon,\n  Image,\n  Input,\n  MD,\n  Scheduler,\n  Text,\n  Row,\n  Number,\n} from '../components';\n\nexport type ConvertorType = (tag: MMLTag, children?: ReactElement[]) => ReactElement;\n\n/**\n * The converters maps MML tags to react nodes\n * Every converter is passed the MML tag as well as the children (as React nodes)\n */\nexport const converters = {\n  button: (tag: MMLTag) => {\n    return (\n      <Button\n        {...tag.attributes}\n        key={tag.key}\n        text={tag.getText()}\n        name={tag.attributes.name}\n        value={tag.attributes.value}\n      />\n    );\n  },\n  button_list: (tag: MMLTag, children?: JSX.Element[]) => {\n    return (\n      <ButtonList {...tag.attributes} key={tag.key}>\n        {children}\n      </ButtonList>\n    );\n  },\n  input: (tag: MMLTag) => {\n    return <Input {...tag.attributes} key={tag.key} name={tag.attributes.name} value={tag.attributes.value} />;\n  },\n  add_to_calendar: (tag: MMLTag) => {\n    return (\n      <AddToCalendar\n        {...tag.attributes}\n        key={tag.key}\n        title={tag.attributes.title}\n        start={tag.attributes.start}\n        end={tag.attributes.end}\n      />\n    );\n  },\n  col: (tag: MMLTag, children?: JSX.Element[]) => {\n    return (\n      <Col {...tag.attributes} key={tag.key}>\n        {children}\n      </Col>\n    );\n  },\n  row: (tag: MMLTag, children?: JSX.Element[]) => {\n    return (\n      <Row {...tag.attributes} key={tag.key}>\n        {children}\n      </Row>\n    );\n  },\n  icon: (tag: MMLTag) => {\n    return <Icon {...tag.attributes} key={tag.key} name={tag.attributes.name} />;\n  },\n  image: (tag: MMLTag) => {\n    return <Image {...tag.attributes} key={tag.key} src={tag.attributes.src} />;\n  },\n  md: (tag: MMLTag) => {\n    return <MD {...tag.attributes} key={tag.key} text={tag.getText()} />;\n  },\n  text: (tag: MMLTag) => {\n    return <Text {...tag.attributes} key={tag.key} text={tag.getText()} />;\n  },\n  scheduler: (tag: MMLTag) => {\n    return (\n      <Scheduler\n        {...tag.attributes}\n        key={tag.key}\n        name={tag.attributes.name}\n        dateInterval={parseInt(tag.attributes.dateInterval, 10) || 1} // default to 1 day\n        timeInterval={parseInt(tag.attributes.timeInterval, 10) || 30} // default to 30 minutes\n        duration={parseInt(tag.attributes.duration, 10) || 30} // default to 30 minutes\n        selected={tag.attributes.selected}\n        fullDay={tag.attributes.fullDay === 'true'}\n        icalAvailability={tag.attributes.icalAvailability}\n      />\n    );\n  },\n  carousel: (tag: MMLTag, children?: JSX.Element[]) => {\n    return (\n      <Carousel slideWidth={tag.attributes.slideWidth} {...tag.attributes} key={tag.key}>\n        {children}\n      </Carousel>\n    );\n  },\n  item: (tag: MMLTag, children?: JSX.Element[]) => {\n    return (\n      <CarouselItem {...tag.attributes} key={tag.key}>\n        {children}\n      </CarouselItem>\n    );\n  },\n  number: (tag: MMLTag) => {\n    return <Number {...tag.attributes} key={tag.key} name={tag.attributes.name} value={tag.attributes.value} />;\n  },\n};\n", "import { ReactElement } from 'react';\nimport { XmlElement } from '@rgrove/parse-xml';\n\nimport { MMLTag } from './MMLTag';\nimport { converters as defaultConverters, ConvertorType } from './converters';\n\n/** The type attribute of <mml> determine how its inner content is visually displayed */\nexport type RootType = 'card';\n\n/**\n * Tree - The tree object for MML tags\n */\nexport class Tree {\n  converters: Record<string, ConvertorType>;\n  node: XmlElement;\n  children: MMLTag[];\n  reactElements: ReactElement[];\n  name?: string;\n  type?: RootType;\n\n  constructor(node: XmlElement, children: MMLTag[], customConvertors?: Record<string, ConvertorType>) {\n    this.converters = { ...defaultConverters, ...customConvertors };\n    this.node = node;\n    this.children = children;\n    this.reactElements = this.toReact();\n\n    this.name = node.attributes.name;\n    this.type = node.attributes.type as RootType;\n  }\n\n  /**\n   * convert all nodes to react and maintain the hierarchy\n   */\n  toReact(parent: Tree | MMLTag = this) {\n    const reactNodes: ReactElement[] = [];\n\n    (parent.children || []).forEach((child, i) => {\n      const converter = this.converters[child.name];\n      if (!converter || !Object.hasOwnProperty.call(this.converters, child.name)) {\n        throw Error(\n          `Converter not found for tag ${child.name}, Available converters are ${Object.keys(this.converters)}`,\n        );\n      }\n\n      const children = this.toReact(child);\n      child.key = `tag-${child.name}-position-${i}`;\n      reactNodes.push(converter(child, children));\n    });\n\n    return reactNodes;\n  }\n}\n", "import parseXml from '@rgrove/parse-xml';\n\nimport { ConvertorType } from './converters';\nimport { MMLTag } from './MMLTag';\nimport { Tree } from './tree';\n\n/**\n * SourceToXML - Takes an MML string and converts it to XML nodes\n *\n * @param {string} source MML tag string\n *\n * @returns {array} an Array of XML nodes\n */\nexport function SourceToXML(source: string) {\n  let src = source.trim();\n  // the wrapping MML tags are optional, for parsing simplicity we automatically add them if they are not already there\n  if (!src.startsWith('<mml')) src = `<mml>${source}</mml>`;\n\n  // emulate HTML handling of & escaping\n  const unescapedAmps = /&(?!amp;|lt;|gt;)/g;\n  src = src.replace(unescapedAmps, '&amp;');\n\n  // convert the string to XML nodes\n  // this library is relatively lightweight and doesn't do a ton of validation\n  return parseXml(src);\n}\n\nfunction convertNodes(nodes: parseXml.XmlNode[]) {\n  return nodes.reduce((acc: MMLTag[], node: parseXml.XmlNode) => {\n    const element = node as parseXml.XmlElement;\n    let children;\n    if (element.children) children = convertNodes(element.children);\n\n    let { name } = element;\n    if ((node as parseXml.XmlText).type === 'text') {\n      if ((node as parseXml.XmlText).text.trim().length) name = 'text';\n      else return acc; // skip empty text elements\n    }\n\n    acc.push(new MMLTag(name, node as parseXml.XmlElement | parseXml.XmlText, children));\n    return acc;\n  }, []);\n}\n\n/**\n * XMLtoMMLTree - Takes an array of XML nodes and converts it into an MML Tree\n *\n * @param {type} XMLNodes an array of XML nodes\n *\n * @returns {MMLTree} The MML tree\n */\nexport function XMLtoMMLTree(document: parseXml.XmlDocument, customConvertors?: Record<string, ConvertorType>) {\n  if (!document || !document.children || !document.children.length) throw new Error('bad input');\n\n  const mmlNode = document.children[0] as parseXml.XmlElement;\n  if (mmlNode.name !== 'mml') throw new Error('missing mml tag');\n\n  return new Tree(mmlNode, convertNodes(mmlNode.children), customConvertors);\n}\n\n/**\n * Takes an MML string and returns an MML Tree\n *\n * @param {string} source MML tag string\n *\n *  @returns {Tree} An MML Tree\n */\nexport function Parse(source: string, customConvertors?: Record<string, ConvertorType>) {\n  const XMLNodes = SourceToXML(source);\n  return XMLtoMMLTree(XMLNodes, customConvertors);\n}\n", "import React, { useState, useMemo, useCallback, FC, ComponentType, FormEvent } from 'react';\n\nimport { Parse, ConvertorType } from '../parser';\nimport { Loading as LoadingComponent, LoadingProps } from '../components/Loading';\nimport { Error as ErrorComponent, ErrorProps } from '../components/Error';\nimport { Success as SuccessComponent, SuccessProps } from '../components/Success';\n\nexport type MMLProps = {\n  /** The MML string source to render */\n  source: string;\n  /** The convert config allows you to overwrite the MML to react conversion */\n  converters?: Record<string, ConvertorType>;\n  /** The submit callback whenever a form is submitted, submit is expected to return a promise */\n  onSubmit?: (data: Record<string, any>) => Promise<any> | any;\n  /** Select a theme from built in available themes, it will be added as a className to the container(root) div */\n  theme?:\n    | 'base-dark'\n    | 'messaging-light'\n    | 'messaging-dark'\n    | 'team-light'\n    | 'team-dark'\n    | 'commerce-light'\n    | 'commerce-dark'\n    | 'livestream-light'\n    | 'livestream-dark'\n    | string;\n  /** Custom classname, appended to wrapper classname */\n  className?: string;\n  /** The Loading component, accepts null to render nothing */\n  Loading?: ComponentType<LoadingProps> | null;\n  /** The error component, accepts null to render nothing */\n  Error?: ComponentType<ErrorProps> | null;\n  /** The success message component, accepts null to render nothing */\n  Success?: ComponentType<SuccessProps> | null;\n};\n\n/**\n * MML root component\n */\nexport const MML: FC<MMLProps> = ({\n  source,\n  onSubmit,\n  converters,\n  theme = '',\n  className = '',\n  Loading = LoadingComponent,\n  Error = ErrorComponent,\n  Success = SuccessComponent,\n}) => {\n  const [error, setError] = useState('');\n  const [submitState, setSubmitState] = useState({ loading: false, error: '', success: '' });\n  const tree = useMemo(() => {\n    try {\n      return Parse(source, converters);\n    } catch (e) {\n      console.warn('mml parsing error: ', source, e);\n      setError(\"This chat message has invalid formatting and can't be shown\");\n      return null;\n    }\n  }, [source, converters]);\n\n  const handleSubmit = useCallback(\n    async (event: FormEvent<HTMLFormElement>) => {\n      event.preventDefault();\n\n      const state: Record<string, any> = {};\n      if (tree?.name) state.mml_name = tree.name; // include mml_name in the data\n      new FormData(event.currentTarget).forEach((value, key) => {\n        state[key] = value;\n      });\n\n      if (!onSubmit) return console.warn('Forgot to pass onSubmit prop to <MML/>? payload:', state);\n\n      try {\n        setSubmitState({ loading: true, error: '', success: '' });\n        await onSubmit(state);\n        setSubmitState({ loading: false, error: '', success: 'submitted' });\n      } catch (e) {\n        setSubmitState({ loading: false, error: 'Failed to send the request. Please try again.', success: '' });\n      }\n    },\n    [onSubmit, tree],\n  );\n\n  return (\n    <div className={`mml-container ${theme} ${className}`} data-testid=\"mml-container\">\n      {error ? (\n        <div className=\"mml-wrap\">{Error && <Error error={error} />}</div>\n      ) : (\n        <form onSubmit={handleSubmit} className=\"mml-wrap\" data-testid=\"mml-form\">\n          {tree?.type ? <div className=\"mml-card\">{tree?.reactElements}</div> : tree?.reactElements}\n          {submitState.loading && Loading && <Loading loading={submitState.loading} />}\n          {submitState.success && Success && <Success success={submitState.success} />}\n          {submitState.error && Error && <Error error={submitState.error} />}\n        </form>\n      )}\n    </div>\n  );\n};\n", "\n'use strict'\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./mml-react.cjs.production.min.js')\n} else {\n  module.exports = require('./mml-react.cjs.development.js')\n}\n", "export * from './components';\nexport * from './context';\nexport * from './i18n';\nexport * from './store';\nexport * from './types';\nexport * from './utils';\n", "import React, { useMemo } from 'react';\nimport type { ReactPlayerProps } from 'react-player';\nimport type { Attachment as StreamAttachment } from 'stream-chat';\n\nimport {\n  GroupedRenderedAttachment,\n  isAudioAttachment,\n  isFileAttachment,\n  isMediaAttachment,\n  isScrapedContent,\n  isUploadedImage,\n  isVoiceRecordingAttachment,\n} from './utils';\n\nimport {\n  AudioContainer,\n  CardContainer,\n  FileContainer,\n  GalleryContainer,\n  ImageContainer,\n  MediaContainer,\n  UnsupportedAttachmentContainer,\n  VoiceRecordingContainer,\n} from './AttachmentContainer';\n\nimport type { AttachmentActionsProps } from './AttachmentActions';\nimport type { AudioProps } from './Audio';\nimport type { VoiceRecordingProps } from './VoiceRecording';\nimport type { CardProps } from './Card';\nimport type { FileAttachmentProps } from './FileAttachment';\nimport type { GalleryProps, ImageProps } from '../Gallery';\nimport type { UnsupportedAttachmentProps } from './UnsupportedAttachment';\nimport type { ActionHandlerReturnType } from '../Message/hooks/useActionHandler';\n\nimport type { DefaultStreamChatGenerics } from '../../types/types';\n\nconst CONTAINER_MAP = {\n  audio: AudioContainer,\n  card: CardContainer,\n  file: FileContainer,\n  media: MediaContainer,\n  unsupported: UnsupportedAttachmentContainer,\n  voiceRecording: VoiceRecordingContainer,\n} as const;\n\nexport const ATTACHMENT_GROUPS_ORDER = [\n  'card',\n  'gallery',\n  'image',\n  'media',\n  'audio',\n  'voiceRecording',\n  'file',\n  'unsupported',\n] as const;\n\nexport type AttachmentProps<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n  /** The message attachments to render, see [attachment structure](https://getstream.io/chat/docs/javascript/message_format/?language=javascript) **/\n  attachments: StreamAttachment<StreamChatGenerics>[];\n  /**\tThe handler function to call when an action is performed on an attachment, examples include canceling a \\/giphy command or shuffling the results. */\n  actionHandler?: ActionHandlerReturnType;\n  /** Custom UI component for displaying attachment actions, defaults to and accepts same props as: [AttachmentActions](https://github.com/GetStream/stream-chat-react/blob/master/src/components/Attachment/AttachmentActions.tsx) */\n  AttachmentActions?: React.ComponentType<AttachmentActionsProps<StreamChatGenerics>>;\n  /** Custom UI component for displaying an audio type attachment, defaults to and accepts same props as: [Audio](https://github.com/GetStream/stream-chat-react/blob/master/src/components/Attachment/Audio.tsx) */\n  Audio?: React.ComponentType<AudioProps<StreamChatGenerics>>;\n  /** Custom UI component for displaying a card type attachment, defaults to and accepts same props as: [Card](https://github.com/GetStream/stream-chat-react/blob/master/src/components/Attachment/Card.tsx) */\n  Card?: React.ComponentType<CardProps>;\n  /** Custom UI component for displaying a file type attachment, defaults to and accepts same props as: [File](https://github.com/GetStream/stream-chat-react/blob/master/src/components/Attachment/FileAttachment.tsx) */\n  File?: React.ComponentType<FileAttachmentProps<StreamChatGenerics>>;\n  /** Custom UI component for displaying a gallery of image type attachments, defaults to and accepts same props as: [Gallery](https://github.com/GetStream/stream-chat-react/blob/master/src/components/Gallery/Gallery.tsx) */\n  Gallery?: React.ComponentType<GalleryProps<StreamChatGenerics>>;\n  /** Custom UI component for displaying an image type attachment, defaults to and accepts same props as: [Image](https://github.com/GetStream/stream-chat-react/blob/master/src/components/Gallery/Image.tsx) */\n  Image?: React.ComponentType<ImageProps>;\n  /** Optional flag to signal that an attachment is a displayed as a part of a quoted message */\n  isQuoted?: boolean;\n  /** Custom UI component for displaying a media type attachment, defaults to `ReactPlayer` from 'react-player' */\n  Media?: React.ComponentType<ReactPlayerProps>;\n  /** Custom UI component for displaying unsupported attachment types, defaults to NullComponent */\n  UnsupportedAttachment?: React.ComponentType<UnsupportedAttachmentProps>;\n  /** Custom UI component for displaying an audio recording attachment, defaults to and accepts same props as: [VoiceRecording](https://github.com/GetStream/stream-chat-react/blob/master/src/components/Attachment/VoiceRecording.tsx) */\n  VoiceRecording?: React.ComponentType<VoiceRecordingProps<StreamChatGenerics>>;\n};\n\n/**\n * A component used for rendering message attachments. By default, the component supports: AttachmentActions, Audio, Card, File, Gallery, Image, and Video\n */\nexport const Attachment = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  props: AttachmentProps<StreamChatGenerics>,\n) => {\n  const { attachments } = props;\n\n  const groupedAttachments = useMemo(\n    () => renderGroupedAttachments(props),\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    [attachments],\n  );\n\n  return (\n    <div className='str-chat__attachment-list'>\n      {ATTACHMENT_GROUPS_ORDER.reduce(\n        (acc, groupName) => [...acc, ...groupedAttachments[groupName]],\n        [] as React.ReactNode[],\n      )}\n    </div>\n  );\n};\n\nconst renderGroupedAttachments = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n  attachments,\n  ...rest\n}: AttachmentProps<StreamChatGenerics>): GroupedRenderedAttachment => {\n  const uploadedImages: StreamAttachment<StreamChatGenerics>[] = attachments.filter(\n    (attachment) => isUploadedImage(attachment),\n  );\n\n  const containers = attachments\n    .filter((attachment) => !isUploadedImage(attachment))\n    .reduce<GroupedRenderedAttachment>(\n      (typeMap, attachment) => {\n        const attachmentType = getAttachmentType(attachment);\n\n        const Container = CONTAINER_MAP[attachmentType];\n        typeMap[attachmentType].push(\n          <Container\n            key={`${attachmentType}-${typeMap[attachmentType].length}`}\n            {...rest}\n            attachment={attachment}\n          />,\n        );\n\n        return typeMap;\n      },\n      {\n        audio: [],\n        card: [],\n        file: [],\n        media: [],\n        unsupported: [],\n        // not used in reduce\n        // eslint-disable-next-line sort-keys\n        image: [],\n        // eslint-disable-next-line sort-keys\n        gallery: [],\n        voiceRecording: [],\n      },\n    );\n\n  if (uploadedImages.length > 1) {\n    containers['gallery'] = [\n      <GalleryContainer\n        key='gallery-container'\n        {...rest}\n        attachment={{\n          images: uploadedImages,\n          type: 'gallery',\n        }}\n      />,\n    ];\n  } else if (uploadedImages.length === 1) {\n    containers['image'] = [\n      <ImageContainer key='image-container' {...rest} attachment={uploadedImages[0]} />,\n    ];\n  }\n\n  return containers;\n};\n\nconst getAttachmentType = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  attachment: AttachmentProps<StreamChatGenerics>['attachments'][number],\n): keyof typeof CONTAINER_MAP => {\n  if (isScrapedContent(attachment)) {\n    return 'card';\n  } else if (isMediaAttachment(attachment)) {\n    return 'media';\n  } else if (isAudioAttachment(attachment)) {\n    return 'audio';\n  } else if (isVoiceRecordingAttachment(attachment)) {\n    return 'voiceRecording';\n  } else if (isFileAttachment(attachment)) {\n    return 'file';\n  }\n\n  return 'unsupported';\n};\n", "import { ReactNode } from 'react';\n\nimport type { Attachment } from 'stream-chat';\nimport type { ATTACHMENT_GROUPS_ORDER, AttachmentProps } from './Attachment';\nimport type { DefaultStreamChatGenerics, UnknownType } from '../../types/types';\nimport type {\n  LocalAttachment,\n  LocalAudioAttachment,\n  LocalFileAttachment,\n  LocalImageAttachment,\n  LocalVideoAttachment,\n  LocalVoiceRecordingAttachment,\n  VoiceRecordingAttachment,\n} from '../MessageInput';\n\nexport const SUPPORTED_VIDEO_FORMATS = [\n  'video/mp4',\n  'video/ogg',\n  'video/webm',\n  'video/quicktime',\n];\n\nexport type AttachmentComponentType = (typeof ATTACHMENT_GROUPS_ORDER)[number];\n\nexport type GroupedRenderedAttachment = Record<AttachmentComponentType, ReactNode[]>;\n\nexport type GalleryAttachment<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n  images: Attachment<StreamChatGenerics>[];\n  type: 'gallery';\n};\n\nexport type RenderAttachmentProps<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Omit<AttachmentProps<StreamChatGenerics>, 'attachments'> & {\n  attachment: Attachment<StreamChatGenerics>;\n};\n\nexport type RenderGalleryProps<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Omit<AttachmentProps<StreamChatGenerics>, 'attachments'> & {\n  attachment: GalleryAttachment<StreamChatGenerics>;\n};\n\nexport const isLocalAttachment = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  attachment: UnknownType,\n): attachment is LocalAttachment<StreamChatGenerics> =>\n  !!(attachment.localMetadata as LocalAttachment)?.id;\n\nexport const isScrapedContent = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  attachment: Attachment<StreamChatGenerics>,\n) => attachment.og_scrape_url || attachment.title_link;\n\nexport const isUploadedImage = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  attachment: Attachment<StreamChatGenerics>,\n) => attachment.type === 'image' && !isScrapedContent(attachment);\n\nexport const isLocalImageAttachment = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  attachment: Attachment<StreamChatGenerics> | LocalAttachment<StreamChatGenerics>,\n): attachment is LocalImageAttachment<StreamChatGenerics> =>\n  isUploadedImage(attachment) && isLocalAttachment(attachment);\n\nexport const isGalleryAttachmentType = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  output: Attachment<StreamChatGenerics> | GalleryAttachment<StreamChatGenerics>,\n): output is GalleryAttachment<StreamChatGenerics> => Array.isArray(output.images);\n\nexport const isAudioAttachment = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  attachment: Attachment<StreamChatGenerics> | LocalAttachment<StreamChatGenerics>,\n) => attachment.type === 'audio';\n\nexport const isLocalAudioAttachment = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  attachment: Attachment<StreamChatGenerics> | LocalAttachment<StreamChatGenerics>,\n): attachment is LocalAudioAttachment<StreamChatGenerics> =>\n  isAudioAttachment(attachment) && isLocalAttachment(attachment);\n\nexport const isVoiceRecordingAttachment = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  attachment: Attachment<StreamChatGenerics> | LocalAttachment<StreamChatGenerics>,\n): attachment is VoiceRecordingAttachment => attachment.type === 'voiceRecording';\n\nexport const isLocalVoiceRecordingAttachment = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  attachment: Attachment<StreamChatGenerics> | LocalAttachment<StreamChatGenerics>,\n): attachment is LocalVoiceRecordingAttachment<StreamChatGenerics> =>\n  isVoiceRecordingAttachment(attachment) && isLocalAttachment(attachment);\n\nexport const isFileAttachment = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  attachment: Attachment<StreamChatGenerics> | LocalAttachment<StreamChatGenerics>,\n) =>\n  attachment.type === 'file' ||\n  !!(\n    attachment.mime_type &&\n    SUPPORTED_VIDEO_FORMATS.indexOf(attachment.mime_type) === -1 &&\n    attachment.type !== 'video'\n  );\n\nexport const isLocalFileAttachment = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  attachment: Attachment<StreamChatGenerics> | LocalAttachment<StreamChatGenerics>,\n): attachment is LocalFileAttachment<StreamChatGenerics> =>\n  isFileAttachment(attachment) && isLocalAttachment(attachment);\n\nexport const isMediaAttachment = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  attachment: Attachment<StreamChatGenerics> | LocalAttachment<StreamChatGenerics>,\n) =>\n  (attachment.mime_type &&\n    SUPPORTED_VIDEO_FORMATS.indexOf(attachment.mime_type) !== -1) ||\n  attachment.type === 'video';\n\nexport const isLocalMediaAttachment = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  attachment: Attachment<StreamChatGenerics> | LocalAttachment<StreamChatGenerics>,\n): attachment is LocalVideoAttachment<StreamChatGenerics> =>\n  isMediaAttachment(attachment) && isLocalAttachment(attachment);\n\nexport const isSvgAttachment = (attachment: Attachment) => {\n  const filename = attachment.fallback || '';\n  return filename.toLowerCase().endsWith('.svg');\n};\n\nexport const divMod = (num: number, divisor: number) => [\n  Math.floor(num / divisor),\n  num % divisor,\n];\n\nexport const displayDuration = (totalSeconds?: number) => {\n  if (!totalSeconds || totalSeconds < 0) return '00:00';\n\n  const [hours, hoursLeftover] = divMod(totalSeconds, 3600);\n  const [minutes, seconds] = divMod(hoursLeftover, 60);\n  const roundedSeconds = Math.ceil(seconds);\n\n  const prependHrsZero = hours.toString().length === 1 ? '0' : '';\n  const prependMinZero = minutes.toString().length === 1 ? '0' : '';\n  const prependSecZero = roundedSeconds.toString().length === 1 ? '0' : '';\n  const minSec = `${prependMinZero}${minutes}:${prependSecZero}${roundedSeconds}`;\n\n  return hours ? `${prependHrsZero}${hours}:` + minSec : minSec;\n};\n", "import React, { PropsWithChildren, useLayoutEffect, useRef, useState } from 'react';\nimport ReactPlayer from 'react-player';\nimport clsx from 'clsx';\n\nimport * as linkify from 'linkifyjs';\n\nimport { AttachmentActions as DefaultAttachmentActions } from './AttachmentActions';\nimport { Audio as DefaultAudio } from './Audio';\nimport { VoiceRecording as DefaultVoiceRecording } from './VoiceRecording';\nimport { Gallery as DefaultGallery, ImageComponent as DefaultImage } from '../Gallery';\nimport { Card as DefaultCard } from './Card';\nimport { FileAttachment as DefaultFile } from './FileAttachment';\nimport { UnsupportedAttachment as DefaultUnsupportedAttachment } from './UnsupportedAttachment';\nimport {\n  AttachmentComponentType,\n  GalleryAttachment,\n  isGalleryAttachmentType,\n  isSvgAttachment,\n  RenderAttachmentProps,\n  RenderGalleryProps,\n} from './utils';\n\nimport { useChannelStateContext } from '../../context/ChannelStateContext';\n\nimport type {\n  DefaultStreamChatGenerics,\n  ImageAttachmentConfiguration,\n  VideoAttachmentConfiguration,\n} from '../../types/types';\nimport type { Attachment } from 'stream-chat';\n\nexport type AttachmentContainerProps<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n  attachment: Attachment<StreamChatGenerics> | GalleryAttachment<StreamChatGenerics>;\n  componentType: AttachmentComponentType;\n};\nexport const AttachmentWithinContainer = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n  attachment,\n  children,\n  componentType,\n}: PropsWithChildren<AttachmentContainerProps<StreamChatGenerics>>) => {\n  const isGAT = isGalleryAttachmentType(attachment);\n  let extra = '';\n\n  if (!isGAT) {\n    extra =\n      componentType === 'card' && !attachment?.image_url && !attachment?.thumb_url\n        ? 'no-image'\n        : attachment?.actions?.length\n          ? 'actions'\n          : '';\n  }\n\n  const classNames = clsx(\n    'str-chat__message-attachment str-chat__message-attachment-dynamic-size',\n    {\n      [`str-chat__message-attachment--${componentType}`]: componentType,\n      [`str-chat__message-attachment--${attachment?.type}`]: attachment?.type,\n      [`str-chat__message-attachment--${componentType}--${extra}`]:\n        componentType && extra,\n      'str-chat__message-attachment--svg-image': isSvgAttachment(attachment),\n      'str-chat__message-attachment-with-actions': extra === 'actions',\n    },\n  );\n\n  return <div className={classNames}>{children}</div>;\n};\n\nexport const AttachmentActionsContainer = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n  actionHandler,\n  attachment,\n  AttachmentActions = DefaultAttachmentActions,\n}: RenderAttachmentProps<StreamChatGenerics>) => {\n  if (!attachment.actions?.length) return null;\n\n  return (\n    <AttachmentActions\n      {...attachment}\n      actionHandler={actionHandler}\n      actions={attachment.actions}\n      id={attachment.id || ''}\n      text={attachment.text || ''}\n    />\n  );\n};\n\nfunction getCssDimensionsVariables(url: string) {\n  const cssVars = {\n    '--original-height': 1000000,\n    '--original-width': 1000000,\n  } as Record<string, number>;\n\n  if (linkify.test(url, 'url')) {\n    const urlParams = new URL(url).searchParams;\n    const oh = Number(urlParams.get('oh'));\n    const ow = Number(urlParams.get('ow'));\n    const originalHeight = oh > 1 ? oh : 1000000;\n    const originalWidth = ow > 1 ? ow : 1000000;\n    cssVars['--original-width'] = originalWidth;\n    cssVars['--original-height'] = originalHeight;\n  }\n\n  return cssVars;\n}\n\nexport const GalleryContainer = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n  attachment,\n  Gallery = DefaultGallery,\n}: RenderGalleryProps<StreamChatGenerics>) => {\n  const imageElements = useRef<HTMLElement[]>([]);\n  const { imageAttachmentSizeHandler } = useChannelStateContext();\n  const [attachmentConfigurations, setAttachmentConfigurations] = useState<\n    ImageAttachmentConfiguration[]\n  >([]);\n\n  useLayoutEffect(() => {\n    if (\n      imageElements.current &&\n      imageElements.current.every((element) => !!element) &&\n      imageAttachmentSizeHandler\n    ) {\n      const newConfigurations: ImageAttachmentConfiguration[] = [];\n      imageElements.current.forEach((element, i) => {\n        const config = imageAttachmentSizeHandler(attachment.images[i], element);\n        newConfigurations.push(config);\n      });\n      setAttachmentConfigurations(newConfigurations);\n    }\n  }, [imageElements, imageAttachmentSizeHandler, attachment]);\n\n  const images = attachment.images.map((image, i) => ({\n    ...image,\n    previewUrl: attachmentConfigurations[i]?.url || 'about:blank',\n    style: getCssDimensionsVariables(\n      attachment.images[i]?.image_url || attachment.images[i]?.thumb_url || '',\n    ),\n  }));\n\n  return (\n    <AttachmentWithinContainer attachment={attachment} componentType='gallery'>\n      <Gallery images={images || []} innerRefs={imageElements} key='gallery' />\n    </AttachmentWithinContainer>\n  );\n};\n\nexport const ImageContainer = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  props: RenderAttachmentProps<StreamChatGenerics>,\n) => {\n  const { attachment, Image = DefaultImage } = props;\n  const componentType = 'image';\n  const imageElement = useRef<HTMLImageElement>(null);\n  const { imageAttachmentSizeHandler } = useChannelStateContext();\n  const [attachmentConfiguration, setAttachmentConfiguration] = useState<\n    ImageAttachmentConfiguration | undefined\n  >(undefined);\n\n  useLayoutEffect(() => {\n    if (imageElement.current && imageAttachmentSizeHandler) {\n      const config = imageAttachmentSizeHandler(attachment, imageElement.current);\n      setAttachmentConfiguration(config);\n    }\n  }, [imageElement, imageAttachmentSizeHandler, attachment]);\n\n  const imageConfig = {\n    ...attachment,\n    previewUrl: attachmentConfiguration?.url || 'about:blank',\n    style: getCssDimensionsVariables(attachment.image_url || attachment.thumb_url || ''),\n  };\n\n  if (attachment.actions && attachment.actions.length) {\n    return (\n      <AttachmentWithinContainer attachment={attachment} componentType={componentType}>\n        <div className='str-chat__attachment'>\n          <Image {...imageConfig} innerRef={imageElement} />\n          <AttachmentActionsContainer {...props} />\n        </div>\n      </AttachmentWithinContainer>\n    );\n  }\n\n  return (\n    <AttachmentWithinContainer attachment={attachment} componentType={componentType}>\n      <Image {...imageConfig} innerRef={imageElement} />\n    </AttachmentWithinContainer>\n  );\n};\n\nexport const CardContainer = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  props: RenderAttachmentProps<StreamChatGenerics>,\n) => {\n  const { attachment, Card = DefaultCard } = props;\n  const componentType = 'card';\n\n  if (attachment.actions && attachment.actions.length) {\n    return (\n      <AttachmentWithinContainer attachment={attachment} componentType={componentType}>\n        <div className='str-chat__attachment'>\n          <Card {...attachment} />\n          <AttachmentActionsContainer {...props} />\n        </div>\n      </AttachmentWithinContainer>\n    );\n  }\n\n  return (\n    <AttachmentWithinContainer attachment={attachment} componentType={componentType}>\n      <Card {...attachment} />\n    </AttachmentWithinContainer>\n  );\n};\n\nexport const FileContainer = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n  attachment,\n  File = DefaultFile,\n}: RenderAttachmentProps<StreamChatGenerics>) => {\n  if (!attachment.asset_url) return null;\n\n  return (\n    <AttachmentWithinContainer attachment={attachment} componentType='file'>\n      <File attachment={attachment} />\n    </AttachmentWithinContainer>\n  );\n};\nexport const AudioContainer = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n  attachment,\n  Audio = DefaultAudio,\n}: RenderAttachmentProps<StreamChatGenerics>) => (\n  <AttachmentWithinContainer attachment={attachment} componentType='audio'>\n    <div className='str-chat__attachment'>\n      <Audio og={attachment} />\n    </div>\n  </AttachmentWithinContainer>\n);\n\nexport const VoiceRecordingContainer = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n  attachment,\n  isQuoted,\n  VoiceRecording = DefaultVoiceRecording,\n}: RenderAttachmentProps<StreamChatGenerics>) => (\n  <AttachmentWithinContainer attachment={attachment} componentType='voiceRecording'>\n    <div className='str-chat__attachment'>\n      <VoiceRecording attachment={attachment} isQuoted={isQuoted} />\n    </div>\n  </AttachmentWithinContainer>\n);\n\nexport const MediaContainer = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  props: RenderAttachmentProps<StreamChatGenerics>,\n) => {\n  const { attachment, Media = ReactPlayer } = props;\n  const componentType = 'media';\n  const { shouldGenerateVideoThumbnail, videoAttachmentSizeHandler } =\n    useChannelStateContext();\n  const videoElement = useRef<HTMLDivElement>(null);\n  const [attachmentConfiguration, setAttachmentConfiguration] =\n    useState<VideoAttachmentConfiguration>();\n\n  useLayoutEffect(() => {\n    if (videoElement.current && videoAttachmentSizeHandler) {\n      const config = videoAttachmentSizeHandler(\n        attachment,\n        videoElement.current,\n        shouldGenerateVideoThumbnail,\n      );\n      setAttachmentConfiguration(config);\n    }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [videoElement, videoAttachmentSizeHandler, attachment]);\n\n  const content = (\n    <div\n      className='str-chat__player-wrapper'\n      data-testid='video-wrapper'\n      ref={videoElement}\n      style={getCssDimensionsVariables(attachment.thumb_url || '')}\n    >\n      <Media\n        className='react-player'\n        config={{ file: { attributes: { poster: attachmentConfiguration?.thumbUrl } } }}\n        controls\n        height='100%'\n        url={attachmentConfiguration?.url}\n        width='100%'\n      />\n    </div>\n  );\n\n  return attachment.actions?.length ? (\n    <AttachmentWithinContainer attachment={attachment} componentType={componentType}>\n      <div className='str-chat__attachment'>\n        {content}\n        <AttachmentActionsContainer {...props} />\n      </div>\n    </AttachmentWithinContainer>\n  ) : (\n    <AttachmentWithinContainer attachment={attachment} componentType={componentType}>\n      {content}\n    </AttachmentWithinContainer>\n  );\n};\n\nexport const UnsupportedAttachmentContainer = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n  attachment,\n  UnsupportedAttachment = DefaultUnsupportedAttachment,\n}: RenderAttachmentProps<StreamChatGenerics>) => (\n  <>\n    <UnsupportedAttachment attachment={attachment} />\n  </>\n);\n", "import React from 'react';\nimport type { Action, Attachment } from 'stream-chat';\n\nimport { useTranslationContext } from '../../context';\n\nimport type { ActionHandlerReturnType } from '../Message/hooks/useActionHandler';\nimport type { DefaultStreamChatGenerics } from '../../types/types';\n\nexport type AttachmentActionsProps<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Attachment<StreamChatGenerics> & {\n  /** A list of actions */\n  actions: Action[];\n  /** Unique id for action button key. Key is generated by concatenating this id with action value - {`${id}-${action.value}`} */\n  id: string;\n  /** The text for the form input */\n  text: string;\n  /** Click event handler */\n  actionHandler?: ActionHandlerReturnType;\n};\n\nconst UnMemoizedAttachmentActions = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  props: AttachmentActionsProps<StreamChatGenerics>,\n) => {\n  const { actionHandler, actions, id, text } = props;\n  const { t } = useTranslationContext('UnMemoizedAttachmentActions');\n\n  const handleActionClick = (\n    event: React.MouseEvent<HTMLButtonElement, MouseEvent>,\n    name?: string,\n    value?: string,\n  ) => actionHandler?.(name, value, event);\n\n  return (\n    <div className='str-chat__message-attachment-actions'>\n      <div className='str-chat__message-attachment-actions-form'>\n        <span>{text}</span>\n        {actions.map((action) => (\n          <button\n            className={`str-chat__message-attachment-actions-button str-chat__message-attachment-actions-button--${action.style}`}\n            data-testid={`${action.name}`}\n            data-value={action.value}\n            key={`${id}-${action.value}`}\n            onClick={(event) => handleActionClick(event, action.name, action.value)}\n          >\n            {action.text ? t<string>(action.text) : null}\n          </button>\n        ))}\n      </div>\n    </div>\n  );\n};\n\n/**\n * A component for rendering the actions you can take on an attachment.\n */\nexport const AttachmentActions = React.memo(\n  UnMemoizedAttachmentActions,\n) as typeof UnMemoizedAttachmentActions;\n", "import React, { PropsWithChildren, useContext } from 'react';\n\nimport type {\n  APIErrorResponse,\n  Attachment,\n  ErrorFromResponse,\n  Message,\n  MessageResponse,\n  UpdatedMessage,\n  UpdateMessageAPIResponse,\n  UserResponse,\n} from 'stream-chat';\n\nimport type { StreamMessage } from './ChannelStateContext';\n\nimport type { ChannelStateReducerAction } from '../components/Channel/channelState';\nimport type { CustomMentionHandler } from '../components/Message/hooks/useMentionsHandler';\n\nimport type {\n  ChannelUnreadUiState,\n  DefaultStreamChatGenerics,\n  SendMessageOptions,\n  UnknownType,\n  UpdateMessageOptions,\n} from '../types/types';\n\nexport type MarkReadWrapperOptions = {\n  /**\n   * Signal, whether the `channelUnreadUiState` should be updated.\n   * By default, the local state update is prevented when the Channel component is mounted.\n   * This is in order to keep the UI indicating the original unread state, when the user opens a channel.\n   */\n  updateChannelUiUnreadState?: boolean;\n};\n\nexport type MessageAttachments<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Array<Attachment<StreamChatGenerics>>;\n\nexport type MessageToSend<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n  attachments?: MessageAttachments<StreamChatGenerics>;\n  error?: ErrorFromResponse<APIErrorResponse>;\n  errorStatusCode?: number;\n  id?: string;\n  mentioned_users?: UserResponse<StreamChatGenerics>[];\n  parent?: StreamMessage<StreamChatGenerics>;\n  parent_id?: string;\n  status?: string;\n  text?: string;\n};\n\nexport type RetrySendMessage<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = (message: StreamMessage<StreamChatGenerics>) => Promise<void>;\n\nexport type ChannelActionContextValue<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n  addNotification: (text: string, type: 'success' | 'error') => void;\n  closeThread: (event?: React.BaseSyntheticEvent) => void;\n  deleteMessage: (\n    message: StreamMessage<StreamChatGenerics>,\n  ) => Promise<MessageResponse<StreamChatGenerics>>;\n  dispatch: React.Dispatch<ChannelStateReducerAction<StreamChatGenerics>>;\n  editMessage: (\n    message: UpdatedMessage<StreamChatGenerics>,\n    options?: UpdateMessageOptions,\n  ) => Promise<UpdateMessageAPIResponse<StreamChatGenerics> | void>;\n  jumpToFirstUnreadMessage: (\n    queryMessageLimit?: number,\n    highlightDuration?: number,\n  ) => Promise<void>;\n  jumpToLatestMessage: () => Promise<void>;\n  jumpToMessage: (\n    messageId: string,\n    limit?: number,\n    highlightDuration?: number,\n  ) => Promise<void>;\n  loadMore: (limit?: number) => Promise<number>;\n  loadMoreNewer: (limit?: number) => Promise<number>;\n  loadMoreThread: () => Promise<void>;\n  markRead: (options?: MarkReadWrapperOptions) => void;\n  onMentionsClick: CustomMentionHandler<StreamChatGenerics>;\n  onMentionsHover: CustomMentionHandler<StreamChatGenerics>;\n  openThread: (\n    message: StreamMessage<StreamChatGenerics>,\n    event?: React.BaseSyntheticEvent,\n  ) => void;\n  removeMessage: (message: StreamMessage<StreamChatGenerics>) => void;\n  retrySendMessage: RetrySendMessage<StreamChatGenerics>;\n  sendMessage: (\n    message: MessageToSend<StreamChatGenerics>,\n    customMessageData?: Partial<Message<StreamChatGenerics>>,\n    options?: SendMessageOptions,\n  ) => Promise<void>;\n  setChannelUnreadUiState: React.Dispatch<\n    React.SetStateAction<ChannelUnreadUiState | undefined>\n  >;\n  setQuotedMessage: React.Dispatch<\n    React.SetStateAction<StreamMessage<StreamChatGenerics> | undefined>\n  >;\n  updateMessage: (message: StreamMessage<StreamChatGenerics>) => void;\n};\n\nexport const ChannelActionContext = React.createContext<\n  ChannelActionContextValue | undefined\n>(undefined);\n\nexport const ChannelActionProvider = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n  children,\n  value,\n}: PropsWithChildren<{\n  value: ChannelActionContextValue<StreamChatGenerics>;\n}>) => (\n  <ChannelActionContext.Provider value={value as unknown as ChannelActionContextValue}>\n    {children}\n  </ChannelActionContext.Provider>\n);\n\nexport const useChannelActionContext = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  componentName?: string,\n) => {\n  const contextValue = useContext(ChannelActionContext);\n\n  if (!contextValue) {\n    console.warn(\n      `The useChannelActionContext hook was called outside of the ChannelActionContext provider. Make sure this hook is called within a child of the Channel component. The errored call is located in the ${componentName} component.`,\n    );\n\n    return {} as ChannelActionContextValue<StreamChatGenerics>;\n  }\n\n  return contextValue as unknown as ChannelActionContextValue<StreamChatGenerics>;\n};\n\n/**\n * Typescript currently does not support partial inference, so if ChannelActionContext\n * typing is desired while using the HOC withChannelActionContext, the Props for the\n * wrapped component must be provided as the first generic.\n */\nexport const withChannelActionContext = <\n  P extends UnknownType,\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  Component: React.ComponentType<P>,\n) => {\n  const WithChannelActionContextComponent = (\n    props: Omit<P, keyof ChannelActionContextValue<StreamChatGenerics>>,\n  ) => {\n    const channelActionContext = useChannelActionContext<StreamChatGenerics>();\n\n    return <Component {...(props as P)} {...channelActionContext} />;\n  };\n\n  WithChannelActionContextComponent.displayName = (\n    Component.displayName ||\n    Component.name ||\n    'Component'\n  ).replace('Base', '');\n\n  return WithChannelActionContextComponent;\n};\n", "import React, {\n  createContext,\n  Dispatch,\n  PropsWithChildren,\n  SetStateAction,\n  useContext,\n} from 'react';\n\nimport type { Channel } from 'stream-chat';\n\nimport type { DefaultStreamChatGenerics } from '../types/types';\n\nexport type ChannelListContextValue<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n  /**\n   * State representing the array of loaded channels.\n   * Channels query is executed by default only by ChannelList component in the SDK.\n   */\n  channels: Channel<StreamChatGenerics>[];\n  /**\n   * Sets the list of Channel objects to be rendered by ChannelList component.\n   */\n  setChannels: Dispatch<SetStateAction<Channel<StreamChatGenerics>[]>>;\n};\n\nexport const ChannelListContext = createContext<ChannelListContextValue | undefined>(\n  undefined,\n);\n\n/**\n * Context provider for components rendered within the `ChannelList`\n */\nexport const ChannelListContextProvider = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n  children,\n  value,\n}: PropsWithChildren<{\n  value: ChannelListContextValue<StreamChatGenerics>;\n}>) => (\n  <ChannelListContext.Provider value={value as unknown as ChannelListContextValue}>\n    {children}\n  </ChannelListContext.Provider>\n);\n\nexport const useChannelListContext = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  componentName?: string,\n) => {\n  const contextValue = useContext(ChannelListContext);\n\n  if (!contextValue) {\n    console.warn(\n      `The useChannelListContext hook was called outside of the ChannelListContext provider. Make sure this hook is called within the ChannelList component. The errored call is located in the ${componentName} component.`,\n    );\n\n    return {} as ChannelListContextValue<StreamChatGenerics>;\n  }\n\n  return contextValue as unknown as ChannelListContextValue<StreamChatGenerics>;\n};\n", "import React, { PropsWithChildren, useContext } from 'react';\n\nimport type {\n  Channel,\n  ChannelConfigWithInfo,\n  MessageResponse,\n  Mute,\n  ChannelState as StreamChannelState,\n} from 'stream-chat';\n\nimport type {\n  ChannelUnreadUiState,\n  DefaultStreamChatGenerics,\n  GiphyVersions,\n  ImageAttachmentSizeHandler,\n  UnknownType,\n  VideoAttachmentSizeHandler,\n} from '../types/types';\nimport type { URLEnrichmentConfig } from '../components/MessageInput/hooks/useLinkPreviews';\n\nexport type ChannelNotifications = Array<{\n  id: string;\n  text: string;\n  type: 'success' | 'error';\n}>;\n\nexport type StreamMessage<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> =\n  | ReturnType<StreamChannelState<StreamChatGenerics>['formatMessage']>\n  | MessageResponse<StreamChatGenerics>;\n\nexport type ChannelState<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n  suppressAutoscroll: boolean;\n  error?: Error | null;\n  hasMore?: boolean;\n  hasMoreNewer?: boolean;\n  highlightedMessageId?: string;\n  loading?: boolean;\n  loadingMore?: boolean;\n  loadingMoreNewer?: boolean;\n  members?: StreamChannelState<StreamChatGenerics>['members'];\n  messages?: StreamMessage<StreamChatGenerics>[];\n  pinnedMessages?: StreamMessage<StreamChatGenerics>[];\n  quotedMessage?: StreamMessage<StreamChatGenerics>;\n  read?: StreamChannelState<StreamChatGenerics>['read'];\n  thread?: StreamMessage<StreamChatGenerics> | null;\n  threadHasMore?: boolean;\n  threadLoadingMore?: boolean;\n  threadMessages?: StreamMessage<StreamChatGenerics>[];\n  threadSuppressAutoscroll?: boolean;\n  typing?: StreamChannelState<StreamChatGenerics>['typing'];\n  watcherCount?: number;\n  watchers?: StreamChannelState<StreamChatGenerics>['watchers'];\n};\n\nexport type ChannelStateContextValue<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Omit<ChannelState<StreamChatGenerics>, 'typing'> & {\n  channel: Channel<StreamChatGenerics>;\n  channelCapabilities: Record<string, boolean>;\n  channelConfig: ChannelConfigWithInfo<StreamChatGenerics> | undefined;\n  imageAttachmentSizeHandler: ImageAttachmentSizeHandler;\n  multipleUploads: boolean;\n  notifications: ChannelNotifications;\n  shouldGenerateVideoThumbnail: boolean;\n  videoAttachmentSizeHandler: VideoAttachmentSizeHandler;\n  acceptedFiles?: string[];\n  channelUnreadUiState?: ChannelUnreadUiState<StreamChatGenerics>;\n  debounceURLEnrichmentMs?: URLEnrichmentConfig['debounceURLEnrichmentMs'];\n  dragAndDropWindow?: boolean;\n  enrichURLForPreview?: URLEnrichmentConfig['enrichURLForPreview'];\n  findURLFn?: URLEnrichmentConfig['findURLFn'];\n  giphyVersion?: GiphyVersions;\n  maxNumberOfFiles?: number;\n  mutes?: Array<Mute<StreamChatGenerics>>;\n  onLinkPreviewDismissed?: URLEnrichmentConfig['onLinkPreviewDismissed'];\n  watcher_count?: number;\n};\n\nexport const ChannelStateContext = React.createContext<\n  ChannelStateContextValue | undefined\n>(undefined);\n\nexport const ChannelStateProvider = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n  children,\n  value,\n}: PropsWithChildren<{\n  value: ChannelStateContextValue<StreamChatGenerics>;\n}>) => (\n  <ChannelStateContext.Provider value={value as unknown as ChannelStateContextValue}>\n    {children}\n  </ChannelStateContext.Provider>\n);\n\nexport const useChannelStateContext = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  componentName?: string,\n) => {\n  const contextValue = useContext(ChannelStateContext);\n\n  if (!contextValue) {\n    console.warn(\n      `The useChannelStateContext hook was called outside of the ChannelStateContext provider. Make sure this hook is called within a child of the Channel component. The errored call is located in the ${componentName} component.`,\n    );\n\n    return {} as ChannelStateContextValue<StreamChatGenerics>;\n  }\n\n  return contextValue as unknown as ChannelStateContextValue<StreamChatGenerics>;\n};\n\n/**\n * Typescript currently does not support partial inference, so if ChannelStateContext\n * typing is desired while using the HOC withChannelStateContext, the Props for the\n * wrapped component must be provided as the first generic.\n */\nexport const withChannelStateContext = <\n  P extends UnknownType,\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  Component: React.ComponentType<P>,\n) => {\n  const WithChannelStateContextComponent = (\n    props: Omit<P, keyof ChannelStateContextValue<StreamChatGenerics>>,\n  ) => {\n    const channelStateContext = useChannelStateContext<StreamChatGenerics>();\n\n    return <Component {...(props as P)} {...channelStateContext} />;\n  };\n\n  WithChannelStateContextComponent.displayName = (\n    Component.displayName ||\n    Component.name ||\n    'Component'\n  ).replace('Base', '');\n\n  return WithChannelStateContextComponent;\n};\n", "import React, { PropsWithChildren, useContext } from 'react';\n\nimport { getDisplayName } from './utils/getDisplayName';\n\nimport type {\n  AppSettingsAPIResponse,\n  Channel,\n  Mute,\n  SearchController,\n} from 'stream-chat';\nimport type { ChatProps } from '../components/Chat/Chat';\nimport type { DefaultStreamChatGenerics, UnknownType } from '../types/types';\nimport type { ChannelsQueryState } from '../components/Chat/hooks/useChannelsQueryState';\n\ntype CSSClasses =\n  | 'chat'\n  | 'chatContainer'\n  | 'channel'\n  | 'channelList'\n  | 'message'\n  | 'messageList'\n  | 'thread'\n  | 'threadList'\n  | 'virtualMessage'\n  | 'virtualizedMessageList';\n\nexport type CustomClasses = Partial<Record<CSSClasses, string>>;\n\ntype ChannelCID = string; // e.g.: \"messaging:general\"\n\nexport type ChatContextValue<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n  /**\n   * Indicates, whether a channels query has been triggered within ChannelList by its channels pagination controller.\n   */\n  channelsQueryState: ChannelsQueryState;\n  closeMobileNav: () => void;\n  getAppSettings: () => Promise<AppSettingsAPIResponse<StreamChatGenerics>> | null;\n  latestMessageDatesByChannels: Record<ChannelCID, Date>;\n  mutes: Array<Mute<StreamChatGenerics>>;\n  openMobileNav: () => void;\n  /** Instance of SearchController class that allows to control all the search operations. */\n  searchController: SearchController<StreamChatGenerics>;\n  /**\n   * Sets active channel to be rendered within Channel component.\n   * @param newChannel\n   * @param watchers\n   * @param event\n   */\n  setActiveChannel: (\n    newChannel?: Channel<StreamChatGenerics>,\n    watchers?: { limit?: number; offset?: number },\n    event?: React.BaseSyntheticEvent,\n  ) => void;\n  useImageFlagEmojisOnWindows: boolean;\n  /**\n   * Active channel used to render the contents of the Channel component.\n   */\n  channel?: Channel<StreamChatGenerics>;\n  /**\n   * Object through which custom classes can be set for main container components of the SDK.\n   */\n  customClasses?: CustomClasses;\n  navOpen?: boolean;\n} & Partial<Pick<ChatProps<StreamChatGenerics>, 'isMessageAIGenerated'>> &\n  Required<Pick<ChatProps<StreamChatGenerics>, 'theme' | 'client'>>;\n\nexport const ChatContext = React.createContext<ChatContextValue | undefined>(undefined);\n\nexport const ChatProvider = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n  children,\n  value,\n}: PropsWithChildren<{\n  value: ChatContextValue<StreamChatGenerics>;\n}>) => (\n  <ChatContext.Provider value={value as unknown as ChatContextValue}>\n    {children}\n  </ChatContext.Provider>\n);\n\nexport const useChatContext = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  componentName?: string,\n) => {\n  const contextValue = useContext(ChatContext);\n\n  if (!contextValue) {\n    console.warn(\n      `The useChatContext hook was called outside of the ChatContext provider. Make sure this hook is called within a child of the Chat component. The errored call is located in the ${componentName} component.`,\n    );\n\n    return {} as ChatContextValue<StreamChatGenerics>;\n  }\n\n  return contextValue as unknown as ChatContextValue<StreamChatGenerics>;\n};\n\n/**\n * Typescript currently does not support partial inference so if ChatContext\n * typing is desired while using the HOC withChatContext the Props for the\n * wrapped component must be provided as the first generic.\n */\nexport const withChatContext = <\n  P extends UnknownType,\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  Component: React.ComponentType<P>,\n) => {\n  const WithChatContextComponent = (\n    props: Omit<P, keyof ChatContextValue<StreamChatGenerics>>,\n  ) => {\n    const chatContext = useChatContext<StreamChatGenerics>();\n\n    return <Component {...(props as P)} {...chatContext} />;\n  };\n  WithChatContextComponent.displayName = `WithChatContext${getDisplayName(Component)}`;\n  return WithChatContextComponent;\n};\n", "import type { UnknownType } from '../../types/types';\n\nexport const getDisplayName = <P extends UnknownType>(\n  Component: React.ComponentType<P>,\n) => Component.displayName || Component.name || 'Component';\n", "import React, { PropsWithChildren, useContext } from 'react';\n\nimport {\n  AttachmentPreviewListProps,\n  AttachmentProps,\n  AvatarProps,\n  BaseImageProps,\n  ChannelPreviewActionButtonsProps,\n  CooldownTimerProps,\n  CustomMessageActionsListProps,\n  DateSeparatorProps,\n  EmojiSearchIndex,\n  EmptyStateIndicatorProps,\n  EventComponentProps,\n  FixedHeightMessageProps,\n  GiphyPreviewMessageProps,\n  LinkPreviewListProps,\n  LoadingIndicatorProps,\n  MessageBouncePromptProps,\n  MessageDeletedProps,\n  MessageInputProps,\n  MessageListNotificationsProps,\n  MessageNotificationProps,\n  MessageOptionsProps,\n  MessageProps,\n  MessageRepliesCountButtonProps,\n  MessageStatusProps,\n  MessageTimestampProps,\n  MessageUIComponentProps,\n  ModalGalleryProps,\n  PinIndicatorProps,\n  PollCreationDialogProps,\n  PollOptionSelectorProps,\n  QuotedMessagePreviewProps,\n  ReactionOptions,\n  ReactionSelectorProps,\n  ReactionsListModalProps,\n  ReactionsListProps,\n  RecordingPermissionDeniedNotificationProps,\n  SendButtonProps,\n  StartRecordingAudioButtonProps,\n  StreamedMessageTextProps,\n  SuggestionItemProps,\n  SuggestionListProps,\n  ThreadHeaderProps,\n  ThreadListItemProps,\n  ThreadListItemUIProps,\n  TimestampProps,\n  TypingIndicatorProps,\n  UnreadMessagesNotificationProps,\n  UnreadMessagesSeparatorProps,\n} from '../components';\n\nimport {\n  SearchProps,\n  SearchResultsPresearchProps,\n  SearchSourceResultListProps,\n} from '../experimental';\n\nimport type {\n  CustomTrigger,\n  DefaultStreamChatGenerics,\n  PropsWithChildrenOnly,\n  UnknownType,\n} from '../types/types';\nimport type { StopAIGenerationButtonProps } from '../components/MessageInput/StopAIGenerationButton';\n\nexport type ComponentContextValue<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n  V extends CustomTrigger = CustomTrigger,\n> = {\n  /** Custom UI component to display a message attachment, defaults to and accepts same props as: [Attachment](https://github.com/GetStream/stream-chat-react/blob/master/src/components/Attachment/Attachment.tsx) */\n  Attachment?: React.ComponentType<AttachmentProps<StreamChatGenerics>>;\n  /** Custom UI component to display an attachment previews in MessageInput, defaults to and accepts same props as: [Attachment](https://github.com/GetStream/stream-chat-react/blob/master/src/components/MessageInput/AttachmentPreviewList.tsx) */\n  AttachmentPreviewList?: React.ComponentType<AttachmentPreviewListProps>;\n  /** Custom UI component to control adding attachments to MessageInput, defaults to and accepts same props as: [AttachmentSelector](https://github.com/GetStream/stream-chat-react/blob/master/src/components/MessageInput/AttachmentSelector.tsx) */\n  AttachmentSelector?: React.ComponentType;\n  /** Custom UI component for contents of attachment selector initiation button */\n  AttachmentSelectorInitiationButtonContents?: React.ComponentType;\n  /** Custom UI component to display AudioRecorder in MessageInput, defaults to and accepts same props as: [AudioRecorder](https://github.com/GetStream/stream-chat-react/blob/master/src/components/MessageInput/AudioRecorder.tsx) */\n  AudioRecorder?: React.ComponentType;\n  /** Optional UI component to override the default suggestion Item component, defaults to and accepts same props as: [Item](https://github.com/GetStream/stream-chat-react/blob/master/src/components/AutoCompleteTextarea/Item.js) */\n  AutocompleteSuggestionItem?: React.ComponentType<\n    SuggestionItemProps<StreamChatGenerics>\n  >;\n  /** Optional UI component to override the default List component that displays suggestions, defaults to and accepts same props as: [List](https://github.com/GetStream/stream-chat-react/blob/master/src/components/AutoCompleteTextarea/List.js) */\n  AutocompleteSuggestionList?: React.ComponentType<\n    SuggestionListProps<StreamChatGenerics>\n  >;\n  /** UI component to display a user's avatar, defaults to and accepts same props as: [Avatar](https://github.com/GetStream/stream-chat-react/blob/master/src/components/Avatar/Avatar.tsx) */\n  Avatar?: React.ComponentType<AvatarProps<StreamChatGenerics>>;\n  /** Custom UI component to display <img/> elements resp. a fallback in case of load error, defaults to and accepts same props as: [BaseImage](https://github.com/GetStream/stream-chat-react/blob/master/src/components/Gallery/BaseImage.tsx) */\n  BaseImage?: React.ComponentType<BaseImageProps>;\n  /** Custom UI component to display set of action buttons within `ChannelPreviewMessenger` component, accepts same props as: [ChannelPreviewActionButtons](https://github.com/GetStream/stream-chat-react/blob/master/src/components/ChannelList/ChannelPreviewActionButtons.tsx) */\n  ChannelPreviewActionButtons?: React.ComponentType<\n    ChannelPreviewActionButtonsProps<StreamChatGenerics>\n  >;\n  /** Custom UI component to display the slow mode cooldown timer, defaults to and accepts same props as: [CooldownTimer](https://github.com/GetStream/stream-chat-react/blob/master/src/components/MessageInput/CooldownTimer.tsx) */\n  CooldownTimer?: React.ComponentType<CooldownTimerProps>;\n  /** Custom UI component to render set of buttons to be displayed in the MessageActionsBox, defaults to and accepts same props as: [CustomMessageActionsList](https://github.com/GetStream/stream-chat-react/blob/master/src/components/MessageActions/CustomMessageActionsList.tsx) */\n  CustomMessageActionsList?: React.ComponentType<\n    CustomMessageActionsListProps<StreamChatGenerics>\n  >;\n  /** Custom UI component for date separators, defaults to and accepts same props as: [DateSeparator](https://github.com/GetStream/stream-chat-react/blob/master/src/components/DateSeparator.tsx) */\n  DateSeparator?: React.ComponentType<DateSeparatorProps>;\n  /** Custom UI component to override default edit message input, defaults to and accepts same props as: [EditMessageForm](https://github.com/GetStream/stream-chat-react/blob/master/src/components/MessageInput/EditMessageForm.tsx) */\n  EditMessageInput?: React.ComponentType<MessageInputProps<StreamChatGenerics>>;\n  /** Custom UI component for rendering button with emoji picker in MessageInput */\n  EmojiPicker?: React.ComponentType;\n  /** Mechanism to be used with autocomplete and text replace features of the `MessageInput` component, see [emoji-mart `SearchIndex`](https://github.com/missive/emoji-mart#%EF%B8%8F%EF%B8%8F-headless-search) */\n  emojiSearchIndex?: EmojiSearchIndex;\n  /** Custom UI component to be displayed when the `MessageList` is empty, defaults to and accepts same props as: [EmptyStateIndicator](https://github.com/GetStream/stream-chat-react/blob/master/src/components/EmptyStateIndicator/EmptyStateIndicator.tsx)  */\n  EmptyStateIndicator?: React.ComponentType<EmptyStateIndicatorProps>;\n  /**\n   * Custom UI component for file upload icon, defaults to and accepts same props as: [FileUploadIcon](https://github.com/GetStream/stream-chat-react/blob/master/src/components/MessageInput/icons.tsx)\n   * @deprecated use AttachmentSelectorInitiationButtonContents prop instead\n   */\n  FileUploadIcon?: React.ComponentType;\n  /** Custom UI component to render a Giphy preview in the `VirtualizedMessageList` */\n  GiphyPreviewMessage?: React.ComponentType<GiphyPreviewMessageProps<StreamChatGenerics>>;\n  /** Custom UI component to render at the top of the `MessageList` */\n  HeaderComponent?: React.ComponentType;\n  /** Custom UI component handling how the message input is rendered, defaults to and accepts the same props as [MessageInputFlat](https://github.com/GetStream/stream-chat-react/blob/master/src/components/MessageInput/MessageInputFlat.tsx) */\n  Input?: React.ComponentType<MessageInputProps<StreamChatGenerics, V>>;\n  /** Custom component to render link previews in message input **/\n  LinkPreviewList?: React.ComponentType<LinkPreviewListProps>;\n  /** Custom UI component to render while the `MessageList` is loading new messages, defaults to and accepts same props as: [LoadingIndicator](https://github.com/GetStream/stream-chat-react/blob/master/src/components/Loading/LoadingIndicator.tsx) */\n  LoadingIndicator?: React.ComponentType<LoadingIndicatorProps>;\n  /** Custom UI component to display a message in the standard `MessageList`, defaults to and accepts the same props as: [MessageSimple](https://github.com/GetStream/stream-chat-react/blob/master/src/components/Message/MessageSimple.tsx) */\n  Message?: React.ComponentType<MessageUIComponentProps<StreamChatGenerics>>;\n  /** Custom UI component for message actions popup, accepts no props, all the defaults are set within [MessageActions (unstable)](https://github.com/GetStream/stream-chat-react/blob/master/src/experimental/MessageActions/MessageActions.tsx) */\n  MessageActions?: React.ComponentType;\n  /** Custom UI component to display the contents of a bounced message modal. Usually it allows to retry, edit, or delete the message. Defaults to and accepts the same props as: [MessageBouncePrompt](https://github.com/GetStream/stream-chat-react/blob/master/src/components/MessageBounce/MessageBouncePrompt.tsx) */\n  MessageBouncePrompt?: React.ComponentType<MessageBouncePromptProps>;\n  /** Custom UI component for a moderation-blocked message, defaults to and accepts same props as: [MessageBlocked](https://github.com/GetStream/stream-chat-react/blob/master/src/components/Message/MessageBlocked.tsx) */\n  MessageBlocked?: React.ComponentType;\n  /** Custom UI component for a deleted message, defaults to and accepts same props as: [MessageDeleted](https://github.com/GetStream/stream-chat-react/blob/master/src/components/Message/MessageDeleted.tsx) */\n  MessageDeleted?: React.ComponentType<MessageDeletedProps<StreamChatGenerics>>;\n  MessageListMainPanel?: React.ComponentType<PropsWithChildrenOnly>;\n  /** Custom UI component that displays message and connection status notifications in the `MessageList`, defaults to and accepts same props as [DefaultMessageListNotifications](https://github.com/GetStream/stream-chat-react/blob/master/src/components/MessageList/MessageListNotifications.tsx) */\n  MessageListNotifications?: React.ComponentType<MessageListNotificationsProps>;\n  /** Custom UI component to display a notification when scrolled up the list and new messages arrive, defaults to and accepts same props as [MessageNotification](https://github.com/GetStream/stream-chat-react/blob/master/src/components/MessageList/MessageNotification.tsx) */\n  MessageNotification?: React.ComponentType<MessageNotificationProps>;\n  /**\n   * Custom UI component for message options popup, defaults to and accepts same props as: [MessageOptions](https://github.com/GetStream/stream-chat-react/blob/master/src/components/Message/MessageOptions.tsx)\n   *\n   * @deprecated Use MessageActions property instead.\n   */\n  MessageOptions?: React.ComponentType<MessageOptionsProps<StreamChatGenerics>>;\n  /** Custom UI component to display message replies, defaults to and accepts same props as: [MessageRepliesCountButton](https://github.com/GetStream/stream-chat-react/blob/master/src/components/Message/MessageRepliesCountButton.tsx) */\n  MessageRepliesCountButton?: React.ComponentType<MessageRepliesCountButtonProps>;\n  /** Custom UI component to display message delivery status, defaults to and accepts same props as: [MessageStatus](https://github.com/GetStream/stream-chat-react/blob/master/src/components/Message/MessageStatus.tsx) */\n  MessageStatus?: React.ComponentType<MessageStatusProps>;\n  /** Custom UI component to display system messages, defaults to and accepts same props as: [EventComponent](https://github.com/GetStream/stream-chat-react/blob/master/src/components/EventComponent/EventComponent.tsx) */\n  MessageSystem?: React.ComponentType<EventComponentProps<StreamChatGenerics>>;\n  /** Custom UI component to display a timestamp on a message, defaults to and accepts same props as: [MessageTimestamp](https://github.com/GetStream/stream-chat-react/blob/master/src/components/Message/MessageTimestamp.tsx) */\n  MessageTimestamp?: React.ComponentType<MessageTimestampProps<StreamChatGenerics>>;\n  /** Custom UI component for viewing message's image attachments, defaults to and accepts the same props as [ModalGallery](https://github.com/GetStream/stream-chat-react/blob/master/src/components/Gallery/ModalGallery.tsx) */\n  ModalGallery?: React.ComponentType<ModalGalleryProps>;\n  /** Custom UI component to override default pinned message indicator, defaults to and accepts same props as: [PinIndicator](https://github.com/GetStream/stream-chat-react/blob/master/src/components/Message/icons.tsx) */\n  PinIndicator?: React.ComponentType<PinIndicatorProps<StreamChatGenerics>>;\n  /** Custom UI component to override default poll actions rendering in a message, defaults to and accepts same props as: [PollActions](https://github.com/GetStream/stream-chat-react/blob/master/src/components/Poll/PollActions/PollActions.tsx) */\n  PollActions?: React.ComponentType;\n  /** Custom UI component to override default poll rendering in a message, defaults to and accepts same props as: [PollContent](https://github.com/GetStream/stream-chat-react/blob/master/src/components/Poll/PollContent.tsx) */\n  PollContent?: React.ComponentType;\n  /** Custom UI component to override default poll creation dialog contents, defaults to and accepts same props as: [PollCreationDialog](https://github.com/GetStream/stream-chat-react/blob/master/src/components/Poll/PollCreationDialog/PollCreationDialog.tsx) */\n  PollCreationDialog?: React.ComponentType<PollCreationDialogProps>;\n  /** Custom UI component to override default poll header in a message, defaults to and accepts same props as: [PollHeader](https://github.com/GetStream/stream-chat-react/blob/master/src/components/Poll/PollHeader.tsx) */\n  PollHeader?: React.ComponentType;\n  /** Custom UI component to override default poll option selector, defaults to and accepts same props as: [PollOptionSelector](https://github.com/GetStream/stream-chat-react/blob/master/src/components/Poll/PollOptionSelector.tsx) */\n  PollOptionSelector?: React.ComponentType<PollOptionSelectorProps<StreamChatGenerics>>;\n  /** Custom UI component to override quoted message UI on a sent message, defaults to and accepts same props as: [QuotedMessage](https://github.com/GetStream/stream-chat-react/blob/master/src/components/Message/QuotedMessage.tsx) */\n  QuotedMessage?: React.ComponentType;\n  /** Custom UI component to override the message input's quoted message preview, defaults to and accepts same props as: [QuotedMessagePreview](https://github.com/GetStream/stream-chat-react/blob/master/src/components/MessageInput/QuotedMessagePreview.tsx) */\n  QuotedMessagePreview?: React.ComponentType<\n    QuotedMessagePreviewProps<StreamChatGenerics>\n  >;\n  /** Custom UI component to override the rendering of quoted poll, defaults to and accepts same props as: [QuotedPoll](https://github.com/GetStream/stream-chat-react/blob/master/src/components/Poll/QuotedPoll.tsx) */\n  QuotedPoll?: React.ComponentType;\n  /** Custom reaction options to be applied to ReactionSelector, ReactionList and SimpleReactionList components */\n  reactionOptions?: ReactionOptions;\n  /** Custom UI component to display the reaction selector, defaults to and accepts same props as: [ReactionSelector](https://github.com/GetStream/stream-chat-react/blob/master/src/components/Reactions/ReactionSelector.tsx) */\n  ReactionSelector?: React.ForwardRefExoticComponent<\n    ReactionSelectorProps<StreamChatGenerics>\n  >;\n  /** Custom UI component to display the list of reactions on a message, defaults to and accepts same props as: [ReactionsList](https://github.com/GetStream/stream-chat-react/blob/master/src/components/Reactions/ReactionsList.tsx) */\n  ReactionsList?: React.ComponentType<ReactionsListProps<StreamChatGenerics>>;\n  /** Custom UI component to display the reactions modal, defaults to and accepts same props as: [ReactionsListModal](https://github.com/GetStream/stream-chat-react/blob/master/src/components/Reactions/ReactionsListModal.tsx) */\n  ReactionsListModal?: React.ComponentType<ReactionsListModalProps<StreamChatGenerics>>;\n  RecordingPermissionDeniedNotification?: React.ComponentType<RecordingPermissionDeniedNotificationProps>;\n  /** Custom component to display the search UI, defaults to and accepts same props as: [Search](https://github.com/GetStream/stream-chat-react/blob/master/src/components/Search/Search.tsx) */\n  Search?: React.ComponentType<SearchProps>;\n  /** Custom component to display the UI where the searched string is entered, defaults to and accepts same props as: [SearchBar](https://github.com/GetStream/stream-chat-react/blob/master/src/components/Search/SearchBar/SearchBar.tsx) */\n  SearchBar?: React.ComponentType;\n  /** Custom component for the search UI dedicated to display the results area, defaults to and accepts same props as: [SearchResults](https://github.com/GetStream/stream-chat-react/blob/master/src/components/Search/SearchResults/SearchResults.tsx) */\n  SearchResults?: React.ComponentType;\n  /** Custom UI component to display header of search results pane, defaults to and accepts same props as: [SearchResultsHeader](https://github.com/GetStream/stream-chat-react/blob/master/src/components/Search/SearchResults/SearchResultsHeader.tsx) */\n  SearchResultsHeader?: React.ComponentType;\n  /** Custom component to display search results pane before emitting the first search query for a given source, defaults to and accepts same props as: [SearchResultsPresearch](https://github.com/GetStream/stream-chat-react/blob/master/src/components/Search/SearchResults/SearchSourceResultsPresearch.tsx) */\n  SearchResultsPresearch?: React.ComponentType<SearchResultsPresearchProps>;\n  /** Custom component to display the search source items results, defaults to and accepts same props as: [SearchSourceResultList](https://github.com/GetStream/stream-chat-react/blob/master/src/components/Search/SearchResults/SearchSourceResultList.tsx) */\n  SearchSourceResultList?: React.ComponentType<SearchSourceResultListProps>;\n  /** Custom component to indicate the end of the last page for a searched source, defaults to and accepts same props as: [SearchSourceResultListFooter](https://github.com/GetStream/stream-chat-react/blob/master/src/components/Search/SearchResults/SearchSourceResultListFooter.tsx) */\n  SearchSourceResultListFooter?: React.ComponentType;\n  /** Custom UI component to display search results items for a given search source pane, defaults to and accepts same props as: [SearchSourceResults](https://github.com/GetStream/stream-chat-react/blob/master/src/components/Search/SearchResults/SourceSearchResults.tsx) */\n  SearchSourceResults?: React.ComponentType;\n  /** Custom component to display the search source results UI with 0 items found, defaults to and accepts same props as: [SearchSourceResultsEmpty](https://github.com/GetStream/stream-chat-react/blob/master/src/components/Search/SearchResults/SearchSourceResultsEmpty.tsx) */\n  SearchSourceResultsEmpty?: React.ComponentType;\n  /** Custom component to display the header content for a given search source results, no default component is provided. */\n  SearchSourceResultsHeader?: React.ComponentType;\n  /** Custom component to display the search source results UI during the search query execution, defaults to and accepts same props as: [SearchSourceResultsLoadingIndicator](https://github.com/GetStream/stream-chat-react/blob/master/src/components/Search/SearchResults/SearchSourceResultsLoadingIndicator.tsx) */\n  SearchSourceResultsLoadingIndicator?: React.ComponentType;\n  /** Custom UI component for send button, defaults to and accepts same props as: [SendButton](https://github.com/GetStream/stream-chat-react/blob/master/src/components/MessageInput/icons.tsx) */\n  SendButton?: React.ComponentType<SendButtonProps<StreamChatGenerics>>;\n  /** Custom UI component button for initiating audio recording, defaults to and accepts same props as: [StartRecordingAudioButton](https://github.com/GetStream/stream-chat-react/blob/master/src/components/MediaRecorder/AudioRecorder/AudioRecordingButtons.tsx) */\n  StartRecordingAudioButton?: React.ComponentType<StartRecordingAudioButtonProps>;\n  StopAIGenerationButton?: React.ComponentType<StopAIGenerationButtonProps> | null;\n  StreamedMessageText?: React.ComponentType<StreamedMessageTextProps>;\n  /** Custom UI component that displays thread's parent or other message at the top of the `MessageList`, defaults to and accepts same props as [MessageSimple](https://github.com/GetStream/stream-chat-react/blob/master/src/components/Message/MessageSimple.tsx) */\n  ThreadHead?: React.ComponentType<MessageProps<StreamChatGenerics>>;\n  /** Custom UI component to display the header of a `Thread`, defaults to and accepts same props as: [DefaultThreadHeader](https://github.com/GetStream/stream-chat-react/blob/master/src/components/Thread/Thread.tsx) */\n  ThreadHeader?: React.ComponentType<ThreadHeaderProps<StreamChatGenerics>>;\n  ThreadInput?: React.ComponentType<MessageInputProps<StreamChatGenerics, V>>;\n  ThreadListEmptyPlaceholder?: React.ComponentType;\n  ThreadListItem?: React.ComponentType<ThreadListItemProps>;\n  ThreadListItemUI?: React.ComponentType<ThreadListItemUIProps>;\n  ThreadListLoadingIndicator?: React.ComponentType;\n  ThreadListUnseenThreadsBanner?: React.ComponentType;\n  /** Custom UI component to display the start of a threaded `MessageList`, defaults to and accepts same props as: [DefaultThreadStart](https://github.com/GetStream/stream-chat-react/blob/master/src/components/Thread/Thread.tsx) */\n  ThreadStart?: React.ComponentType;\n  /** Custom UI component to display a date used in timestamps. It's used internally by the default `MessageTimestamp`, and to display a timestamp for edited messages. */\n  Timestamp?: React.ComponentType<TimestampProps>;\n  /** Optional context provider that lets you override the default autocomplete triggers, defaults to: [DefaultTriggerProvider](https://github.com/GetStream/stream-chat-react/blob/master/src/components/MessageInput/DefaultTriggerProvider.tsx) */\n  TriggerProvider?: React.ComponentType;\n  /** Custom UI component for the typing indicator, defaults to and accepts same props as: [TypingIndicator](https://github.com/GetStream/stream-chat-react/blob/master/src/components/TypingIndicator/TypingIndicator.tsx) */\n  TypingIndicator?: React.ComponentType<TypingIndicatorProps>;\n  /** Custom UI component that indicates a user is viewing unread messages. It disappears once the user scrolls to UnreadMessagesSeparator. Defaults to and accepts same props as: [UnreadMessagesNotification](https://github.com/GetStream/stream-chat-react/blob/master/src/components/MessageList/UnreadMessagesNotification.tsx) */\n  UnreadMessagesNotification?: React.ComponentType<UnreadMessagesNotificationProps>;\n  /** Custom UI component that separates read messages from unread, defaults to and accepts same props as: [UnreadMessagesSeparator](https://github.com/GetStream/stream-chat-react/blob/master/src/components/MessageList/UnreadMessagesSeparator.tsx) */\n  UnreadMessagesSeparator?: React.ComponentType<UnreadMessagesSeparatorProps>;\n  /** Custom UI component to display a message in the `VirtualizedMessageList`, does not have a default implementation */\n  VirtualMessage?: React.ComponentType<FixedHeightMessageProps<StreamChatGenerics>>;\n};\n\nexport const ComponentContext = React.createContext<ComponentContextValue>({});\n\nexport const ComponentProvider = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n  V extends CustomTrigger = CustomTrigger,\n>({\n  children,\n  value,\n}: PropsWithChildren<{\n  value: Partial<ComponentContextValue<StreamChatGenerics, V>>;\n}>) => (\n  <ComponentContext.Provider value={value as unknown as ComponentContextValue}>\n    {children}\n  </ComponentContext.Provider>\n);\n\nexport const useComponentContext = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n  V extends CustomTrigger = CustomTrigger,\n>(\n  /**\n   * @deprecated\n   */\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  _componentName?: string,\n) =>\n  useContext(ComponentContext) as unknown as ComponentContextValue<StreamChatGenerics, V>;\n\n/**\n * Typescript currently does not support partial inference, so if ComponentContext\n * typing is desired while using the HOC withComponentContext, the Props for the\n * wrapped component must be provided as the first generic.\n */\nexport const withComponentContext = <\n  P extends UnknownType,\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n  V extends CustomTrigger = CustomTrigger,\n>(\n  Component: React.ComponentType<P>,\n) => {\n  const WithComponentContextComponent = (\n    props: Omit<P, keyof ComponentContextValue<StreamChatGenerics, V>>,\n  ) => {\n    const componentContext = useComponentContext<StreamChatGenerics, V>();\n\n    return <Component {...(props as P)} {...componentContext} />;\n  };\n\n  WithComponentContextComponent.displayName = (\n    Component.displayName ||\n    Component.name ||\n    'Component'\n  ).replace('Base', '');\n\n  return WithComponentContextComponent;\n};\n", "import React, { PropsWithChildren, useContext, useState } from 'react';\nimport { DialogManager } from '../components/Dialog/DialogManager';\nimport { DialogPortalDestination } from '../components/Dialog/DialogPortal';\n\ntype DialogManagerProviderContextValue = {\n  dialogManager: DialogManager;\n};\n\nconst DialogManagerProviderContext = React.createContext<\n  DialogManagerProviderContextValue | undefined\n>(undefined);\n\nexport const DialogManagerProvider = ({\n  children,\n  id,\n}: PropsWithChildren<{ id?: string }>) => {\n  const [dialogManager] = useState<DialogManager>(() => new DialogManager({ id }));\n\n  return (\n    <DialogManagerProviderContext.Provider value={{ dialogManager }}>\n      {children}\n      <DialogPortalDestination />\n    </DialogManagerProviderContext.Provider>\n  );\n};\n\nexport const useDialogManager = () => {\n  const value = useContext(DialogManagerProviderContext);\n  return value as DialogManagerProviderContextValue;\n};\n", "import { StateStore } from 'stream-chat';\n\nexport type GetOrCreateDialogParams = {\n  id: DialogId;\n};\n\ntype DialogId = string;\n\nexport type Dialog = {\n  close: () => void;\n  id: DialogId;\n  isOpen: boolean | undefined;\n  open: (zIndex?: number) => void;\n  removalTimeout: NodeJS.Timeout | undefined;\n  remove: () => void;\n  toggle: (closeAll?: boolean) => void;\n};\n\nexport type DialogManagerOptions = {\n  id?: string;\n};\n\ntype Dialogs = Record<DialogId, Dialog>;\n\nexport type DialogManagerState = {\n  dialogsById: Dialogs;\n};\n\n/**\n * Keeps a map of Dialog objects.\n * Dialog can be controlled via `Dialog` object retrieved using `useDialog()` hook.\n * The hook returns an object with the following API:\n *\n * - `dialog.open()` - opens the dialog\n * - `dialog.close()` - closes the dialog\n * - `dialog.toggle()` - toggles the dialog open state. Accepts boolean argument closeAll. If enabled closes any other dialog that would be open.\n * - `dialog.remove()` - removes the dialog object reference from the state (primarily for cleanup purposes)\n */\nexport class DialogManager {\n  id: string;\n  state = new StateStore<DialogManagerState>({\n    dialogsById: {},\n  });\n\n  constructor({ id }: DialogManagerOptions = {}) {\n    this.id = id ?? new Date().getTime().toString();\n  }\n\n  get openDialogCount() {\n    return Object.values(this.state.getLatestValue().dialogsById).reduce(\n      (count, dialog) => {\n        if (dialog.isOpen) return count + 1;\n        return count;\n      },\n      0,\n    );\n  }\n\n  getOrCreate({ id }: GetOrCreateDialogParams) {\n    let dialog = this.state.getLatestValue().dialogsById[id];\n    if (!dialog) {\n      dialog = {\n        close: () => {\n          this.close(id);\n        },\n        id,\n        isOpen: false,\n        open: () => {\n          this.open({ id });\n        },\n        removalTimeout: undefined,\n        remove: () => {\n          this.remove(id);\n        },\n        toggle: (closeAll = false) => {\n          this.toggle({ id }, closeAll);\n        },\n      };\n      this.state.next((current) => ({\n        ...current,\n        ...{ dialogsById: { ...current.dialogsById, [id]: dialog } },\n      }));\n    }\n\n    if (dialog.removalTimeout) {\n      clearTimeout(dialog.removalTimeout);\n      this.state.next((current) => ({\n        ...current,\n        ...{\n          dialogsById: {\n            ...current.dialogsById,\n            [id]: {\n              ...dialog,\n              removalTimeout: undefined,\n            },\n          },\n        },\n      }));\n    }\n\n    return dialog;\n  }\n\n  open(params: GetOrCreateDialogParams, closeRest?: boolean) {\n    const dialog = this.getOrCreate(params);\n    if (dialog.isOpen) return;\n    if (closeRest) {\n      this.closeAll();\n    }\n    this.state.next((current) => ({\n      ...current,\n      dialogsById: { ...current.dialogsById, [dialog.id]: { ...dialog, isOpen: true } },\n    }));\n  }\n\n  close(id: DialogId) {\n    const dialog = this.state.getLatestValue().dialogsById[id];\n    if (!dialog?.isOpen) return;\n    this.state.next((current) => ({\n      ...current,\n      dialogsById: { ...current.dialogsById, [dialog.id]: { ...dialog, isOpen: false } },\n    }));\n  }\n\n  closeAll() {\n    Object.values(this.state.getLatestValue().dialogsById).forEach((dialog) =>\n      dialog.close(),\n    );\n  }\n\n  toggle(params: GetOrCreateDialogParams, closeAll = false) {\n    if (this.state.getLatestValue().dialogsById[params.id]?.isOpen) {\n      this.close(params.id);\n    } else {\n      this.open(params, closeAll);\n    }\n  }\n\n  remove(id: DialogId) {\n    const state = this.state.getLatestValue();\n    const dialog = state.dialogsById[id];\n    if (!dialog) return;\n\n    if (dialog.removalTimeout) {\n      clearTimeout(dialog.removalTimeout);\n    }\n\n    this.state.next((current) => {\n      const newDialogs = { ...current.dialogsById };\n      delete newDialogs[id];\n      return {\n        ...current,\n        dialogsById: newDialogs,\n      };\n    });\n  }\n\n  /**\n   * Marks the dialog state as unused. If the dialog id is referenced again quickly,\n   * the state will not be removed. Otherwise, the state will be removed after\n   * a short timeout.\n   */\n  markForRemoval(id: DialogId) {\n    const dialog = this.state.getLatestValue().dialogsById[id];\n\n    if (!dialog) {\n      return;\n    }\n\n    this.state.next((current) => ({\n      ...current,\n      dialogsById: {\n        ...current.dialogsById,\n        [id]: {\n          ...dialog,\n          removalTimeout: setTimeout(() => {\n            this.remove(id);\n          }, 16),\n        },\n      },\n    }));\n  }\n}\n", "import React, { PropsWithChildren, useCallback } from 'react';\nimport { useDialogIsOpen, useOpenedDialogCount } from './hooks';\nimport { Portal } from '../Portal/Portal';\nimport { useDialogManager } from '../../context';\n\nexport const DialogPortalDestination = () => {\n  const { dialogManager } = useDialogManager();\n  const openedDialogCount = useOpenedDialogCount();\n\n  return (\n    <div\n      className='str-chat__dialog-overlay'\n      data-str-chat__portal-id={dialogManager.id}\n      data-testid='str-chat__dialog-overlay'\n      onClick={() => dialogManager.closeAll()}\n      style={\n        {\n          '--str-chat__dialog-overlay-height': openedDialogCount > 0 ? '100%' : '0',\n        } as React.CSSProperties\n      }\n    ></div>\n  );\n};\n\ntype DialogPortalEntryProps = {\n  dialogId: string;\n};\n\nexport const DialogPortalEntry = ({\n  children,\n  dialogId,\n}: PropsWithChildren<DialogPortalEntryProps>) => {\n  const { dialogManager } = useDialogManager();\n  const dialogIsOpen = useDialogIsOpen(dialogId);\n\n  const getPortalDestination = useCallback(\n    () => document.querySelector(`div[data-str-chat__portal-id=\"${dialogManager.id}\"]`),\n    [dialogManager.id],\n  );\n\n  return (\n    <Portal getPortalDestination={getPortalDestination} isOpen={dialogIsOpen}>\n      {children}\n    </Portal>\n  );\n};\n", "import { useCallback, useEffect } from 'react';\nimport { useDialogManager } from '../../../context';\nimport { useStateStore } from '../../../store';\n\nimport type { DialogManagerState, GetOrCreateDialogParams } from '../DialogManager';\n\nexport const useDialog = ({ id }: GetOrCreateDialogParams) => {\n  const { dialogManager } = useDialogManager();\n\n  useEffect(\n    () => () => {\n      // Since this cleanup can run even if the component is still mounted\n      // and dialog id is unchanged (e.g. in <StrictMode />), it's safer to\n      // mark state as unused and only remove it after a timeout, rather than\n      // to remove it immediately.\n      dialogManager.markForRemoval(id);\n    },\n    [dialogManager, id],\n  );\n\n  return dialogManager.getOrCreate({ id });\n};\n\nexport const useDialogIsOpen = (id: string) => {\n  const { dialogManager } = useDialogManager();\n  const dialogIsOpenSelector = useCallback(\n    ({ dialogsById }: DialogManagerState) => ({ isOpen: !!dialogsById[id]?.isOpen }),\n    [id],\n  );\n  return useStateStore(dialogManager.state, dialogIsOpenSelector).isOpen;\n};\n\nconst openedDialogCountSelector = (nextValue: DialogManagerState) => ({\n  openedDialogCount: Object.values(nextValue.dialogsById).reduce((count, dialog) => {\n    if (dialog.isOpen) return count + 1;\n    return count;\n  }, 0),\n});\n\nexport const useOpenedDialogCount = () => {\n  const { dialogManager } = useDialogManager();\n  return useStateStore(dialogManager.state, openedDialogCountSelector).openedDialogCount;\n};\n", "import { useCallback, useMemo } from 'react';\nimport { useSyncExternalStore } from 'use-sync-external-store/shim';\n\nimport type { StateStore } from 'stream-chat';\n\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nconst noop = () => {};\n\nexport function useStateStore<\n  T extends Record<string, unknown>,\n  O extends Readonly<Record<string, unknown> | Readonly<unknown[]>>,\n>(store: StateStore<T>, selector: (v: T) => O): O;\nexport function useStateStore<\n  T extends Record<string, unknown>,\n  O extends Readonly<Record<string, unknown> | Readonly<unknown[]>>,\n>(store: StateStore<T> | undefined, selector: (v: T) => O): O | undefined;\nexport function useStateStore<\n  T extends Record<string, unknown>,\n  O extends Readonly<Record<string, unknown> | Readonly<unknown[]>>,\n>(store: StateStore<T> | undefined, selector: (v: T) => O) {\n  const wrappedSubscription = useCallback(\n    (onStoreChange: () => void) => {\n      const unsubscribe = store?.subscribeWithSelector(selector, onStoreChange);\n      return unsubscribe ?? noop;\n    },\n    [store, selector],\n  );\n\n  const wrappedSnapshot = useMemo(() => {\n    let cachedTuple: [T, O];\n\n    return () => {\n      const currentValue = store?.getLatestValue();\n\n      if (!currentValue) return undefined;\n\n      // store value hasn't changed, no need to compare individual values\n      if (cachedTuple && cachedTuple[0] === currentValue) {\n        return cachedTuple[1];\n      }\n\n      const newlySelected = selector(currentValue);\n\n      // store value changed but selected values wouldn't have to, double-check selected\n      if (cachedTuple) {\n        let selectededAreEqualToCached = true;\n\n        for (const key in cachedTuple[1]) {\n          if (cachedTuple[1][key] === newlySelected[key]) continue;\n          selectededAreEqualToCached = false;\n          break;\n        }\n\n        if (selectededAreEqualToCached) return cachedTuple[1];\n      }\n\n      cachedTuple = [currentValue, newlySelected];\n      return cachedTuple[1];\n    };\n  }, [store, selector]);\n\n  const state = useSyncExternalStore(wrappedSubscription, wrappedSnapshot);\n\n  return state;\n}\n", "import { PropsWithChildren, ReactPortal, useLayoutEffect, useState } from 'react';\nimport { createPortal } from 'react-dom';\n\nexport type PortalProps = {\n  getPortalDestination: () => Element | null;\n  isOpen?: boolean;\n};\n\nexport const Portal = ({\n  children,\n  getPortalDestination,\n  isOpen,\n}: PropsWithChildren<PortalProps>): ReactPortal | null => {\n  const [portalDestination, setPortalDestination] = useState<Element | null>(null);\n\n  useLayoutEffect(() => {\n    const destination = getPortalDestination();\n    if (!destination || !isOpen) return;\n    setPortalDestination(destination);\n  }, [getPortalDestination, isOpen]);\n\n  if (!portalDestination) return null;\n\n  return createPortal(children, portalDestination);\n};\n", "import React, { PropsWithChildren, ReactNode, useContext } from 'react';\n\nimport type { Mute, ReactionResponse, ReactionSort, UserResponse } from 'stream-chat';\n\nimport type { ChannelActionContextValue } from './ChannelActionContext';\nimport type { StreamMessage } from './ChannelStateContext';\n\nimport type { ActionHandlerReturnType } from '../components/Message/hooks/useActionHandler';\nimport type { PinPermissions } from '../components/Message/hooks/usePinHandler';\nimport type { ReactEventHandler } from '../components/Message/types';\nimport type { MessageActionsArray } from '../components/Message/utils';\nimport type { MessageInputProps } from '../components/MessageInput/MessageInput';\nimport type { GroupStyle } from '../components/MessageList/utils';\nimport type {\n  ReactionDetailsComparator,\n  ReactionsComparator,\n  ReactionType,\n} from '../components/Reactions/types';\n\nimport type { RenderTextOptions } from '../components/Message/renderText';\nimport type { DefaultStreamChatGenerics, UnknownType } from '../types/types';\n\nexport type CustomMessageActions<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n  [key: string]: (\n    message: StreamMessage<StreamChatGenerics>,\n    event: React.BaseSyntheticEvent,\n  ) => Promise<void> | void;\n};\n\nexport type MessageContextValue<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n  /** If actions such as edit, delete, flag, mute are enabled on Message */\n  actionsEnabled: boolean;\n  /** Function to exit edit state */\n  clearEditingState: (event?: React.BaseSyntheticEvent) => void;\n  /** If the Message is in edit state */\n  editing: boolean;\n  /**\n   * Returns all allowed actions on message by current user e.g., ['edit', 'delete', 'flag', 'mute', 'pin', 'quote', 'react', 'reply'].\n   * Please check [Message](https://github.com/GetStream/stream-chat-react/blob/master/src/components/Message.tsx) component for default implementation.\n   */\n  getMessageActions: () => MessageActionsArray<string>;\n  /** Function to send an action in a Channel */\n  handleAction: ActionHandlerReturnType;\n  /** Function to delete a message in a Channel */\n  handleDelete: ReactEventHandler;\n  /** Function to edit a message in a Channel */\n  handleEdit: ReactEventHandler;\n  /** Function to fetch the message reactions */\n  handleFetchReactions: (\n    reactionType?: ReactionType<StreamChatGenerics>,\n    sort?: ReactionSort<StreamChatGenerics>,\n  ) => Promise<Array<ReactionResponse<StreamChatGenerics>>>;\n  /** Function to flag a message in a Channel */\n  handleFlag: ReactEventHandler;\n  /** Function to mark message and the messages that follow it as unread in a Channel */\n  handleMarkUnread: ReactEventHandler;\n  /** Function to mute a user in a Channel */\n  handleMute: ReactEventHandler;\n  /** Function to open a Thread on a Message */\n  handleOpenThread: ReactEventHandler;\n  /** Function to pin a Message in a Channel */\n  handlePin: ReactEventHandler;\n  /** Function to post a reaction on a Message */\n  handleReaction: (\n    reactionType: string,\n    event: React.BaseSyntheticEvent,\n  ) => Promise<void>;\n  /** Function to retry sending a Message */\n  handleRetry: ChannelActionContextValue<StreamChatGenerics>['retrySendMessage'];\n  /** Function that returns whether the Message belongs to the current user */\n  isMyMessage: () => boolean;\n  /** The message object */\n  message: StreamMessage<StreamChatGenerics>;\n  /** Indicates whether a message has not been read yet or has been marked unread */\n  messageIsUnread: boolean;\n  /** Handler function for a click event on an @mention in Message */\n  onMentionsClickMessage: ReactEventHandler;\n  /** Handler function for a hover event on an @mention in Message */\n  onMentionsHoverMessage: ReactEventHandler;\n  /** Handler function for a click event on the user that posted the Message */\n  onUserClick: ReactEventHandler;\n  /** Handler function for a hover event on the user that posted the Message */\n  onUserHover: ReactEventHandler;\n  /** Function to toggle the edit state on a Message */\n  setEditingState: ReactEventHandler;\n  /** Additional props for underlying MessageInput component, [available props](https://getstream.io/chat/docs/sdk/react/message-input-components/message_input/#props) */\n  additionalMessageInputProps?: MessageInputProps<StreamChatGenerics>;\n  /** Call this function to keep message list scrolled to the bottom when the scroll height increases, e.g. an element appears below the last message (only used in the `VirtualizedMessageList`) */\n  autoscrollToBottom?: () => void;\n  /** Message component configuration prop. If true, picking a reaction from the `ReactionSelector` component will close the selector */\n  closeReactionSelectorOnClick?: boolean;\n  /** Object containing custom message actions and function handlers */\n  customMessageActions?: CustomMessageActions<StreamChatGenerics>;\n  /** If true, the message is the last one in a group sent by a specific user (only used in the `VirtualizedMessageList`) */\n  endOfGroup?: boolean;\n  /** If true, the message is the first one in a group sent by a specific user (only used in the `VirtualizedMessageList`) */\n  firstOfGroup?: boolean;\n  /** Override the default formatting of the date. This is a function that has access to the original date object, returns a string  */\n  formatDate?: (date: Date) => string;\n  /** If true, group messages sent by each user (only used in the `VirtualizedMessageList`) */\n  groupedByUser?: boolean;\n  /** A list of styles to apply to this message, ie. top, bottom, single */\n  groupStyles?: GroupStyle[];\n  /** Whether to highlight and focus the message on load */\n  highlighted?: boolean;\n  /** Whether the threaded message is the first in the thread list */\n  initialMessage?: boolean;\n  /**\n   * A factory function that determines whether a message is AI generated or not.\n   */\n  isMessageAIGenerated?: (message: StreamMessage<StreamChatGenerics>) => boolean;\n  /** Latest message id on current channel */\n  lastReceivedId?: string | null;\n  /** DOMRect object for parent MessageList component */\n  messageListRect?: DOMRect;\n  /** Array of muted users coming from [ChannelStateContext](https://getstream.io/chat/docs/sdk/react/contexts/channel_state_context/#mutes) */\n  mutes?: Mute<StreamChatGenerics>[];\n  /** @deprecated in favor of `channelCapabilities - The user roles allowed to pin Messages in various channel types */\n  pinPermissions?: PinPermissions;\n  /** Sort options to provide to a reactions query */\n  reactionDetailsSort?: ReactionSort<StreamChatGenerics>;\n  /** A list of users that have read this Message */\n  readBy?: UserResponse<StreamChatGenerics>[];\n  /** Custom function to render message text content, defaults to the renderText function: [utils](https://github.com/GetStream/stream-chat-react/blob/master/src/utils.tsx) */\n  renderText?: (\n    text?: string,\n    mentioned_users?: UserResponse<StreamChatGenerics>[],\n    options?: RenderTextOptions,\n  ) => ReactNode;\n  /** Comparator function to sort the list of reacted users\n   * @deprecated use `reactionDetailsSort` instead\n   */\n  sortReactionDetails?: ReactionDetailsComparator;\n  /** Comparator function to sort reactions, defaults to chronological order */\n  sortReactions?: ReactionsComparator;\n  /** Whether or not the Message is in a Thread */\n  threadList?: boolean;\n  /** render HTML instead of markdown. Posting HTML is only allowed server-side */\n  unsafeHTML?: boolean;\n};\n\nexport const MessageContext = React.createContext<MessageContextValue | undefined>(\n  undefined,\n);\n\nexport const MessageProvider = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n  children,\n  value,\n}: PropsWithChildren<{\n  value: MessageContextValue<StreamChatGenerics>;\n}>) => (\n  <MessageContext.Provider value={value as unknown as MessageContextValue}>\n    {children}\n  </MessageContext.Provider>\n);\n\nexport const useMessageContext = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  _componentName?: string,\n) => {\n  const contextValue = useContext(MessageContext);\n\n  if (!contextValue) {\n    return {} as MessageContextValue<StreamChatGenerics>;\n  }\n\n  return contextValue as unknown as MessageContextValue<StreamChatGenerics>;\n};\n\n/**\n * Typescript currently does not support partial inference, so if MessageContext\n * typing is desired while using the HOC withMessageContext, the Props for the\n * wrapped component must be provided as the first generic.\n */\nexport const withMessageContext = <\n  P extends UnknownType,\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  Component: React.ComponentType<P>,\n) => {\n  const WithMessageContextComponent = (\n    props: Omit<P, keyof MessageContextValue<StreamChatGenerics>>,\n  ) => {\n    const messageContext = useMessageContext<StreamChatGenerics>();\n\n    return <Component {...(props as P)} {...messageContext} />;\n  };\n\n  WithMessageContextComponent.displayName = (\n    Component.displayName ||\n    Component.name ||\n    'Component'\n  ).replace('Base', '');\n\n  return WithMessageContextComponent;\n};\n", "import React, {\n  createContext,\n  ReactEventHandler,\n  useCallback,\n  useContext,\n  useMemo,\n} from 'react';\nimport { useMessageContext } from './MessageContext';\nimport { DefaultStreamChatGenerics, PropsWithChildrenOnly } from '../types/types';\nimport { StreamMessage } from './ChannelStateContext';\nimport { useChannelActionContext } from './ChannelActionContext';\nimport { isMessageBounced } from '../components';\n\nexport interface MessageBounceContextValue<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> {\n  handleDelete: ReactEventHandler;\n  handleEdit: ReactEventHandler;\n  handleRetry: ReactEventHandler;\n  message: StreamMessage<StreamChatGenerics>;\n}\n\nconst MessageBounceContext = createContext<MessageBounceContextValue | undefined>(\n  undefined,\n);\n\nexport function useMessageBounceContext<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(componentName?: string) {\n  const contextValue = useContext(MessageBounceContext);\n\n  if (!contextValue) {\n    console.warn(\n      `The useMessageBounceContext hook was called outside of the MessageBounceContext provider. The errored call is located in the ${componentName} component.`,\n    );\n\n    return {} as MessageBounceContextValue<StreamChatGenerics>;\n  }\n\n  return contextValue;\n}\n\nexport function MessageBounceProvider<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({ children }: PropsWithChildrenOnly) {\n  const {\n    handleRetry: doHandleRetry,\n    message,\n    setEditingState,\n  } = useMessageContext<StreamChatGenerics>('MessageBounceProvider');\n\n  if (!isMessageBounced(message)) {\n    console.warn(\n      `The MessageBounceProvider was rendered for a message that is not bounced. Have you missed the \"isMessageBounced\" check?`,\n    );\n  }\n\n  const { removeMessage } = useChannelActionContext('MessageBounceProvider');\n\n  const handleDelete: ReactEventHandler = useCallback(() => {\n    removeMessage(message);\n  }, [message, removeMessage]);\n\n  const handleEdit: ReactEventHandler = useCallback(\n    (e) => {\n      setEditingState(e);\n    },\n    [setEditingState],\n  );\n\n  const handleRetry = useCallback(() => {\n    doHandleRetry(message);\n  }, [doHandleRetry, message]);\n\n  const value = useMemo(\n    () => ({\n      handleDelete,\n      handleEdit,\n      handleRetry,\n      message,\n    }),\n    [handleDelete, handleEdit, handleRetry, message],\n  );\n\n  return (\n    <MessageBounceContext.Provider value={value}>\n      {children}\n    </MessageBounceContext.Provider>\n  );\n}\n", "import React, { createContext, PropsWithChildren, useContext } from 'react';\n\nimport type { TriggerSettings } from '../components/MessageInput/DefaultTriggerProvider';\nimport type { CooldownTimerState, MessageInputProps } from '../components/MessageInput';\nimport type {\n  CommandsListState,\n  MentionsListState,\n  MessageInputHookProps,\n  MessageInputState,\n} from '../components/MessageInput/hooks/useMessageInputState';\n\nimport type { CustomTrigger, DefaultStreamChatGenerics } from '../types/types';\n\nexport type MessageInputContextValue<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n  V extends CustomTrigger = CustomTrigger,\n> = MessageInputState<StreamChatGenerics> &\n  MessageInputHookProps<StreamChatGenerics> &\n  Omit<MessageInputProps<StreamChatGenerics, V>, 'Input'> &\n  CooldownTimerState & {\n    autocompleteTriggers?: TriggerSettings<StreamChatGenerics, V>;\n  } & CommandsListState &\n  MentionsListState;\n\nexport const MessageInputContext = createContext<\n  (MessageInputState & MessageInputHookProps) | undefined\n>(undefined);\n\nexport const MessageInputContextProvider = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n  V extends CustomTrigger = CustomTrigger,\n>({\n  children,\n  value,\n}: PropsWithChildren<{\n  value: MessageInputContextValue<StreamChatGenerics, V>;\n}>) => (\n  <MessageInputContext.Provider value={value as MessageInputContextValue}>\n    {children}\n  </MessageInputContext.Provider>\n);\n\nexport const useMessageInputContext = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n  V extends CustomTrigger = CustomTrigger,\n>(\n  componentName?: string,\n) => {\n  const contextValue = useContext(MessageInputContext);\n\n  if (!contextValue) {\n    console.warn(\n      `The useMessageInputContext hook was called outside of the MessageInputContext provider. Make sure this hook is called within the MessageInput's UI component. The errored call is located in the ${componentName} component.`,\n    );\n\n    return {} as MessageInputContextValue<StreamChatGenerics, V>;\n  }\n\n  return contextValue as MessageInputContextValue<StreamChatGenerics, V>;\n};\n", "import React, { createContext, PropsWithChildren, useContext } from 'react';\n\nexport type MessageListContextValue = {\n  /** The scroll container within which the messages and typing indicator are rendered */\n  listElement: HTMLDivElement | null;\n  /** Function that scrolls the `listElement` to the bottom. */\n  scrollToBottom: () => void;\n};\n\nexport const MessageListContext = createContext<MessageListContextValue | undefined>(\n  undefined,\n);\n\n/**\n * Context provider for components rendered within the `MessageList`\n */\nexport const MessageListContextProvider = ({\n  children,\n  value,\n}: PropsWithChildren<{\n  value: MessageListContextValue;\n}>) => (\n  <MessageListContext.Provider value={value as MessageListContextValue}>\n    {children}\n  </MessageListContext.Provider>\n);\n\nexport const useMessageListContext = (componentName?: string) => {\n  const contextValue = useContext(MessageListContext);\n\n  if (!contextValue) {\n    console.warn(\n      `The useMessageListContext hook was called outside of the MessageListContext provider. Make sure this hook is called within the MessageList component. The errored call is located in the ${componentName} component.`,\n    );\n\n    return {} as MessageListContextValue;\n  }\n\n  return contextValue as MessageListContextValue;\n};\n", "import React, { PropsWithChildren, useContext } from 'react';\nimport type { Poll } from 'stream-chat';\nimport type { DefaultStreamChatGenerics } from '../types';\n\nexport type PollContextValue<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n  poll: Poll<StreamChatGenerics>;\n};\n\nexport const PollContext = React.createContext<PollContextValue | undefined>(undefined);\n\nexport const PollProvider = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n  children,\n  poll,\n}: PropsWithChildren<{\n  poll: Poll<StreamChatGenerics>;\n}>) =>\n  poll ? (\n    <PollContext.Provider value={{ poll } as unknown as PollContextValue}>\n      {children}\n    </PollContext.Provider>\n  ) : null;\n\nexport const usePollContext = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>() => {\n  const contextValue = useContext(PollContext);\n  return contextValue as unknown as PollContextValue<StreamChatGenerics>;\n};\n", "import React, { PropsWithChildren, useContext } from 'react';\nimport Dayjs from 'dayjs';\nimport calendar from 'dayjs/plugin/calendar';\nimport localizedFormat from 'dayjs/plugin/localizedFormat';\n\nimport { getDisplayName } from './utils/getDisplayName';\nimport { defaultDateTimeParser, defaultTranslatorFunction } from '../i18n/utils';\n\nimport type { TFunction } from 'i18next';\nimport type { TranslationLanguages } from 'stream-chat';\n\nimport type { UnknownType } from '../types/types';\nimport type { TDateTimeParser } from '../i18n/types';\n\nDayjs.extend(calendar);\nDayjs.extend(localizedFormat);\n\nexport type TranslationContextValue = {\n  t: TFunction;\n  tDateTimeParser: TDateTimeParser;\n  userLanguage: TranslationLanguages;\n};\n\nexport const TranslationContext = React.createContext<TranslationContextValue>({\n  t: defaultTranslatorFunction,\n  tDateTimeParser: defaultDateTimeParser,\n  userLanguage: 'en',\n});\n\nexport const TranslationProvider = ({\n  children,\n  value,\n}: PropsWithChildren<{ value: TranslationContextValue }>) => (\n  <TranslationContext.Provider value={value}>{children}</TranslationContext.Provider>\n);\n\nexport const useTranslationContext = (componentName?: string) => {\n  const contextValue = useContext(TranslationContext);\n\n  if (!contextValue) {\n    console.warn(\n      `The useTranslationContext hook was called outside of the TranslationContext provider. Make sure this hook is called within a child of the Chat component. The errored call is located in the ${componentName} component.`,\n    );\n\n    return {} as TranslationContextValue;\n  }\n\n  return contextValue;\n};\n\nexport const withTranslationContext = <P extends UnknownType>(\n  Component: React.ComponentType<P>,\n) => {\n  const WithTranslationContextComponent = (\n    props: Omit<P, keyof TranslationContextValue>,\n  ) => {\n    const translationContext = useTranslationContext();\n\n    return <Component {...(props as P)} {...translationContext} />;\n  };\n\n  WithTranslationContextComponent.displayName = `WithTranslationContext${getDisplayName(\n    Component,\n  )}`;\n\n  return WithTranslationContextComponent;\n};\n", "import Dayjs from 'dayjs';\n\nimport type { TFunction } from 'i18next';\nimport type { Moment } from 'moment-timezone';\nimport type {\n  DateFormatterOptions,\n  PredefinedFormatters,\n  SupportedTranslations,\n  TDateTimeParserInput,\n  TDateTimeParserOutput,\n  TimestampFormatterOptions,\n} from './types';\n\nexport const notValidDateWarning =\n  'MessageTimestamp was called without a message, or message has invalid created_at date.';\nexport const noParsingFunctionWarning =\n  'MessageTimestamp was called but there is no datetime parsing function available';\n\nexport const isNumberOrString = (\n  output: TDateTimeParserOutput,\n): output is number | string => typeof output === 'string' || typeof output === 'number';\n\nexport const isDayOrMoment = (\n  output: TDateTimeParserOutput,\n): output is Dayjs.Dayjs | Moment => !!(output as Dayjs.Dayjs | Moment)?.isSame;\n\nexport const isDate = (output: TDateTimeParserOutput): output is Date =>\n  !!(output as Date)?.getMonth;\n\nexport function getDateString({\n  calendar,\n  calendarFormats,\n  format,\n  formatDate,\n  messageCreatedAt,\n  t,\n  tDateTimeParser,\n  timestampTranslationKey,\n}: DateFormatterOptions): string | number | null {\n  if (\n    !messageCreatedAt ||\n    (typeof messageCreatedAt === 'string' && !Date.parse(messageCreatedAt))\n  ) {\n    console.warn(notValidDateWarning);\n    return null;\n  }\n\n  if (typeof formatDate === 'function') {\n    return formatDate(new Date(messageCreatedAt));\n  }\n\n  if (t && timestampTranslationKey) {\n    const options: TimestampFormatterOptions = {};\n    if (typeof calendar !== 'undefined' && calendar !== null) options.calendar = calendar;\n    if (typeof calendarFormats !== 'undefined' && calendarFormats !== null)\n      options.calendarFormats = calendarFormats;\n    if (typeof format !== 'undefined' && format !== null) options.format = format;\n\n    const translatedTimestamp = t(timestampTranslationKey, {\n      ...options,\n      timestamp: new Date(messageCreatedAt),\n    });\n    const translationKeyFound = timestampTranslationKey !== translatedTimestamp;\n    if (translationKeyFound) return translatedTimestamp;\n  }\n\n  if (!tDateTimeParser) {\n    console.warn(noParsingFunctionWarning);\n    return null;\n  }\n\n  const parsedTime = tDateTimeParser(messageCreatedAt);\n\n  if (isDayOrMoment(parsedTime)) {\n    /**\n     * parsedTime.calendar is guaranteed on the type but is only\n     * available when a user calls dayjs.extend(calendar)\n     */\n    return calendar && parsedTime.calendar\n      ? parsedTime.calendar(undefined, calendarFormats || undefined)\n      : parsedTime.format(format || undefined);\n  }\n\n  if (isDate(parsedTime)) {\n    return parsedTime.toDateString();\n  }\n\n  if (isNumberOrString(parsedTime)) {\n    return parsedTime;\n  }\n\n  return null;\n}\n\nexport const predefinedFormatters: PredefinedFormatters = {\n  timestampFormatter:\n    (streamI18n) =>\n    (\n      value,\n      _,\n      {\n        calendarFormats,\n        ...options\n      }: Pick<TimestampFormatterOptions, 'calendar' | 'format'> & {\n        calendarFormats?: Record<string, string> | string;\n      },\n    ) => {\n      let parsedCalendarFormats;\n      try {\n        if (!options.calendar) {\n          parsedCalendarFormats = {};\n        } else if (typeof calendarFormats === 'string') {\n          parsedCalendarFormats = JSON.parse(calendarFormats);\n        } else if (typeof calendarFormats === 'object') {\n          parsedCalendarFormats = calendarFormats;\n        }\n      } catch (e) {\n        console.error('[TIMESTAMP FORMATTER]', e);\n      }\n\n      const result = getDateString({\n        ...options,\n        calendarFormats: parsedCalendarFormats,\n        messageCreatedAt: value,\n        tDateTimeParser: streamI18n.tDateTimeParser,\n      });\n      if (!result || typeof result === 'number') {\n        return JSON.stringify(value);\n      }\n      return result;\n    },\n};\n\nexport const defaultTranslatorFunction: TFunction = <tResult = string>(key: tResult) =>\n  key;\n\nexport const defaultDateTimeParser = (input?: TDateTimeParserInput) => Dayjs(input);\n\nexport const isLanguageSupported = (\n  language: string,\n): language is SupportedTranslations => {\n  const translations = [\n    'de',\n    'en',\n    'es',\n    'fr',\n    'hi',\n    'it',\n    'ja',\n    'ko',\n    'nl',\n    'pt',\n    'ru',\n    'tr',\n  ];\n  return translations.some((translation) => language === translation);\n};\n", "import React, { PropsWithChildren, useContext } from 'react';\n\nimport type { ChannelState as StreamChannelState } from 'stream-chat';\n\nimport type { DefaultStreamChatGenerics, UnknownType } from '../types/types';\n\nexport type TypingContextValue<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n  typing?: StreamChannelState<StreamChatGenerics>['typing'];\n};\n\nexport const TypingContext = React.createContext<TypingContextValue | undefined>(\n  undefined,\n);\n\nexport const TypingProvider = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n  children,\n  value,\n}: PropsWithChildren<{\n  value: TypingContextValue<StreamChatGenerics>;\n}>) => (\n  <TypingContext.Provider value={value as unknown as TypingContextValue}>\n    {children}\n  </TypingContext.Provider>\n);\n\nexport const useTypingContext = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  componentName?: string,\n) => {\n  const contextValue = useContext(TypingContext);\n\n  if (!contextValue) {\n    console.warn(\n      `The useTypingContext hook was called outside of the TypingContext provider. Make sure this hook is called within a child of the Channel component. The errored call is located in the ${componentName} component.`,\n    );\n\n    return {} as TypingContextValue<StreamChatGenerics>;\n  }\n\n  return contextValue as TypingContextValue<StreamChatGenerics>;\n};\n\n/**\n * Typescript currently does not support partial inference, so if TypingContext\n * typing is desired while using the HOC withTypingContext, the Props for the\n * wrapped component must be provided as the first generic.\n */\nexport const withTypingContext = <\n  P extends UnknownType,\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  Component: React.ComponentType<P>,\n) => {\n  const WithTypingContextComponent = (\n    props: Omit<P, keyof TypingContextValue<StreamChatGenerics>>,\n  ) => {\n    const typingContext = useTypingContext<StreamChatGenerics>();\n\n    return <Component {...(props as P)} {...typingContext} />;\n  };\n\n  WithTypingContextComponent.displayName = (\n    Component.displayName ||\n    Component.name ||\n    'Component'\n  ).replace('Base', '');\n\n  return WithTypingContextComponent;\n};\n", "import React, { PropsWithChildren, useContext } from 'react';\nimport { ComponentContext, ComponentContextValue } from './ComponentContext';\n\nexport function WithComponents({\n  children,\n  overrides,\n}: PropsWithChildren<{ overrides: Partial<ComponentContextValue> }>) {\n  const parentOverrides = useContext(ComponentContext);\n  const actualOverrides: ComponentContextValue = { ...parentOverrides, ...overrides };\n  return (\n    <ComponentContext.Provider value={actualOverrides}>\n      {children}\n    </ComponentContext.Provider>\n  );\n}\n", "import React from 'react';\n\nimport type { Attachment } from 'stream-chat';\n\nimport { DownloadButton, FileSizeIndicator, PlayButton, ProgressBar } from './components';\nimport { useAudioController } from './hooks/useAudioController';\n\nimport type { DefaultStreamChatGenerics } from '../../types/types';\n\nexport type AudioProps<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n  // fixme: rename og to attachment\n  og: Attachment<StreamChatGenerics>;\n};\n\nconst UnMemoizedAudio = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  props: AudioProps<StreamChatGenerics>,\n) => {\n  const {\n    og: { asset_url, file_size, mime_type, title },\n  } = props;\n  const { audioRef, isPlaying, progress, seek, togglePlay } = useAudioController({\n    mimeType: mime_type,\n  });\n\n  if (!asset_url) return null;\n\n  const dataTestId = 'audio-widget';\n  const rootClassName = 'str-chat__message-attachment-audio-widget';\n\n  return (\n    <div className={rootClassName} data-testid={dataTestId}>\n      <audio ref={audioRef}>\n        <source data-testid='audio-source' src={asset_url} type='audio/mp3' />\n      </audio>\n      <div className='str-chat__message-attachment-audio-widget--play-controls'>\n        <PlayButton isPlaying={isPlaying} onClick={togglePlay} />\n      </div>\n      <div className='str-chat__message-attachment-audio-widget--text'>\n        <div className='str-chat__message-attachment-audio-widget--text-first-row'>\n          <div className='str-chat__message-attachment-audio-widget--title'>{title}</div>\n          <DownloadButton assetUrl={asset_url} />\n        </div>\n        <div className='str-chat__message-attachment-audio-widget--text-second-row'>\n          <FileSizeIndicator fileSize={file_size} />\n          <ProgressBar onClick={seek} progress={progress} />\n        </div>\n      </div>\n    </div>\n  );\n};\n\n/**\n * Audio attachment with play/pause button and progress bar\n */\nexport const Audio = React.memo(UnMemoizedAudio) as typeof UnMemoizedAudio;\n", "import React from 'react';\n\nimport { DownloadIcon } from '../icons';\nimport { SafeAnchor } from '../../SafeAnchor';\n\ntype DownloadButtonProps = {\n  assetUrl?: string;\n};\n\nexport const DownloadButton = ({ assetUrl }: DownloadButtonProps) => (\n  <SafeAnchor\n    className='str-chat__message-attachment-file--item-download'\n    download\n    href={assetUrl}\n    target='_blank'\n  >\n    <DownloadIcon className='str-chat__message-attachment-download-icon' />\n  </SafeAnchor>\n);\n", "import React from 'react';\nimport type { IconProps } from '../../types/types';\n\nexport const DownloadIcon = ({ className }: IconProps) => (\n  <svg\n    className={className}\n    data-testid='download'\n    fill='none'\n    height='24'\n    viewBox='0 0 24 24'\n    width='24'\n    xmlns='http://www.w3.org/2000/svg'\n  >\n    <path\n      d='M19.35 10.04C18.67 6.59 15.64 4 12 4C9.11 4 6.6 5.64 5.35 8.04C2.34 8.36 0 10.91 0 14C0 17.31 2.69 20 6 20H19C21.76 20 24 17.76 24 15C24 12.36 21.95 10.22 19.35 10.04ZM19 18H6C3.79 18 2 16.21 2 14C2 11.95 3.53 10.24 5.56 10.03L6.63 9.92L7.13 8.97C8.08 7.14 9.94 6 12 6C14.62 6 16.88 7.86 17.39 10.43L17.69 11.93L19.22 12.04C20.78 12.14 22 13.45 22 15C22 16.65 20.65 18 19 18ZM13.45 10H10.55V13H8L12 17L16 13H13.45V10Z'\n      fill='black'\n    />\n  </svg>\n);\n\nexport const PlayTriangleIcon = () => (\n  <svg fill='none' viewBox='0 0 12 14' xmlns='http://www.w3.org/2000/svg'>\n    <path d='M0.5 0V14L11.5 7L0.5 0Z' fill='#080707' />\n  </svg>\n);\n\nexport const PauseIcon = () => (\n  <svg fill='none' viewBox='0 0 12 14' xmlns='http://www.w3.org/2000/svg'>\n    <path d='M0 14H4V0H0V14ZM8 0V14H12V0H8Z' fill='#080707' />\n  </svg>\n);\n", "import React, { PropsWithChildren } from 'react';\nimport { sanitizeUrl } from '@braintree/sanitize-url';\nimport { useTranslationContext } from '../../context';\n\n/**\n * Similar to a regular anchor tag, but it sanitizes the href value and prevents XSS\n */\nexport type SafeAnchorProps = {\n  /** Set the className for the anchor tag element */\n  className?: string;\n  /** Specifies that the target (href attribute) will be downloaded instead of navigating to a file */\n  download?: boolean;\n  /** Set the href attribute for the anchor tag element */\n  href?: string;\n  /** Set the rel attribute for the anchor tag element */\n  rel?: string;\n  /** Set the target attribute for the anchor tag element */\n  target?: string;\n};\n\nconst UnMemoizedSafeAnchor = (props: PropsWithChildren<SafeAnchorProps>) => {\n  const { children, className, download, href, rel, target } = props;\n  const { t } = useTranslationContext('SafeAnchor');\n  if (!href) return null;\n  const sanitized = sanitizeUrl(href);\n  return (\n    <a\n      aria-label={t('aria/Attachment')}\n      className={className}\n      download={download}\n      href={sanitized}\n      rel={rel}\n      target={target}\n    >\n      {children}\n    </a>\n  );\n};\n\nexport const SafeAnchor = React.memo(UnMemoizedSafeAnchor) as typeof UnMemoizedSafeAnchor;\n", "import React from 'react';\nimport { prettifyFileSize } from '../../MessageInput/hooks/utils';\n\ntype FileSizeIndicatorProps = {\n  /** file size in byte */\n  fileSize?: number;\n  /**\n   The maximum number of fraction digits to display. If not set, the default behavior is to round to 3 significant digits.\n   @default undefined\n   */\n  maximumFractionDigits?: number;\n};\n\nexport const FileSizeIndicator = ({\n  fileSize,\n  maximumFractionDigits,\n}: FileSizeIndicatorProps) => {\n  if (!(fileSize && Number.isFinite(Number(fileSize)))) return null;\n\n  return (\n    <span\n      className='str-chat__message-attachment-file--item-size'\n      data-testid='file-size-indicator'\n    >\n      {prettifyFileSize(fileSize, maximumFractionDigits)}\n    </span>\n  );\n};\n", "export const DEFAULT_INITIAL_CHANNEL_PAGE_SIZE = 25;\nexport const DEFAULT_NEXT_CHANNEL_PAGE_SIZE = 100;\nexport const DEFAULT_JUMP_TO_PAGE_SIZE = 100;\nexport const DEFAULT_THREAD_PAGE_SIZE = 50;\nexport const DEFAULT_LOAD_PAGE_SCROLL_THRESHOLD = 250;\nexport const DEFAULT_UPLOAD_SIZE_LIMIT_BYTES = 100 * 1024 * 1024; // 100 MB\nexport const DEFAULT_HIGHLIGHT_DURATION = 500;\n", "import type { AppSettingsAPIResponse, FileUploadConfig, UserResponse } from 'stream-chat';\n\nimport type { ChannelActionContextValue } from '../../../context/ChannelActionContext';\nimport type { ChatContextValue } from '../../../context/ChatContext';\nimport type { TranslationContextValue } from '../../../context/TranslationContext';\nimport type { DefaultStreamChatGenerics } from '../../../types/types';\nimport { DEFAULT_UPLOAD_SIZE_LIMIT_BYTES } from '../../../constants/limits';\n\nexport const accentsMap: { [key: string]: string } = {\n  a: '\u00E1|\u00E0|\u00E3|\u00E2|\u00C0|\u00C1|\u00C3|\u00C2',\n  c: '\u00E7|\u00C7',\n  e: '\u00E9|\u00E8|\u00EA|\u00C9|\u00C8|\u00CA',\n  i: '\u00ED|\u00EC|\u00EE|\u00CD|\u00CC|\u00CE',\n  n: '\u00F1|\u00D1',\n  o: '\u00F3|\u00F2|\u00F4|\u0151|\u00F5|\u00D3|\u00D2|\u00D4|\u00D5',\n  u: '\u00FA|\u00F9|\u00FB|\u00FC|\u00DA|\u00D9|\u00DB|\u00DC',\n};\n\nexport const removeDiacritics = (text?: string) => {\n  if (!text) return '';\n  return Object.keys(accentsMap).reduce(\n    (acc, current) => acc.replace(new RegExp(accentsMap[current], 'g'), current),\n    text,\n  );\n};\n\nexport const calculateLevenshtein = (query: string, name: string) => {\n  if (query.length === 0) return name.length;\n  if (name.length === 0) return query.length;\n\n  const matrix = [];\n\n  let i;\n  for (i = 0; i <= name.length; i++) {\n    matrix[i] = [i];\n  }\n\n  let j;\n  for (j = 0; j <= query.length; j++) {\n    matrix[0][j] = j;\n  }\n\n  for (i = 1; i <= name.length; i++) {\n    for (j = 1; j <= query.length; j++) {\n      if (name.charAt(i - 1) === query.charAt(j - 1)) {\n        matrix[i][j] = matrix[i - 1][j - 1];\n      } else {\n        matrix[i][j] = Math.min(\n          matrix[i - 1][j - 1] + 1, // substitution\n          Math.min(\n            matrix[i][j - 1] + 1, // insertion\n            matrix[i - 1][j] + 1,\n          ),\n        ); // deletion\n      }\n    }\n  }\n\n  return matrix[name.length][query.length];\n};\n\nexport type SearchLocalUserParams<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n  ownUserId: string | undefined;\n  query: string;\n  text: string;\n  users: UserResponse<StreamChatGenerics>[];\n  useMentionsTransliteration?: boolean;\n};\n\nexport const searchLocalUsers = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  params: SearchLocalUserParams<StreamChatGenerics>,\n): UserResponse<StreamChatGenerics>[] => {\n  const { ownUserId, query, text, useMentionsTransliteration, users } = params;\n\n  const matchingUsers = users.filter((user) => {\n    if (user.id === ownUserId) return false;\n    if (!query) return true;\n\n    let updatedId = removeDiacritics(user.id).toLowerCase();\n    let updatedName = removeDiacritics(user.name).toLowerCase();\n    let updatedQuery = removeDiacritics(query).toLowerCase();\n\n    if (useMentionsTransliteration) {\n      (async () => {\n        // eslint-disable-next-line import/no-extraneous-dependencies\n        const { default: transliterate } = await import('@stream-io/transliterate');\n        updatedName = transliterate(user.name || '').toLowerCase();\n        updatedQuery = transliterate(query).toLowerCase();\n        updatedId = transliterate(user.id).toLowerCase();\n      })();\n    }\n\n    const maxDistance = 3;\n    const lastDigits = text.slice(-(maxDistance + 1)).includes('@');\n\n    if (updatedName) {\n      const levenshtein = calculateLevenshtein(updatedQuery, updatedName);\n      if (\n        updatedName.includes(updatedQuery) ||\n        (levenshtein <= maxDistance && lastDigits)\n      ) {\n        return true;\n      }\n    }\n\n    const levenshtein = calculateLevenshtein(updatedQuery, updatedId);\n\n    return updatedId.includes(updatedQuery) || (levenshtein <= maxDistance && lastDigits);\n  });\n\n  return matchingUsers;\n};\n\ntype CheckUploadPermissionsParams<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n  addNotification: ChannelActionContextValue<StreamChatGenerics>['addNotification'];\n  file: File;\n  getAppSettings: ChatContextValue<StreamChatGenerics>['getAppSettings'];\n  t: TranslationContextValue['t'];\n  uploadType: 'image' | 'file';\n};\n\nexport const checkUploadPermissions = async <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  params: CheckUploadPermissionsParams<StreamChatGenerics>,\n) => {\n  const { addNotification, file, getAppSettings, t, uploadType } = params;\n\n  let appSettings: AppSettingsAPIResponse<StreamChatGenerics> | null = null;\n  appSettings = await getAppSettings();\n\n  const {\n    allowed_file_extensions,\n    allowed_mime_types,\n    blocked_file_extensions,\n    blocked_mime_types,\n    size_limit,\n  } =\n    ((uploadType === 'image'\n      ? appSettings?.app?.image_upload_config\n      : appSettings?.app?.file_upload_config) as FileUploadConfig) || {};\n\n  const sendNotAllowedErrorNotification = () =>\n    addNotification(\n      t(`Upload type: \"{{ type }}\" is not allowed`, {\n        type: file.type || 'unknown type',\n      }),\n      'error',\n    );\n\n  if (allowed_file_extensions?.length) {\n    const allowed = allowed_file_extensions.some((ext) =>\n      file.name.toLowerCase().endsWith(ext.toLowerCase()),\n    );\n\n    if (!allowed) {\n      sendNotAllowedErrorNotification();\n      return false;\n    }\n  }\n\n  if (blocked_file_extensions?.length) {\n    const blocked = blocked_file_extensions.some((ext) =>\n      file.name.toLowerCase().endsWith(ext.toLowerCase()),\n    );\n\n    if (blocked) {\n      sendNotAllowedErrorNotification();\n      return false;\n    }\n  }\n\n  if (allowed_mime_types?.length) {\n    const allowed = allowed_mime_types.some(\n      (type) => type.toLowerCase() === file.type?.toLowerCase(),\n    );\n\n    if (!allowed) {\n      sendNotAllowedErrorNotification();\n      return false;\n    }\n  }\n\n  if (blocked_mime_types?.length) {\n    const blocked = blocked_mime_types.some(\n      (type) => type.toLowerCase() === file.type?.toLowerCase(),\n    );\n\n    if (blocked) {\n      sendNotAllowedErrorNotification();\n      return false;\n    }\n  }\n\n  const sizeLimit = size_limit || DEFAULT_UPLOAD_SIZE_LIMIT_BYTES;\n  if (file.size && file.size > sizeLimit) {\n    addNotification(\n      t('File is too large: {{ size }}, maximum upload size is {{ limit }}', {\n        limit: prettifyFileSize(sizeLimit),\n        size: prettifyFileSize(file.size),\n      }),\n      'error',\n    );\n    return false;\n  }\n\n  return true;\n};\n\nexport function prettifyFileSize(bytes: number, precision = 3) {\n  const units = ['B', 'kB', 'MB', 'GB'];\n  const exponent = Math.min(\n    Math.floor(Math.log(bytes) / Math.log(1024)),\n    units.length - 1,\n  );\n  const mantissa = bytes / 1024 ** exponent;\n  const formattedMantissa =\n    precision === 0 ? Math.round(mantissa).toString() : mantissa.toPrecision(precision);\n  return `${formattedMantissa} ${units[exponent]}`;\n}\n", "import clsx from 'clsx';\nimport React from 'react';\n\nexport type ProgressBarProps = {\n  /** Progress expressed in fractional number value btw 0 and 100. */\n  progress: number;\n} & Pick<React.ComponentProps<'div'>, 'className' | 'onClick'>;\n\nexport const ProgressBar = ({ className, onClick, progress }: ProgressBarProps) => (\n  <div\n    className={clsx(\n      'str-chat__message-attachment-audio-widget--progress-track',\n      className,\n    )}\n    data-progress={progress}\n    data-testid='audio-progress'\n    onClick={onClick}\n    role='progressbar'\n    style={\n      {\n        '--str-chat__message-attachment-audio-widget-progress': progress + '%',\n      } as React.CSSProperties\n    }\n  >\n    <div\n      className='str-chat__message-attachment-audio-widget--progress-slider'\n      style={{ left: `${progress}px` }}\n    />\n  </div>\n);\n", "import React from 'react';\n\nexport type PlaybackRateButtonProps = React.ComponentProps<'button'>;\n\nexport const PlaybackRateButton = ({ children, onClick }: PlaybackRateButtonProps) => (\n  <button\n    className='str-chat__message_attachment__playback-rate-button'\n    data-testid='playback-rate-button'\n    onClick={onClick}\n  >\n    {children}\n  </button>\n);\n", "import React from 'react';\nimport { PauseIcon, PlayTriangleIcon } from '../icons';\n\ntype PlayButtonProps = {\n  isPlaying: boolean;\n  onClick: () => void;\n};\n\nexport const PlayButton = ({ isPlaying, onClick }: PlayButtonProps) => (\n  <button\n    className='str-chat__message-attachment-audio-widget--play-button'\n    data-testid={isPlaying ? 'pause-audio' : 'play-audio'}\n    onClick={onClick}\n  >\n    {isPlaying ? <PauseIcon /> : <PlayTriangleIcon />}\n  </button>\n);\n", "import throttle from 'lodash.throttle';\nimport React, {\n  PointerEventHandler,\n  useCallback,\n  useEffect,\n  useLayoutEffect,\n  useMemo,\n  useRef,\n  useState,\n} from 'react';\nimport clsx from 'clsx';\nimport { resampleWaveformData } from '../audioSampling';\nimport type { SeekFn } from '../hooks/useAudioController';\n\ntype WaveProgressBarProps = {\n  /** Function that allows to change the track progress */\n  seek: SeekFn;\n  /** The array of fractional number values between 0 and 1 representing the height of amplitudes */\n  waveformData: number[];\n  /** Allows to specify the number of bars into which the original waveformData array should be resampled */\n  amplitudesCount?: number;\n  /** Progress expressed in fractional number value btw 0 and 100. */\n  progress?: number;\n  relativeAmplitudeBarWidth?: number;\n  relativeAmplitudeGap?: number;\n};\n\nexport const WaveProgressBar = ({\n  amplitudesCount = 40,\n  progress = 0,\n  relativeAmplitudeBarWidth = 2,\n  relativeAmplitudeGap = 1,\n  seek,\n  waveformData,\n}: WaveProgressBarProps) => {\n  const [progressIndicator, setProgressIndicator] = useState<HTMLDivElement | null>(null);\n  const isDragging = useRef(false);\n  const [root, setRoot] = useState<HTMLDivElement | null>(null);\n  const [trackAxisX, setTrackAxisX] = useState<{\n    barCount: number;\n    barWidth: number;\n    gap: number;\n  }>();\n  const lastRootWidth = useRef<number>(undefined);\n\n  const handleDragStart: PointerEventHandler<HTMLDivElement> = (e) => {\n    e.preventDefault();\n    if (!progressIndicator) return;\n    isDragging.current = true;\n    progressIndicator.style.cursor = 'grabbing';\n  };\n\n  const handleDrag: PointerEventHandler<HTMLDivElement> = (e) => {\n    if (!isDragging.current) return;\n    // Due to throttling of seek, it is necessary to create a copy (snapshot) of the event.\n    // Otherwise, the event would be nullified at the point when the throttled function is executed.\n    seek({ ...e });\n  };\n\n  const handleDragStop = useCallback(() => {\n    if (!progressIndicator) return;\n    isDragging.current = false;\n    progressIndicator.style.removeProperty('cursor');\n  }, [progressIndicator]);\n\n  const getTrackAxisX = useMemo(\n    () =>\n      throttle((rootWidth: number) => {\n        if (rootWidth === lastRootWidth.current) return;\n        lastRootWidth.current = rootWidth;\n        const possibleAmpCount = Math.floor(\n          rootWidth / (relativeAmplitudeGap + relativeAmplitudeBarWidth),\n        );\n        const tooManyAmplitudesToRender = possibleAmpCount < amplitudesCount;\n        const barCount = tooManyAmplitudesToRender ? possibleAmpCount : amplitudesCount;\n        const amplitudeBarWidthToGapRatio =\n          relativeAmplitudeBarWidth / (relativeAmplitudeBarWidth + relativeAmplitudeGap);\n        const barWidth = barCount && (rootWidth / barCount) * amplitudeBarWidthToGapRatio;\n\n        setTrackAxisX({\n          barCount,\n          barWidth,\n          gap: barWidth * (relativeAmplitudeGap / relativeAmplitudeBarWidth),\n        });\n      }, 1),\n    [relativeAmplitudeBarWidth, relativeAmplitudeGap, amplitudesCount],\n  );\n\n  const resampledWaveformData = useMemo(\n    () => (trackAxisX ? resampleWaveformData(waveformData, trackAxisX.barCount) : []),\n    [trackAxisX, waveformData],\n  );\n\n  useEffect(() => {\n    document.addEventListener('pointerup', handleDragStop);\n    return () => {\n      document.removeEventListener('pointerup', handleDragStop);\n    };\n  }, [handleDragStop]);\n\n  useEffect(() => {\n    if (!root || typeof ResizeObserver === 'undefined') return;\n    const observer = new ResizeObserver(([entry]) => {\n      getTrackAxisX(entry.contentRect.width);\n    });\n    observer.observe(root);\n\n    return () => {\n      observer.disconnect();\n    };\n  }, [getTrackAxisX, root]);\n\n  useLayoutEffect(() => {\n    if (!root) return;\n    const { width: rootWidth } = root.getBoundingClientRect();\n    getTrackAxisX(rootWidth);\n  }, [getTrackAxisX, root]);\n\n  if (!waveformData.length || trackAxisX?.barCount === 0) return null;\n\n  return (\n    <div\n      className='str-chat__wave-progress-bar__track'\n      data-testid='wave-progress-bar-track'\n      onClick={seek}\n      onPointerDown={handleDragStart}\n      onPointerMove={handleDrag}\n      onPointerUp={handleDragStop}\n      ref={setRoot}\n      role='progressbar'\n      style={\n        {\n          '--str-chat__voice-recording-amplitude-bar-gap-width': trackAxisX?.gap + 'px',\n        } as React.CSSProperties\n      }\n    >\n      {resampledWaveformData.map((amplitude, i) => (\n        <div\n          className={clsx('str-chat__wave-progress-bar__amplitude-bar', {\n            ['str-chat__wave-progress-bar__amplitude-bar--active']:\n              progress > (i / resampledWaveformData.length) * 100,\n          })}\n          data-testid='amplitude-bar'\n          key={`amplitude-${i}`}\n          style={\n            {\n              '--str-chat__voice-recording-amplitude-bar-width':\n                trackAxisX?.barWidth + 'px',\n              '--str-chat__wave-progress-bar__amplitude-bar-height': amplitude\n                ? amplitude * 100 + '%'\n                : '0%',\n            } as React.CSSProperties\n          }\n        />\n      ))}\n      <div\n        className='str-chat__wave-progress-bar__progress-indicator'\n        data-testid='wave-progress-bar-progress-indicator'\n        ref={setProgressIndicator}\n        style={{ left: `${progress < 0 ? 0 : progress > 100 ? 100 : progress}%` }}\n      />\n    </div>\n  );\n};\n", "import { divMod } from './utils';\n\nexport const resampleWaveformData = (waveformData: number[], amplitudesCount: number) =>\n  waveformData.length === amplitudesCount\n    ? waveformData\n    : waveformData.length > amplitudesCount\n      ? downSample(waveformData, amplitudesCount)\n      : upSample(waveformData, amplitudesCount);\n\n/**\n * The downSample function uses the Largest-Triangle-Three-Buckets (LTTB) algorithm.\n * See the thesis Downsampling Time Series for Visual Representation by Sveinn Steinarsson for more (https://skemman.is/bitstream/1946/15343/3/SS_MSthesis.pdf)\n * @param data\n * @param targetOutputSize\n */\nexport function downSample(data: number[], targetOutputSize: number): number[] {\n  if (data.length <= targetOutputSize || targetOutputSize === 0) {\n    return data;\n  }\n\n  if (targetOutputSize === 1) return [mean(data)];\n\n  const result: number[] = [];\n  // bucket size adjusted due to the fact that the first and the last item in the original data array is kept in target output\n  const bucketSize = (data.length - 2) / (targetOutputSize - 2);\n  let lastSelectedPointIndex = 0;\n  result.push(data[lastSelectedPointIndex]); // Always add the first point\n  let maxAreaPoint, maxArea, triangleArea;\n\n  for (let bucketIndex = 1; bucketIndex < targetOutputSize - 1; bucketIndex++) {\n    const previousBucketRefPoint = data[lastSelectedPointIndex];\n    const nextBucketMean = getNextBucketMean(data, bucketIndex, bucketSize);\n\n    const currentBucketStartIndex = Math.floor((bucketIndex - 1) * bucketSize) + 1;\n    const nextBucketStartIndex = Math.floor(bucketIndex * bucketSize) + 1;\n    const countUnitsBetweenAtoC = 1 + nextBucketStartIndex - currentBucketStartIndex;\n\n    maxArea = triangleArea = -1;\n\n    for (\n      let currentPointIndex = currentBucketStartIndex;\n      currentPointIndex < nextBucketStartIndex;\n      currentPointIndex++\n    ) {\n      const countUnitsBetweenAtoB =\n        Math.abs(currentPointIndex - currentBucketStartIndex) + 1;\n      const countUnitsBetweenBtoC = countUnitsBetweenAtoC - countUnitsBetweenAtoB;\n      const currentPointValue = data[currentPointIndex];\n\n      triangleArea = triangleAreaHeron(\n        triangleBase(\n          Math.abs(previousBucketRefPoint - currentPointValue),\n          countUnitsBetweenAtoB,\n        ),\n        triangleBase(Math.abs(currentPointValue - nextBucketMean), countUnitsBetweenBtoC),\n        triangleBase(\n          Math.abs(previousBucketRefPoint - nextBucketMean),\n          countUnitsBetweenAtoC,\n        ),\n      );\n\n      if (triangleArea > maxArea) {\n        maxArea = triangleArea;\n        maxAreaPoint = data[currentPointIndex];\n        lastSelectedPointIndex = currentPointIndex;\n      }\n    }\n\n    if (typeof maxAreaPoint !== 'undefined') result.push(maxAreaPoint);\n  }\n\n  result.push(data[data.length - 1]); // Always add the last point\n\n  return result;\n}\n\nconst triangleAreaHeron = (a: number, b: number, c: number) => {\n  const s = (a + b + c) / 2;\n  return Math.sqrt(s * (s - a) * (s - b) * (s - c));\n};\nconst triangleBase = (a: number, b: number) => Math.sqrt(Math.pow(a, 2) + Math.pow(b, 2));\nconst mean = (values: number[]) =>\n  values.reduce((acc, value) => acc + value, 0) / values.length;\nconst getNextBucketMean = (\n  data: number[],\n  currentBucketIndex: number,\n  bucketSize: number,\n) => {\n  const nextBucketStartIndex = Math.floor(currentBucketIndex * bucketSize) + 1;\n  let nextNextBucketStartIndex = Math.floor((currentBucketIndex + 1) * bucketSize) + 1;\n  nextNextBucketStartIndex =\n    nextNextBucketStartIndex < data.length ? nextNextBucketStartIndex : data.length;\n\n  return mean(data.slice(nextBucketStartIndex, nextNextBucketStartIndex));\n};\nexport const upSample = (values: number[], targetSize: number) => {\n  if (!values.length) {\n    console.warn('Cannot extend empty array of amplitudes.');\n    return values;\n  }\n\n  if (values.length > targetSize) {\n    console.warn(\n      'Requested to extend the waveformData that is longer than the target list size',\n    );\n    return values;\n  }\n\n  if (targetSize === values.length) return values;\n\n  // eslint-disable-next-line prefer-const\n  let [bucketSize, remainder] = divMod(targetSize, values.length);\n  const result: number[] = [];\n\n  for (let i = 0; i < values.length; i++) {\n    const extra = remainder && remainder-- ? 1 : 0;\n    result.push(...Array(bucketSize + extra).fill(values[i]));\n  }\n  return result;\n};\n", "import throttle from 'lodash.throttle';\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { useChannelActionContext, useTranslationContext } from '../../../context';\n\nconst isSeekable = (audioElement: HTMLAudioElement) =>\n  !(audioElement.duration === Infinity || isNaN(audioElement.duration));\n\nexport const elementIsPlaying = (audioElement: HTMLAudioElement | null) =>\n  audioElement && !(audioElement.paused || audioElement.ended);\n\nconst logError = (e: Error) => console.error('[AUDIO PLAYER]', e);\n\nconst DEFAULT_PLAYBACK_RATES = [1.0, 1.5, 2.0];\n\nexport type SeekFn = (params: { clientX: number; currentTarget: HTMLDivElement }) => void;\n\ntype AudioControllerParams = {\n  /** Audio duration in seconds. */\n  durationSeconds?: number;\n  /** The audio MIME type that is checked before the audio is played. If the type is not supported the controller registers error in playbackError. */\n  mimeType?: string;\n  /** An array of fractional numeric values of playback speed to override the defaults (1.0, 1.5, 2.0) */\n  playbackRates?: number[];\n};\n\nexport const useAudioController = ({\n  durationSeconds,\n  mimeType,\n  playbackRates = DEFAULT_PLAYBACK_RATES,\n}: AudioControllerParams = {}) => {\n  const { addNotification } = useChannelActionContext('useAudioController');\n  const { t } = useTranslationContext('useAudioController');\n  const [isPlaying, setIsPlaying] = useState(false);\n  const [playbackError, setPlaybackError] = useState<Error>();\n  const [canPlayRecord, setCanPlayRecord] = useState(true);\n  const [secondsElapsed, setSecondsElapsed] = useState(0);\n  const [playbackRateIndex, setPlaybackRateIndex] = useState<number>(0);\n  const playTimeout = useRef<ReturnType<typeof setTimeout>>(undefined);\n  const audioRef = useRef<HTMLAudioElement | null>(null);\n\n  const registerError = useCallback(\n    (e: Error) => {\n      logError(e as Error);\n      setPlaybackError(e);\n      addNotification(e.message, 'error');\n    },\n    [addNotification],\n  );\n\n  const togglePlay = useCallback(async () => {\n    if (!audioRef.current) return;\n    clearTimeout(playTimeout.current);\n    playTimeout.current = undefined;\n    if (mimeType && !audioRef.current.canPlayType(mimeType)) {\n      registerError(\n        new Error(t('Recording format is not supported and cannot be reproduced')),\n      );\n      setCanPlayRecord(false);\n      return;\n    }\n    if (elementIsPlaying(audioRef.current)) {\n      audioRef.current.pause();\n      setIsPlaying(false);\n    } else {\n      playTimeout.current = setTimeout(() => {\n        if (!audioRef.current) return;\n        try {\n          audioRef.current.pause();\n          setIsPlaying(false);\n        } catch (e) {\n          registerError(new Error(t('Failed to play the recording')));\n        }\n      }, 2000);\n\n      try {\n        await audioRef.current.play();\n        setIsPlaying(true);\n      } catch (e) {\n        registerError(e as Error);\n        setIsPlaying(false);\n      } finally {\n        clearTimeout(playTimeout.current);\n        playTimeout.current = undefined;\n      }\n    }\n  }, [mimeType, registerError, t]);\n\n  const increasePlaybackRate = () => {\n    setPlaybackRateIndex((prev) => {\n      if (!audioRef.current) return prev;\n      const nextIndex = prev === playbackRates.length - 1 ? 0 : prev + 1;\n      audioRef.current.playbackRate = playbackRates[nextIndex];\n      return nextIndex;\n    });\n  };\n\n  const seek = useMemo<SeekFn>(\n    () =>\n      throttle(({ clientX, currentTarget }) => {\n        if (!(currentTarget && audioRef.current)) return;\n        if (!isSeekable(audioRef.current)) {\n          registerError(new Error(t('Cannot seek in the recording')));\n          return;\n        }\n\n        const { width, x } = currentTarget.getBoundingClientRect();\n\n        const ratio = (clientX - x) / width;\n        if (ratio > 1 || ratio < 0) return;\n        const currentTime = ratio * audioRef.current.duration;\n        setSecondsElapsed(currentTime);\n        audioRef.current.currentTime = currentTime;\n      }, 16),\n    [registerError, t],\n  );\n\n  useEffect(() => {\n    if (!audioRef.current) return;\n    const audioElement = audioRef.current;\n\n    const handleEnded = () => {\n      setSecondsElapsed(audioElement?.duration ?? durationSeconds ?? 0);\n      setIsPlaying(false);\n    };\n    audioElement.addEventListener('ended', handleEnded);\n\n    const handleError = () => {\n      addNotification(t<string>('Error reproducing the recording'), 'error');\n      setIsPlaying(false);\n    };\n    audioElement.addEventListener('error', handleError);\n\n    const handleTimeupdate = () => {\n      setSecondsElapsed(audioElement?.currentTime);\n    };\n    audioElement.addEventListener('timeupdate', handleTimeupdate);\n\n    return () => {\n      audioElement.pause();\n      audioElement.removeEventListener('ended', handleEnded);\n      audioElement.removeEventListener('error', handleError);\n      audioElement.removeEventListener('timeupdate', handleTimeupdate);\n    };\n  }, [addNotification, durationSeconds, t]);\n\n  return {\n    audioRef,\n    canPlayRecord,\n    increasePlaybackRate,\n    isPlaying,\n    playbackError,\n    playbackRate: playbackRates[playbackRateIndex],\n    progress:\n      audioRef.current && secondsElapsed\n        ? (secondsElapsed / audioRef.current.duration) * 100\n        : 0,\n    secondsElapsed,\n    seek,\n    togglePlay,\n  };\n};\n", "import React from 'react';\nimport type { Attachment } from 'stream-chat';\n\nimport {\n  FileSizeIndicator,\n  PlaybackRateButton,\n  PlayButton,\n  WaveProgressBar,\n} from './components';\nimport { useAudioController } from './hooks/useAudioController';\nimport { displayDuration } from './utils';\nimport { FileIcon } from '../ReactFileUtilities';\nimport { useTranslationContext } from '../../context';\n\nimport type { DefaultStreamChatGenerics } from '../../types';\n\nconst rootClassName = 'str-chat__message-attachment__voice-recording-widget';\n\nexport type VoiceRecordingPlayerProps<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Pick<VoiceRecordingProps<StreamChatGenerics>, 'attachment'> & {\n  /** An array of fractional numeric values of playback speed to override the defaults (1.0, 1.5, 2.0) */\n  playbackRates?: number[];\n};\n\nexport const VoiceRecordingPlayer = ({\n  attachment,\n  playbackRates,\n}: VoiceRecordingPlayerProps) => {\n  const { t } = useTranslationContext('VoiceRecordingPlayer');\n  const {\n    asset_url,\n    duration = 0,\n    mime_type,\n    title = t<string>('Voice message'),\n    waveform_data,\n  } = attachment;\n\n  const {\n    audioRef,\n    increasePlaybackRate,\n    isPlaying,\n    playbackRate,\n    progress,\n    secondsElapsed,\n    seek,\n    togglePlay,\n  } = useAudioController({\n    durationSeconds: duration ?? 0,\n    mimeType: mime_type,\n    playbackRates,\n  });\n\n  if (!asset_url) return null;\n\n  const displayedDuration = secondsElapsed || duration;\n\n  return (\n    <div className={rootClassName} data-testid='voice-recording-widget'>\n      <audio ref={audioRef}>\n        <source data-testid='audio-source' src={asset_url} type={mime_type} />\n      </audio>\n      <PlayButton isPlaying={isPlaying} onClick={togglePlay} />\n      <div className='str-chat__message-attachment__voice-recording-widget__metadata'>\n        <div\n          className='str-chat__message-attachment__voice-recording-widget__title'\n          data-testid='voice-recording-title'\n          title={title}\n        >\n          {title}\n        </div>\n        <div className='str-chat__message-attachment__voice-recording-widget__audio-state'>\n          <div className='str-chat__message-attachment__voice-recording-widget__timer'>\n            {attachment.duration ? (\n              displayDuration(displayedDuration)\n            ) : (\n              <FileSizeIndicator\n                fileSize={attachment.file_size}\n                maximumFractionDigits={0}\n              />\n            )}\n          </div>\n          <WaveProgressBar\n            progress={progress}\n            seek={seek}\n            waveformData={waveform_data || []}\n          />\n        </div>\n      </div>\n      <div className='str-chat__message-attachment__voice-recording-widget__right-section'>\n        {isPlaying ? (\n          <PlaybackRateButton disabled={!audioRef.current} onClick={increasePlaybackRate}>\n            {playbackRate.toFixed(1)}x\n          </PlaybackRateButton>\n        ) : (\n          <FileIcon big={true} mimeType={mime_type} size={40} />\n        )}\n      </div>\n    </div>\n  );\n};\n\nexport type QuotedVoiceRecordingProps<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Pick<VoiceRecordingProps<StreamChatGenerics>, 'attachment'>;\n\nexport const QuotedVoiceRecording = ({ attachment }: QuotedVoiceRecordingProps) => {\n  const { t } = useTranslationContext();\n  const title = attachment.title || t<string>('Voice message');\n  return (\n    <div className={rootClassName} data-testid='quoted-voice-recording-widget'>\n      <div className='str-chat__message-attachment__voice-recording-widget__metadata'>\n        {title && (\n          <div\n            className='str-chat__message-attachment__voice-recording-widget__title'\n            data-testid='voice-recording-title'\n            title={title}\n          >\n            {title}\n          </div>\n        )}\n        <div className='str-chat__message-attachment__voice-recording-widget__audio-state'>\n          <div className='str-chat__message-attachment__voice-recording-widget__timer'>\n            {attachment.duration ? (\n              displayDuration(attachment.duration)\n            ) : (\n              <FileSizeIndicator\n                fileSize={attachment.file_size}\n                maximumFractionDigits={0}\n              />\n            )}\n          </div>\n        </div>\n      </div>\n      <FileIcon big={true} mimeType={attachment.mime_type} size={34} />\n    </div>\n  );\n};\n\nexport type VoiceRecordingProps<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n  /** The attachment object from the message's attachment list. */\n  attachment: Attachment<StreamChatGenerics>;\n  /** A boolean flag to signal whether the attachment will be rendered inside the quoted reply. */\n  isQuoted?: boolean;\n};\n\nexport const VoiceRecording = ({ attachment, isQuoted }: VoiceRecordingProps) =>\n  isQuoted ? (\n    <QuotedVoiceRecording attachment={attachment} />\n  ) : (\n    <VoiceRecordingPlayer attachment={attachment} />\n  );\n", "import React from 'react';\n\nimport { iconMap, IconType } from './iconMap';\n\nexport type FileIconProps = {\n  big?: boolean;\n  className?: string;\n  filename?: string;\n  mimeType?: string;\n  size?: number; // big icon on sent attachment\n  sizeSmall?: number; // small icon on file upload preview\n  type?: IconType;\n};\n\nexport function mimeTypeToIcon(type: IconType = 'standard', mimeType?: string) {\n  const theMap = iconMap[type] || iconMap['standard'];\n\n  if (!mimeType) return theMap.fallback;\n\n  const icon = theMap[mimeType];\n  if (icon) return icon;\n\n  if (mimeType.startsWith('audio/')) return theMap['audio/'];\n  if (mimeType.startsWith('video/')) return theMap['video/'];\n  if (mimeType.startsWith('image/')) return theMap['image/'];\n  if (mimeType.startsWith('text/')) return theMap['text/'];\n\n  return theMap.fallback;\n}\n\nexport const FileIcon = (props: FileIconProps) => {\n  const {\n    big = false,\n    mimeType,\n    size = 50,\n    sizeSmall = 20,\n    type = 'standard',\n    ...rest\n  } = props;\n\n  const Icon = mimeTypeToIcon(type, mimeType);\n\n  return <Icon {...rest} size={big ? size : sizeSmall} />;\n};\n", "import React, { ComponentPropsWithoutRef } from 'react';\nimport clsx from 'clsx';\n\nexport type IconTypeV2 = 'standard' | 'alt';\n\nexport type IconProps = {\n  mimeType?: string;\n  size?: number;\n  type?: IconTypeV2;\n} & ComponentPropsWithoutRef<'svg'>;\n\nconst DEFAULT_SIZE = 40;\n\nexport const FilePdfIcon = ({\n  className = '',\n  size = DEFAULT_SIZE,\n  ...props\n}: IconProps) => (\n  <svg\n    className={clsx('rfu-file-pdf', className)}\n    fill='none'\n    height={size}\n    viewBox='0 0 34 40'\n    width={size}\n    xmlns='http://www.w3.org/2000/svg'\n    {...props}\n  >\n    <path\n      d='M0 3C0 1.34315 1.34315 0 3 0H23L34 11V37C34 38.6569 32.6569 40 31 40H3C1.34315 40 0 38.6569 0 37V3Z'\n      fill='#F5F5F5'\n    />\n    <path\n      d='M0 28H34V37C34 38.6569 32.6569 40 31 40H3C1.34315 40 0 38.6569 0 37V28Z'\n      fill='#E71A01'\n    />\n    <path d='M34 11L26 11C24.3431 11 23 9.65685 23 8V0L34 11Z' fill='#DBDBDB' />\n    <path\n      clipRule='evenodd'\n      d='M16.39 8.90641C16.215 8.27341 15.787 7.95841 15.426 8.00441C14.99 8.06141 14.526 8.32041 14.34 8.72941C13.854 9.82141 14.768 12.8934 15.028 13.7674L15.073 13.9194C14.015 17.1134 10.394 23.4264 8.62002 23.8534C8.58302 23.4364 8.80602 22.2294 11.146 20.7244C11.266 20.5944 11.406 20.4374 11.471 20.3344C9.49302 21.3004 6.93108 22.8514 8.47102 24.0114C8.55602 24.0774 8.68502 24.1314 8.83402 24.1874C10.014 24.6244 11.666 23.1954 13.327 19.9544C15.157 19.3504 16.633 18.8964 18.722 18.5804C21.005 20.1304 22.538 20.4464 23.578 20.0474C23.866 19.9354 24.32 19.5734 24.45 19.1004C24.515 18.8774 24.608 18.5154 24.432 18.2274C23.842 17.2664 21.452 17.5954 20.032 17.7904C19.779 17.8254 19.557 17.8564 19.381 17.8744C17.552 16.7704 16.289 14.8014 15.778 13.3804C15.857 13.0784 15.936 12.7894 16.012 12.5124C16.397 11.1124 16.701 10.0064 16.392 8.90641H16.39ZM24.45 19.1004C23.605 20.1404 21.628 19.4164 20.05 18.4224C21.507 18.2644 23.01 18.1724 23.661 18.3764C24.488 18.6364 24.459 19.0444 24.451 19.1004H24.45ZM15.601 12.7404C15.296 11.6544 14.868 9.24041 15.555 8.46041C16.701 9.11641 16.266 10.5384 15.825 11.9834C15.748 12.2364 15.671 12.4894 15.601 12.7404ZM13.439 19.5834C15.156 18.9054 16.354 18.4494 18.118 18.1254C16.818 16.9554 16.028 15.6834 15.378 14.3834C14.915 16.0554 13.948 18.5894 13.438 19.5834H13.439Z'\n      fill='#E71A01'\n      fillRule='evenodd'\n    />\n    <path\n      d='M13.1719 33.0127V37.4219H12.1875V32.3018H13.1001L13.1719 33.0127ZM15.5132 34.1099V34.1816C15.5132 34.4505 15.4813 34.7 15.4175 34.9302C15.356 35.1603 15.2648 35.3608 15.144 35.5317C15.0233 35.7004 14.8729 35.8325 14.6929 35.9282C14.5151 36.0216 14.3101 36.0684 14.0776 36.0684C13.8521 36.0684 13.6561 36.0228 13.4897 35.9316C13.3234 35.8405 13.1833 35.7129 13.0693 35.5488C12.9577 35.3825 12.8677 35.1899 12.7993 34.9712C12.731 34.7524 12.6785 34.5177 12.6421 34.2671V34.0791C12.6785 33.8102 12.731 33.5641 12.7993 33.3408C12.8677 33.1152 12.9577 32.9204 13.0693 32.7563C13.1833 32.59 13.3223 32.4613 13.4863 32.3701C13.6527 32.279 13.8475 32.2334 14.0708 32.2334C14.3055 32.2334 14.5117 32.2778 14.6895 32.3667C14.8695 32.4556 15.0199 32.5832 15.1406 32.7495C15.2637 32.9159 15.356 33.1141 15.4175 33.3442C15.4813 33.5744 15.5132 33.8296 15.5132 34.1099ZM14.5254 34.1816V34.1099C14.5254 33.9526 14.5117 33.8079 14.4844 33.6758C14.4593 33.5413 14.4183 33.424 14.3613 33.3237C14.3066 33.2235 14.2337 33.146 14.1426 33.0913C14.0537 33.0343 13.9455 33.0059 13.8179 33.0059C13.6834 33.0059 13.5684 33.0275 13.4727 33.0708C13.3792 33.1141 13.3029 33.1768 13.2437 33.2588C13.1844 33.3408 13.14 33.4388 13.1104 33.5527C13.0807 33.6667 13.0625 33.7954 13.0557 33.939V34.4141C13.0671 34.5827 13.099 34.7342 13.1514 34.8687C13.2038 35.0008 13.2847 35.1056 13.394 35.1831C13.5034 35.2606 13.647 35.2993 13.8247 35.2993C13.9546 35.2993 14.064 35.2708 14.1528 35.2139C14.2417 35.1546 14.3135 35.0737 14.3682 34.9712C14.4251 34.8687 14.465 34.7502 14.4878 34.6157C14.5129 34.4813 14.5254 34.3366 14.5254 34.1816ZM18.3091 35.1934V30.75H19.3003V36H18.4082L18.3091 35.1934ZM15.9712 34.1953V34.1235C15.9712 33.841 16.0031 33.5846 16.0669 33.3545C16.1307 33.1221 16.2241 32.9227 16.3472 32.7563C16.4702 32.59 16.6217 32.4613 16.8018 32.3701C16.9818 32.279 17.1868 32.2334 17.417 32.2334C17.6335 32.2334 17.8226 32.279 17.9844 32.3701C18.1484 32.4613 18.2874 32.5911 18.4014 32.7598C18.5176 32.9261 18.611 33.1232 18.6816 33.3511C18.7523 33.5767 18.8035 33.8239 18.8354 34.0928V34.25C18.8035 34.5075 18.7523 34.7467 18.6816 34.9678C18.611 35.1888 18.5176 35.3825 18.4014 35.5488C18.2874 35.7129 18.1484 35.8405 17.9844 35.9316C17.8203 36.0228 17.6289 36.0684 17.4102 36.0684C17.18 36.0684 16.9749 36.0216 16.7949 35.9282C16.6172 35.8348 16.4668 35.7038 16.3438 35.5352C16.223 35.3665 16.1307 35.1683 16.0669 34.9404C16.0031 34.7126 15.9712 34.4642 15.9712 34.1953ZM16.9556 34.1235V34.1953C16.9556 34.348 16.967 34.4904 16.9897 34.6226C17.0148 34.7547 17.0547 34.8721 17.1094 34.9746C17.1663 35.0749 17.2393 35.1535 17.3281 35.2104C17.4193 35.2651 17.5298 35.2925 17.6597 35.2925C17.8283 35.2925 17.9673 35.2549 18.0767 35.1797C18.186 35.1022 18.2692 34.9963 18.3262 34.8618C18.3854 34.7274 18.4196 34.5724 18.4287 34.397V33.9492C18.4219 33.8057 18.4014 33.6769 18.3672 33.563C18.3353 33.4468 18.2874 33.3477 18.2236 33.2656C18.1621 33.1836 18.0846 33.1198 17.9912 33.0742C17.9001 33.0286 17.7918 33.0059 17.6665 33.0059C17.5389 33.0059 17.4295 33.0355 17.3384 33.0947C17.2472 33.1517 17.1732 33.2303 17.1162 33.3306C17.0615 33.4308 17.0205 33.5493 16.9932 33.686C16.9681 33.8205 16.9556 33.9663 16.9556 34.1235ZM21.3237 36H20.3325V31.9736C20.3325 31.6934 20.3872 31.4575 20.4966 31.2661C20.6082 31.0724 20.7643 30.9266 20.9648 30.8286C21.1676 30.7284 21.408 30.6782 21.686 30.6782C21.7772 30.6782 21.8649 30.6851 21.9492 30.6987C22.0335 30.7101 22.1156 30.7249 22.1953 30.7432L22.1851 31.4849C22.1418 31.4735 22.0962 31.4655 22.0483 31.4609C22.0005 31.4564 21.9447 31.4541 21.8809 31.4541C21.7624 31.4541 21.661 31.4746 21.5767 31.5156C21.4946 31.5544 21.432 31.6125 21.3887 31.6899C21.3454 31.7674 21.3237 31.862 21.3237 31.9736V36ZM22.062 32.3018V32.999H19.7822V32.3018H22.062Z'\n      fill='white'\n    />\n  </svg>\n);\n\nexport const FileWordIcon = ({\n  className = '',\n  size = DEFAULT_SIZE,\n  ...props\n}: IconProps) => (\n  <svg\n    className={clsx('rfu-file-word', className)}\n    fill='none'\n    height={size}\n    viewBox='0 0 34 40'\n    width={size}\n    xmlns='http://www.w3.org/2000/svg'\n    {...props}\n  >\n    <path\n      d='M0 28H34V37C34 38.6569 32.6569 40 31 40H3C1.34315 40 0 38.6569 0 37V28Z'\n      fill='#4285F4'\n    />\n    <path d='M0 3C0 1.34315 1.34315 0 3 0H23L34 11V28H0V3Z' fill='#F5F5F5' />\n    <path d='M34 11L26 11C24.3431 11 23 9.65685 23 8V0L34 11Z' fill='#DBDBDB' />\n    <path clipRule='evenodd' d='M8 13H23V15H8V13Z' fill='#4285F4' fillRule='evenodd' />\n    <path clipRule='evenodd' d='M8 17H18V19H8V17Z' fill='#4285F4' fillRule='evenodd' />\n    <path clipRule='evenodd' d='M8 21H23V23H8V21Z' fill='#4285F4' fillRule='evenodd' />\n  </svg>\n);\n\nexport const FileWordIconAlt = ({\n  className = '',\n  size = DEFAULT_SIZE,\n  ...props\n}: IconProps) => (\n  <svg\n    className={clsx('rfu-file-word-alt', className)}\n    fill='none'\n    height={size}\n    viewBox='0 0 34 40'\n    width={size}\n    xmlns='http://www.w3.org/2000/svg'\n    {...props}\n  >\n    <path\n      d='M0 3C0 1.34315 1.34315 0 3 0H23L34 11V37C34 38.6569 32.6569 40 31 40H3C1.34315 40 0 38.6569 0 37V3Z'\n      fill='url(#paint0_linear_11084_64)'\n    />\n    <path d='M34 11L26 11C24.3431 11 23 9.65685 23 8V0L34 11Z' fill='#3670D3' />\n    <path clipRule='evenodd' d='M8 13H23V15H8V13Z' fill='#C1D8FF' fillRule='evenodd' />\n    <path clipRule='evenodd' d='M8 17H18V19H8V17Z' fill='#C1D8FF' fillRule='evenodd' />\n    <path clipRule='evenodd' d='M8 21H23V23H8V21Z' fill='#C1D8FF' fillRule='evenodd' />\n    <defs>\n      <linearGradient\n        gradientUnits='userSpaceOnUse'\n        id='paint0_linear_11084_64'\n        x1='0'\n        x2='0'\n        y1='0'\n        y2='40'\n      >\n        <stop stopColor='#79A4F2' />\n        <stop offset='1' stopColor='#3375E2' />\n      </linearGradient>\n    </defs>\n  </svg>\n);\n\nexport const FilePowerPointIcon = ({\n  className = '',\n  size = DEFAULT_SIZE,\n  ...props\n}: IconProps) => (\n  <svg\n    className={clsx('rfu-file-powerpoint', className)}\n    fill='none'\n    height={size}\n    viewBox='0 0 34 40'\n    width={size}\n    xmlns='http://www.w3.org/2000/svg'\n    {...props}\n  >\n    <path\n      clipRule='evenodd'\n      d='M17.7168 33.172C18.2348 33.172 18.4238 33.655 18.4238 34.18C18.4238 34.642 18.2978 35.195 17.7168 35.195C17.1708 35.195 16.9888 34.642 16.9888 34.145C16.9888 33.683 17.1708 33.172 17.7168 33.172ZM19.5718 31.002H18.3818V32.7589H18.3678C18.1228 32.43 17.7798 32.262 17.3318 32.262C16.3028 32.262 15.7988 33.158 15.7988 34.103C15.7988 35.125 16.2818 36.1049 17.4228 36.1049C17.8428 36.1049 18.1928 35.923 18.4238 35.58H18.4378V36H19.5718V31.002ZM12.7095 34.1872C12.7095 33.7252 12.8775 33.1722 13.4305 33.1722C13.9835 33.1722 14.1585 33.7252 14.1585 34.1872C14.1585 34.6492 13.9835 35.1952 13.4305 35.1952C12.8775 35.1952 12.7095 34.6492 12.7095 34.1872ZM11.5195 34.1872C11.5195 35.2792 12.3035 36.1052 13.4305 36.1052C14.5575 36.1052 15.3485 35.2792 15.3485 34.1872C15.3485 33.0952 14.5575 32.2622 13.4305 32.2622C12.3035 32.2622 11.5195 33.0952 11.5195 34.1872ZM21.839 32.3671H22.574V33.1371H21.839V34.7891C21.839 35.0761 22.007 35.1391 22.266 35.1391C22.3142 35.1391 22.364 35.1357 22.4147 35.1323C22.4672 35.1287 22.5206 35.1251 22.574 35.1251V36.0001C22.481 36.0031 22.388 36.0099 22.295 36.0168C22.171 36.0259 22.047 36.0351 21.923 36.0351C20.908 36.0351 20.649 35.7411 20.649 34.7541V33.1371H20.047V32.3671H20.649V31.2681H21.839V32.3671Z'\n      fill='white'\n      fillRule='evenodd'\n    />\n    <path\n      d='M0 28H34V37C34 38.6569 32.6569 40 31 40H3C1.34315 40 0 38.6569 0 37V28Z'\n      fill='#D65537'\n    />\n    <path d='M0 3C0 1.34315 1.34315 0 3 0H23L34 11V28H0V3Z' fill='#F5F5F5' />\n    <path d='M34 11L26 11C24.3431 11 23 9.65685 23 8V0L34 11Z' fill='#DBDBDB' />\n    <path\n      clipRule='evenodd'\n      d='M7 12C7 10.8954 7.89543 10 9 10H19C20.1046 10 21 10.8954 21 12V18C21 19.1046 20.1046 20 19 20H9C7.89543 20 7 19.1046 7 18V12ZM9 12H19V18H9V12ZM25 22C25 23.1046 24.1046 24 23 24H11V22H23V15H25V22Z'\n      fill='#D65537'\n      fillRule='evenodd'\n    />\n  </svg>\n);\n\nexport const FilePowerPointIconAlt = ({\n  className = '',\n  size = DEFAULT_SIZE,\n  ...props\n}: IconProps) => (\n  <svg\n    className={clsx('rfu-file-powerpoint-alt', className)}\n    fill='none'\n    height={size}\n    viewBox='0 0 34 40'\n    width={size}\n    xmlns='http://www.w3.org/2000/svg'\n    {...props}\n  >\n    <path\n      d='M0 3C0 1.34315 1.34315 0 3 0H23L34 11V37C34 38.6569 32.6569 40 31 40H3C1.34315 40 0 38.6569 0 37V3Z'\n      fill='url(#paint0_linear_11084_76)'\n    />\n    <path d='M34 11L26 11C24.3431 11 23 9.65685 23 8V0L34 11Z' fill='#AB381D' />\n    <path\n      clipRule='evenodd'\n      d='M7 12C7 10.8954 7.89543 10 9 10H19C20.1046 10 21 10.8954 21 12V18C21 19.1046 20.1046 20 19 20H9C7.89543 20 7 19.1046 7 18V12ZM9 12H19V18H9V12ZM25 22C25 23.1046 24.1046 24 23 24H11V22H23V15H25V22Z'\n      fill='#FFB3A0'\n      fillRule='evenodd'\n    />\n    <defs>\n      <linearGradient\n        gradientUnits='userSpaceOnUse'\n        id='paint0_linear_11084_76'\n        x1='0'\n        x2='0'\n        y1='0'\n        y2='40'\n      >\n        <stop stopColor='#DC7259' />\n        <stop offset='1' stopColor='#D14423' />\n      </linearGradient>\n    </defs>\n  </svg>\n);\n\nexport const FileExcelIcon = ({\n  className = '',\n  size = DEFAULT_SIZE,\n  ...props\n}: IconProps) => (\n  <svg\n    className={clsx('rfu-file-excel', className)}\n    fill='none'\n    height={size}\n    viewBox='0 0 34 40'\n    width={size}\n    xmlns='http://www.w3.org/2000/svg'\n    {...props}\n  >\n    <path\n      clipRule='evenodd'\n      d='M17.7168 33.172C18.2348 33.172 18.4238 33.655 18.4238 34.18C18.4238 34.642 18.2978 35.195 17.7168 35.195C17.1708 35.195 16.9888 34.642 16.9888 34.145C16.9888 33.683 17.1708 33.172 17.7168 33.172ZM19.5718 31.002H18.3818V32.7589H18.3678C18.1228 32.43 17.7798 32.262 17.3318 32.262C16.3028 32.262 15.7988 33.158 15.7988 34.103C15.7988 35.125 16.2818 36.1049 17.4228 36.1049C17.8428 36.1049 18.1928 35.923 18.4238 35.58H18.4378V36H19.5718V31.002ZM12.7095 34.1872C12.7095 33.7252 12.8775 33.1722 13.4305 33.1722C13.9835 33.1722 14.1585 33.7252 14.1585 34.1872C14.1585 34.6492 13.9835 35.1952 13.4305 35.1952C12.8775 35.1952 12.7095 34.6492 12.7095 34.1872ZM11.5195 34.1872C11.5195 35.2792 12.3035 36.1052 13.4305 36.1052C14.5575 36.1052 15.3485 35.2792 15.3485 34.1872C15.3485 33.0952 14.5575 32.2622 13.4305 32.2622C12.3035 32.2622 11.5195 33.0952 11.5195 34.1872ZM21.839 32.3671H22.574V33.1371H21.839V34.7891C21.839 35.0761 22.007 35.1391 22.266 35.1391C22.3142 35.1391 22.364 35.1357 22.4147 35.1323C22.4672 35.1287 22.5206 35.1251 22.574 35.1251V36.0001C22.481 36.0031 22.388 36.0099 22.295 36.0168C22.171 36.0259 22.047 36.0351 21.923 36.0351C20.908 36.0351 20.649 35.7411 20.649 34.7541V33.1371H20.047V32.3671H20.649V31.2681H21.839V32.3671Z'\n      fill='white'\n      fillRule='evenodd'\n    />\n    <path\n      d='M0 28H34V37C34 38.6569 32.6569 40 31 40H3C1.34315 40 0 38.6569 0 37V28Z'\n      fill='#0F9D58'\n    />\n    <path d='M0 3C0 1.34315 1.34315 0 3 0H23L34 11V28H0V3Z' fill='#F5F5F5' />\n    <path d='M34 11L26 11C24.3431 11 23 9.65685 23 8V0L34 11Z' fill='#DBDBDB' />\n    <path\n      clipRule='evenodd'\n      d='M12 13H7V15H12V13ZM12 17H7V19H12V17ZM7 21H12V23H7V21ZM23 13H14V15H23V13ZM14 17H23V19H14V17ZM23 21H14V23H23V21Z'\n      fill='#0F9D58'\n      fillRule='evenodd'\n    />\n  </svg>\n);\n\nexport const FileExcelIconAlt = ({\n  className = '',\n  size = DEFAULT_SIZE,\n  ...props\n}: IconProps) => (\n  <svg\n    className={clsx('rfu-file-excel-alt', className)}\n    fill='none'\n    height={size}\n    viewBox='0 0 34 40'\n    width={size}\n    xmlns='http://www.w3.org/2000/svg'\n    {...props}\n  >\n    <path\n      d='M0 3C0 1.34315 1.34315 0 3 0H23L34 11V37C34 38.6569 32.6569 40 31 40H3C1.34315 40 0 38.6569 0 37V3Z'\n      fill='url(#paint0_linear_11084_326)'\n    />\n    <path d='M34 11L26 11C24.3431 11 23 9.65685 23 8V0L34 11Z' fill='#0C864B' />\n    <path\n      clipRule='evenodd'\n      d='M12 13H7V15H12V13ZM12 17H7V19H12V17ZM7 21H12V23H7V21ZM23 13H14V15H23V13ZM14 17H23V19H14V17ZM23 21H14V23H23V21Z'\n      fill='#A8E7C9'\n      fillRule='evenodd'\n    />\n    <defs>\n      <linearGradient\n        gradientUnits='userSpaceOnUse'\n        id='paint0_linear_11084_326'\n        x1='0'\n        x2='0'\n        y1='0'\n        y2='40'\n      >\n        <stop stopColor='#64AD8A' />\n        <stop offset='1' stopColor='#0C864B' />\n      </linearGradient>\n    </defs>\n  </svg>\n);\n\nexport const FileArchiveIcon = ({\n  className = '',\n  size = DEFAULT_SIZE,\n  ...props\n}: IconProps) => (\n  <svg\n    className={clsx('rfu-file-archive', className)}\n    fill='none'\n    height={size}\n    viewBox='0 0 34 40'\n    width={size}\n    xmlns='http://www.w3.org/2000/svg'\n    {...props}\n  >\n    <path\n      clipRule='evenodd'\n      d='M17.7168 33.172C18.2348 33.172 18.4238 33.655 18.4238 34.18C18.4238 34.642 18.2978 35.195 17.7168 35.195C17.1708 35.195 16.9888 34.642 16.9888 34.145C16.9888 33.683 17.1708 33.172 17.7168 33.172ZM19.5718 31.002H18.3818V32.7589H18.3678C18.1228 32.43 17.7798 32.262 17.3318 32.262C16.3028 32.262 15.7988 33.158 15.7988 34.103C15.7988 35.125 16.2818 36.1049 17.4228 36.1049C17.8428 36.1049 18.1928 35.923 18.4238 35.58H18.4378V36H19.5718V31.002ZM12.7095 34.1872C12.7095 33.7252 12.8775 33.1722 13.4305 33.1722C13.9835 33.1722 14.1585 33.7252 14.1585 34.1872C14.1585 34.6492 13.9835 35.1952 13.4305 35.1952C12.8775 35.1952 12.7095 34.6492 12.7095 34.1872ZM11.5195 34.1872C11.5195 35.2792 12.3035 36.1052 13.4305 36.1052C14.5575 36.1052 15.3485 35.2792 15.3485 34.1872C15.3485 33.0952 14.5575 32.2622 13.4305 32.2622C12.3035 32.2622 11.5195 33.0952 11.5195 34.1872ZM21.839 32.3671H22.574V33.1371H21.839V34.7891C21.839 35.0761 22.007 35.1391 22.266 35.1391C22.3142 35.1391 22.364 35.1357 22.4147 35.1323C22.4672 35.1287 22.5206 35.1251 22.574 35.1251V36.0001C22.481 36.0031 22.388 36.0099 22.295 36.0168C22.171 36.0259 22.047 36.0351 21.923 36.0351C20.908 36.0351 20.649 35.7411 20.649 34.7541V33.1371H20.047V32.3671H20.649V31.2681H21.839V32.3671Z'\n      fill='white'\n      fillRule='evenodd'\n    />\n    <path\n      d='M0 28H34V37C34 38.6569 32.6569 40 31 40H3C1.34315 40 0 38.6569 0 37V28Z'\n      fill='#F8B859'\n    />\n    <path d='M0 3C0 1.34315 1.34315 0 3 0H23L34 11V28H0V3Z' fill='#F5F5F5' />\n    <path d='M34 11L26 11C24.3431 11 23 9.65685 23 8V0L34 11Z' fill='#DBDBDB' />\n    <path\n      clipRule='evenodd'\n      d='M10 0H8V2H10V4H8V6H10V8H8V10H10V12H8V14H10V12H12V10H10V8H12V6H10V4H12V2H10V0ZM8 17C8 16.4477 8.44771 16 9 16H11C11.5523 16 12 16.4477 12 17V23C12 23.5523 11.5523 24 11 24H9C8.44771 24 8 23.5523 8 23V17ZM9 23V20H11V23H9Z'\n      fill='#F8B859'\n      fillRule='evenodd'\n    />\n  </svg>\n);\n\nexport const FileArchiveIconAlt = ({\n  className = '',\n  size = DEFAULT_SIZE,\n  ...props\n}: IconProps) => (\n  <svg\n    className={clsx('rfu-file-archive-alt', className)}\n    fill='none'\n    height={size}\n    viewBox='0 0 34 40'\n    width={size}\n    xmlns='http://www.w3.org/2000/svg'\n    {...props}\n  >\n    <path\n      d='M0 3C0 1.34315 1.34315 0 3 0H23L34 11V37C34 38.6569 32.6569 40 31 40H3C1.34315 40 0 38.6569 0 37V3Z'\n      fill='url(#paint0_linear_11086_246)'\n    />\n    <path d='M34 11L26 11C24.3431 11 23 9.65685 23 8V0L34 11Z' fill='#B67A24' />\n    <path\n      clipRule='evenodd'\n      d='M10 0H8V2H10V4H8V6H10V8H8V10H10V12H8V14H10V12H12V10H10V8H12V6H10V4H12V2H10V0ZM8 17C8 16.4477 8.44771 16 9 16H11C11.5523 16 12 16.4477 12 17V23C12 23.5523 11.5523 24 11 24H9C8.44771 24 8 23.5523 8 23V17ZM9 23V20H11V23H9Z'\n      fill='#FFE9C8'\n      fillRule='evenodd'\n    />\n    <defs>\n      <linearGradient\n        gradientUnits='userSpaceOnUse'\n        id='paint0_linear_11086_246'\n        x1='0'\n        x2='0'\n        y1='0'\n        y2='40'\n      >\n        <stop stopColor='#FFC775' />\n        <stop offset='1' stopColor='#E69E34' />\n      </linearGradient>\n    </defs>\n  </svg>\n);\n\nexport const FileCodeIcon = ({\n  className = '',\n  size = DEFAULT_SIZE,\n  ...props\n}: IconProps) => (\n  <svg\n    className={clsx('rfu-file-code', className)}\n    fill='none'\n    height={size}\n    viewBox='0 0 34 40'\n    width={size}\n    xmlns='http://www.w3.org/2000/svg'\n    {...props}\n  >\n    <path\n      d='M0 28H34V37C34 38.6569 32.6569 40 31 40H3C1.34315 40 0 38.6569 0 37V28Z'\n      fill='#00ACA1'\n    />\n    <path d='M0 3C0 1.34315 1.34315 0 3 0H23L34 11V28H0V3Z' fill='#F5F5F5' />\n    <path d='M34 11L26 11C24.3431 11 23 9.65685 23 8V0L34 11Z' fill='#DBDBDB' />\n    <path\n      clipRule='evenodd'\n      d='M15 21V18.984L11.5 18L15 17V15L9 17V19L15 21ZM19 15V17.016L22.5 18L19 19V21L25 19V17L19 15Z'\n      fill='#00ACA1'\n      fillRule='evenodd'\n    />\n  </svg>\n);\n\nexport const FileCodeIconAlt = ({\n  className = '',\n  size = DEFAULT_SIZE,\n  ...props\n}: IconProps) => (\n  <svg\n    className={clsx('rfu-file-code-alt', className)}\n    fill='none'\n    height={size}\n    viewBox='0 0 34 40'\n    width={size}\n    xmlns='http://www.w3.org/2000/svg'\n    {...props}\n  >\n    <path\n      d='M0 3C0 1.34315 1.34315 0 3 0H23L34 11V37C34 38.6569 32.6569 40 31 40H3C1.34315 40 0 38.6569 0 37V3Z'\n      fill='url(#paint0_linear_11086_611)'\n    />\n    <path d='M34 11L26 11C24.3431 11 23 9.65685 23 8V0L34 11Z' fill='#00ACA1' />\n    <path\n      clipRule='evenodd'\n      d='M15 21V18.984L11.5 18L15 17V15L9 17V19L15 21ZM19 15V17.016L22.5 18L19 19V21L25 19V17L19 15Z'\n      fill='#A3DCD8'\n      fillRule='evenodd'\n    />\n    <defs>\n      <linearGradient\n        gradientUnits='userSpaceOnUse'\n        id='paint0_linear_11086_611'\n        x1='0'\n        x2='0'\n        y1='0'\n        y2='40'\n      >\n        <stop stopColor='#7FC4BD' />\n        <stop offset='1' stopColor='#00ACA1' />\n      </linearGradient>\n    </defs>\n  </svg>\n);\n\nexport const FileAudioIcon = ({\n  className = '',\n  size = DEFAULT_SIZE,\n  ...props\n}: IconProps) => (\n  <svg\n    className={clsx('rfu-file-audio', className)}\n    fill='none'\n    height={size}\n    viewBox='0 0 34 40'\n    width={size}\n    xmlns='http://www.w3.org/2000/svg'\n    {...props}\n  >\n    <path\n      clipRule='evenodd'\n      d='M17.7168 33.172C18.2348 33.172 18.4238 33.655 18.4238 34.18C18.4238 34.642 18.2978 35.195 17.7168 35.195C17.1708 35.195 16.9888 34.642 16.9888 34.145C16.9888 33.683 17.1708 33.172 17.7168 33.172ZM19.5718 31.002H18.3818V32.7589H18.3678C18.1228 32.43 17.7798 32.262 17.3318 32.262C16.3028 32.262 15.7988 33.158 15.7988 34.103C15.7988 35.125 16.2818 36.1049 17.4228 36.1049C17.8428 36.1049 18.1928 35.923 18.4238 35.58H18.4378V36H19.5718V31.002ZM12.7095 34.1872C12.7095 33.7252 12.8775 33.1722 13.4305 33.1722C13.9835 33.1722 14.1585 33.7252 14.1585 34.1872C14.1585 34.6492 13.9835 35.1952 13.4305 35.1952C12.8775 35.1952 12.7095 34.6492 12.7095 34.1872ZM11.5195 34.1872C11.5195 35.2792 12.3035 36.1052 13.4305 36.1052C14.5575 36.1052 15.3485 35.2792 15.3485 34.1872C15.3485 33.0952 14.5575 32.2622 13.4305 32.2622C12.3035 32.2622 11.5195 33.0952 11.5195 34.1872ZM21.839 32.3671H22.574V33.1371H21.839V34.7891C21.839 35.0761 22.007 35.1391 22.266 35.1391C22.3142 35.1391 22.364 35.1357 22.4147 35.1323C22.4672 35.1287 22.5206 35.1251 22.574 35.1251V36.0001C22.481 36.0031 22.388 36.0099 22.295 36.0168C22.171 36.0259 22.047 36.0351 21.923 36.0351C20.908 36.0351 20.649 35.7411 20.649 34.7541V33.1371H20.047V32.3671H20.649V31.2681H21.839V32.3671Z'\n      fill='white'\n      fillRule='evenodd'\n    />\n    <path\n      d='M0 28H34V37C34 38.6569 32.6569 40 31 40H3C1.34315 40 0 38.6569 0 37V28Z'\n      fill='#2727B0'\n    />\n    <path d='M0 3C0 1.34315 1.34315 0 3 0H23L34 11V28H0V3Z' fill='#F5F5F5' />\n    <path d='M34 11L26 11C24.3431 11 23 9.65685 23 8V0L34 11Z' fill='#DBDBDB' />\n    <path\n      clipRule='evenodd'\n      d='M8.87912 21.941H12.298L16.9521 24.7493C17.0307 24.8138 17.1293 24.849 17.2311 24.849C17.4738 24.8488 17.6705 24.6519 17.6703 24.4092V12.4399C17.6704 12.3381 17.6352 12.2396 17.5707 12.1609C17.4168 11.9732 17.1398 11.9457 16.9521 12.0996L12.298 14.908H8.87912C8.3936 14.908 8 15.3016 8 15.7871V21.0619C8 21.5474 8.3936 21.941 8.87912 21.941ZM12.9258 16.6664L15.9122 15.2224V21.6268L12.9258 20.1829H9.7583V16.6664H12.9258ZM19.8511 16.3517C19.474 16.4092 19.2397 16.6637 19.3283 16.9191L19.3262 16.92C19.5295 17.4995 19.6305 18.098 19.6284 18.6953C19.6305 19.2975 19.5237 19.9014 19.3196 20.4909C19.229 20.7462 19.4682 20.9996 19.8474 21.06C19.9008 21.0683 19.9542 21.072 20.0076 21.072C20.3259 21.072 20.6156 20.9234 20.6922 20.7057C20.9194 20.0451 21.0337 19.37 21.0374 18.6953C21.0349 18.0251 20.9211 17.3575 20.6955 16.7035C20.6053 16.4477 20.229 16.2908 19.8511 16.3517ZM22.1605 14.6028C22.5252 14.5163 22.9259 14.6454 23.055 14.8938C23.6891 16.1157 24 17.4042 24 18.6923C24.0004 19.9895 23.6796 21.2839 23.0521 22.5153C22.9503 22.7123 22.6763 22.8344 22.3828 22.8344C22.3071 22.8344 22.2301 22.8261 22.1543 22.8092C21.7863 22.7251 21.5914 22.4536 21.7185 22.2077C22.2988 21.0761 22.5922 19.8836 22.5931 18.6919C22.5931 17.5056 22.3054 16.3222 21.7276 15.2025C21.6001 14.9563 21.795 14.686 22.1605 14.6028Z'\n      fill='#2727B0'\n      fillRule='evenodd'\n    />\n  </svg>\n);\n\nexport const FileAudioIconAlt = ({\n  className = '',\n  size = DEFAULT_SIZE,\n  ...props\n}: IconProps) => (\n  <svg\n    className={clsx('rfu-file-audio-alt', className)}\n    fill='none'\n    height={size}\n    viewBox='0 0 34 40'\n    width={size}\n    xmlns='http://www.w3.org/2000/svg'\n    {...props}\n  >\n    <path\n      d='M0 3C0 1.34315 1.34315 0 3 0H23L34 11V37C34 38.6569 32.6569 40 31 40H3C1.34315 40 0 38.6569 0 37V3Z'\n      fill='url(#paint0_linear_11086_420)'\n    />\n    <path d='M34 11L26 11C24.3431 11 23 9.65685 23 8V0L34 11Z' fill='#1919A5' />\n    <path\n      clipRule='evenodd'\n      d='M8.87912 21.941H12.298L16.9521 24.7493C17.0307 24.8138 17.1293 24.849 17.2311 24.849C17.4738 24.8488 17.6705 24.6519 17.6703 24.4092V12.4399C17.6704 12.3381 17.6352 12.2396 17.5707 12.1609C17.4168 11.9732 17.1398 11.9457 16.9521 12.0996L12.298 14.908H8.87912C8.3936 14.908 8 15.3016 8 15.7871V21.0619C8 21.5474 8.3936 21.941 8.87912 21.941ZM12.9258 16.6664L15.9122 15.2224V21.6268L12.9258 20.1829H9.7583V16.6664H12.9258ZM19.8511 16.3517C19.474 16.4092 19.2397 16.6637 19.3283 16.9191L19.3262 16.92C19.5295 17.4995 19.6305 18.098 19.6284 18.6953C19.6305 19.2975 19.5237 19.9014 19.3196 20.4909C19.229 20.7462 19.4682 20.9996 19.8474 21.06C19.9008 21.0683 19.9542 21.072 20.0076 21.072C20.3259 21.072 20.6156 20.9234 20.6922 20.7057C20.9194 20.0451 21.0337 19.37 21.0374 18.6953C21.0349 18.0251 20.9211 17.3575 20.6955 16.7035C20.6053 16.4477 20.229 16.2908 19.8511 16.3517ZM22.1605 14.6028C22.5252 14.5163 22.9259 14.6454 23.055 14.8938C23.6891 16.1157 24 17.4042 24 18.6923C24.0004 19.9895 23.6796 21.2839 23.0521 22.5153C22.9503 22.7123 22.6763 22.8344 22.3828 22.8344C22.3071 22.8344 22.2301 22.8261 22.1543 22.8092C21.7863 22.7251 21.5914 22.4536 21.7185 22.2077C22.2988 21.0761 22.5922 19.8836 22.5931 18.6919C22.5931 17.5056 22.3054 16.3222 21.7276 15.2025C21.6001 14.9563 21.795 14.686 22.1605 14.6028Z'\n      fill='#AAAAFF'\n      fillRule='evenodd'\n    />\n    <defs>\n      <linearGradient\n        gradientUnits='userSpaceOnUse'\n        id='paint0_linear_11086_420'\n        x1='0'\n        x2='0'\n        y1='0'\n        y2='40'\n      >\n        <stop stopColor='#4A4AB8' />\n        <stop offset='1' stopColor='#2727B0' />\n      </linearGradient>\n    </defs>\n  </svg>\n);\n\nexport const FileVideoIcon = ({\n  className = '',\n  size = DEFAULT_SIZE,\n  ...props\n}: IconProps) => (\n  <svg\n    className={clsx('rfu-file-video', className)}\n    fill='none'\n    height={size}\n    viewBox='0 0 34 40'\n    width={size}\n    xmlns='http://www.w3.org/2000/svg'\n    {...props}\n  >\n    <path\n      clipRule='evenodd'\n      d='M17.7168 33.172C18.2348 33.172 18.4238 33.655 18.4238 34.18C18.4238 34.642 18.2978 35.195 17.7168 35.195C17.1708 35.195 16.9888 34.642 16.9888 34.145C16.9888 33.683 17.1708 33.172 17.7168 33.172ZM19.5718 31.002H18.3818V32.7589H18.3678C18.1228 32.43 17.7798 32.262 17.3318 32.262C16.3028 32.262 15.7988 33.158 15.7988 34.103C15.7988 35.125 16.2818 36.1049 17.4228 36.1049C17.8428 36.1049 18.1928 35.923 18.4238 35.58H18.4378V36H19.5718V31.002ZM12.7095 34.1872C12.7095 33.7252 12.8775 33.1722 13.4305 33.1722C13.9835 33.1722 14.1585 33.7252 14.1585 34.1872C14.1585 34.6492 13.9835 35.1952 13.4305 35.1952C12.8775 35.1952 12.7095 34.6492 12.7095 34.1872ZM11.5195 34.1872C11.5195 35.2792 12.3035 36.1052 13.4305 36.1052C14.5575 36.1052 15.3485 35.2792 15.3485 34.1872C15.3485 33.0952 14.5575 32.2622 13.4305 32.2622C12.3035 32.2622 11.5195 33.0952 11.5195 34.1872ZM21.839 32.3671H22.574V33.1371H21.839V34.7891C21.839 35.0761 22.007 35.1391 22.266 35.1391C22.3142 35.1391 22.364 35.1357 22.4147 35.1323C22.4672 35.1287 22.5206 35.1251 22.574 35.1251V36.0001C22.481 36.0031 22.388 36.0099 22.295 36.0168C22.171 36.0259 22.047 36.0351 21.923 36.0351C20.908 36.0351 20.649 35.7411 20.649 34.7541V33.1371H20.047V32.3671H20.649V31.2681H21.839V32.3671Z'\n      fill='white'\n      fillRule='evenodd'\n    />\n    <path\n      d='M0 28H34V37C34 38.6569 32.6569 40 31 40H3C1.34315 40 0 38.6569 0 37V28Z'\n      fill='#9D27B0'\n    />\n    <path d='M0 3C0 1.34315 1.34315 0 3 0H23L34 11V28H0V3Z' fill='#F5F5F5' />\n    <path d='M34 11L26 11C24.3431 11 23 9.65685 23 8V0L34 11Z' fill='#DBDBDB' />\n    <path\n      d='M9 17H25V24H9V17ZM27 14C27 12.8954 26.1046 12 25 12H22L24 15H21L19 12H17L19 15H16L14 12H12L14 15H11L9 12C7.9 12 7.01 12.9 7.01 14L7 24C7 25.1 7.9 26 9 26H25C26.1 26 27 25.1 27 24V14Z'\n      fill='#9D27B0'\n    />\n  </svg>\n);\n\nexport const FileVideoIconAlt = ({\n  className = '',\n  size = DEFAULT_SIZE,\n  ...props\n}: IconProps) => (\n  <svg\n    className={clsx('rfu-file-video-alt', className)}\n    fill='none'\n    height={size}\n    viewBox='0 0 34 40'\n    width={size}\n    xmlns='http://www.w3.org/2000/svg'\n    {...props}\n  >\n    <path\n      d='M0 3C0 1.34315 1.34315 0 3 0H23L34 11V37C34 38.6569 32.6569 40 31 40H3C1.34315 40 0 38.6569 0 37V3Z'\n      fill='url(#paint0_linear_18604_164254)'\n    />\n    <path d='M34 11L26 11C24.3431 11 23 9.65685 23 8V0L34 11Z' fill='#7A1589' />\n    <path\n      d='M9 17H25V24H9V17ZM27 14C27 12.8954 26.1046 12 25 12H22L24 15H21L19 12H17L19 15H16L14 12H12L14 15H11L9 12C7.9 12 7.01 12.9 7.01 14L7 24C7 25.1 7.9 26 9 26H25C26.1 26 27 25.1 27 24V14Z'\n      fill='#F3A8FF'\n    />\n    <defs>\n      <linearGradient\n        gradientUnits='userSpaceOnUse'\n        id='paint0_linear_18604_164254'\n        x1='0'\n        x2='0'\n        y1='0'\n        y2='40'\n      >\n        <stop stopColor='#A94AB8' />\n        <stop offset='1' stopColor='#9D27B0' />\n      </linearGradient>\n    </defs>\n  </svg>\n);\n\nexport const FileFallbackIcon = ({\n  className = '',\n  size = DEFAULT_SIZE,\n  ...props\n}: IconProps) => (\n  <svg\n    className={clsx('rfu-file-fallback ', className)}\n    fill='none'\n    height={size}\n    viewBox='0 0 34 40'\n    width={size}\n    xmlns='http://www.w3.org/2000/svg'\n    {...props}\n  >\n    <path\n      d='M0 3C0 1.34315 1.34315 0 3 0H23L34 11V37C34 38.6569 32.6569 40 31 40H3C1.34315 40 0 38.6569 0 37V3Z'\n      fill='url(#paint0_linear)'\n    />\n    <path d='M34 11L26 11C24.3431 11 23 9.65685 23 8V0L34 11Z' fill='#DBDBDB' />\n    <path clipRule='evenodd' d='M8 13H23V15H8V13Z' fill='#CFCFCF' fillRule='evenodd' />\n    <path clipRule='evenodd' d='M8 17H18V19H8V17Z' fill='#CFCFCF' fillRule='evenodd' />\n    <path clipRule='evenodd' d='M8 21H23V23H8V21Z' fill='#CFCFCF' fillRule='evenodd' />\n    <defs>\n      <linearGradient\n        gradientUnits='userSpaceOnUse'\n        id='paint0_linear'\n        x1='0'\n        x2='0'\n        y1='0'\n        y2='40'\n      >\n        <stop stopColor='white' />\n        <stop offset='1' stopColor='#DBDBDB' />\n      </linearGradient>\n    </defs>\n  </svg>\n);\n\n// v1 icon without possibility to specify size via props\nexport const FileImageIcon = ({\n  className = '',\n  size = DEFAULT_SIZE,\n  ...props\n}: IconProps) => (\n  <svg\n    className={clsx('rfu-file-image', className)}\n    height={size}\n    viewBox='0 0 384 512'\n    width={size}\n    xmlns='http://www.w3.org/2000/svg'\n    {...props}\n  >\n    <path\n      d='M369.9 97.9L286 14C277 5 264.8-.1 252.1-.1H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V131.9c0-12.7-5.1-25-14.1-34zM332.1 128H256V51.9l76.1 76.1zM48 464V48h160v104c0 13.3 10.7 24 24 24h104v288H48zm32-48h224V288l-23.5-23.5c-4.7-4.7-12.3-4.7-17 0L176 352l-39.5-39.5c-4.7-4.7-12.3-4.7-17 0L80 352v64zm48-240c-26.5 0-48 21.5-48 48s21.5 48 48 48 48-21.5 48-48-21.5-48-48-48z'\n      fill='#414D54'\n    />\n  </svg>\n);\n", "export type GeneralType = 'audio/' | 'video/' | 'image/' | 'text/';\n\nexport type SupportedMimeType =\n  | (typeof wordMimeTypes)[number]\n  | (typeof excelMimeTypes)[number]\n  | (typeof powerpointMimeTypes)[number]\n  | (typeof archiveFileTypes)[number]\n  | (typeof codeFileTypes)[number];\n\nexport const wordMimeTypes = [\n  // Microsoft Word\n  // .doc .dot\n  'application/msword',\n  // .doc .dot\n  'application/msword-template',\n  // .docx\n  'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n  // .dotx (no test)\n  'application/vnd.openxmlformats-officedocument.wordprocessingml.template',\n  // .docm\n  'application/vnd.ms-word.document.macroEnabled.12',\n  // .dotm (no test)\n  'application/vnd.ms-word.template.macroEnabled.12',\n\n  // LibreOffice/OpenOffice Writer\n  // .odt\n  'application/vnd.oasis.opendocument.text',\n  // .ott\n  'application/vnd.oasis.opendocument.text-template',\n  // .fodt\n  'application/vnd.oasis.opendocument.text-flat-xml',\n  // .uot\n  // NOTE: firefox doesn't know mimetype so maybe ignore\n];\n\nexport const excelMimeTypes = [\n  // .csv\n  'text/csv',\n  // TODO: maybe more data files\n\n  // Microsoft Excel\n  // .xls .xlt .xla (no test for .xla)\n  'application/vnd.ms-excel',\n  // .xlsx\n  'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n  // .xltx (no test)\n  'application/vnd.openxmlformats-officedocument.spreadsheetml.template',\n  // .xlsm\n  'application/vnd.ms-excel.sheet.macroEnabled.12',\n  // .xltm (no test)\n  'application/vnd.ms-excel.template.macroEnabled.12',\n  // .xlam (no test)\n  'application/vnd.ms-excel.addin.macroEnabled.12',\n  // .xlsb (no test)\n  'application/vnd.ms-excel.addin.macroEnabled.12',\n\n  // LibreOffice/OpenOffice Calc\n  // .ods\n  'application/vnd.oasis.opendocument.spreadsheet',\n  // .ots\n  'application/vnd.oasis.opendocument.spreadsheet-template',\n  // .fods\n  'application/vnd.oasis.opendocument.spreadsheet-flat-xml',\n  // .uos\n  // NOTE: firefox doesn't know mimetype so maybe ignore\n];\n\nexport const powerpointMimeTypes = [\n  // Microsoft Word\n  // .ppt .pot .pps .ppa (no test for .ppa)\n  'application/vnd.ms-powerpoint',\n  // .pptx\n  'application/vnd.openxmlformats-officedocument.presentationml.presentation',\n  // .potx (no test)\n  'application/vnd.openxmlformats-officedocument.presentationml.template',\n  // .ppsx\n  'application/vnd.openxmlformats-officedocument.presentationml.slideshow',\n  // .ppam\n  'application/vnd.ms-powerpoint.addin.macroEnabled.12',\n  // .pptm\n  'application/vnd.ms-powerpoint.presentation.macroEnabled.12',\n  // .potm\n  'application/vnd.ms-powerpoint.template.macroEnabled.12',\n  // .ppsm\n  'application/vnd.ms-powerpoint.slideshow.macroEnabled.12',\n\n  // LibreOffice/OpenOffice Writer\n  // .odp\n  'application/vnd.oasis.opendocument.presentation',\n  // .otp\n  'application/vnd.oasis.opendocument.presentation-template',\n  // .fodp\n  'application/vnd.oasis.opendocument.presentation-flat-xml',\n  // .uop\n  // NOTE: firefox doesn't know mimetype so maybe ignore\n];\n\nexport const archiveFileTypes = [\n  // .zip\n  'application/zip',\n  // .z7\n  'application/x-7z-compressed',\n  // .ar\n  'application/x-archive',\n  // .tar\n  'application/x-tar',\n  // .tar.gz\n  'application/gzip',\n  // .tar.Z\n  'application/x-compress',\n  // .tar.bz2\n  'application/x-bzip',\n  // .tar.lz\n  'application/x-lzip',\n  // .tar.lz4\n  'application/x-lz4',\n  // .tar.lzma\n  'application/x-lzma',\n  // .tar.lzo (no test)\n  'application/x-lzop',\n  // .tar.xz\n  'application/x-xz',\n  // .war\n  'application/x-webarchive',\n  // .rar\n  'application/vnd.rar',\n];\n\nexport const codeFileTypes = [\n  // .html .htm\n  'text/html',\n  // .css\n  'text/css',\n  // .js\n  'application/x-javascript',\n  'text/javascript',\n  // .json\n  'application/json',\n  // .py\n  'text/x-python',\n  // .go\n  'text/x-go',\n  // .c\n  'text/x-csrc',\n  // .cpp\n  'text/x-c++src',\n  // .rb\n  'application/x-ruby',\n  // .rust\n  'text/rust',\n  // .java\n  'text/x-java',\n  // .php\n  'application/x-php',\n  // .cs\n  'text/x-csharp',\n  // .scala\n  'text/x-scala',\n  // .erl\n  'text/x-erlang',\n  // .sh\n  'application/x-shellscript',\n];\n", "import * as fileIconSet from './FileIconSet';\nimport {\n  archiveFileTypes,\n  codeFileTypes,\n  excelMimeTypes,\n  GeneralType,\n  powerpointMimeTypes,\n  SupportedMimeType,\n  wordMimeTypes,\n} from './mimeTypes';\nimport type { ComponentType } from 'react';\nimport type { IconProps } from './FileIconSet';\n\ntype MimeTypeMappedComponent =\n  | 'FilePdfIcon'\n  | 'FileWordIcon'\n  | 'FileExcelIcon'\n  | 'FilePowerPointIcon'\n  | 'FileArchiveIcon'\n  | 'FileCodeIcon';\n\ntype GeneralContentTypeComponent =\n  | 'FileImageIcon'\n  | 'FileAudioIcon'\n  | 'FileVideoIcon'\n  | 'FileAltIcon';\n\ntype IconComponents<Props> = {\n  FileAltIcon: ComponentType<Props>;\n  FileArchiveIcon: ComponentType<Props>;\n  FileAudioIcon: ComponentType<Props>;\n  FileCodeIcon: ComponentType<Props>;\n  FileExcelIcon: ComponentType<Props>;\n  FileFallbackIcon: ComponentType<Props>;\n  FileImageIcon: ComponentType<Props>;\n  FilePdfIcon: ComponentType<Props>;\n  FilePowerPointIcon: ComponentType<Props>;\n  FileVideoIcon: ComponentType<Props>;\n  FileWordIcon: ComponentType<Props>;\n};\n\ntype MimeTypeToIconMap<Props> = {\n  [key: string]: ComponentType<Props>;\n};\n\nfunction generateMimeTypeToIconMap<Props>({\n  FileArchiveIcon,\n  FileCodeIcon,\n  FileExcelIcon,\n  FilePdfIcon,\n  FilePowerPointIcon,\n  FileWordIcon,\n}: Pick<IconComponents<Props>, MimeTypeMappedComponent>) {\n  const mimeTypeToIconMap: MimeTypeToIconMap<Props> = {\n    'application/pdf': FilePdfIcon,\n  };\n\n  for (const type of wordMimeTypes) {\n    mimeTypeToIconMap[type] = FileWordIcon;\n  }\n\n  for (const type of excelMimeTypes) {\n    mimeTypeToIconMap[type] = FileExcelIcon;\n  }\n\n  for (const type of powerpointMimeTypes) {\n    mimeTypeToIconMap[type] = FilePowerPointIcon;\n  }\n\n  for (const type of archiveFileTypes) {\n    mimeTypeToIconMap[type] = FileArchiveIcon;\n  }\n\n  for (const type of codeFileTypes) {\n    mimeTypeToIconMap[type] = FileCodeIcon;\n  }\n  return mimeTypeToIconMap;\n}\n\nfunction generateGeneralTypeToIconMap<Props>({\n  FileAltIcon,\n  FileAudioIcon,\n  FileImageIcon,\n  FileVideoIcon,\n}: Pick<IconComponents<Props>, GeneralContentTypeComponent>) {\n  return {\n    'audio/': FileAudioIcon,\n    'image/': FileImageIcon,\n    'text/': FileAltIcon,\n    'video/': FileVideoIcon,\n  };\n}\n\nexport type IconType = 'standard' | 'alt';\n\ntype IconMap = {\n  standard: Record<\n    SupportedMimeType | GeneralType | 'fallback',\n    ComponentType<IconProps>\n  >;\n  alt?: Record<SupportedMimeType | GeneralType | 'fallback', ComponentType<IconProps>>;\n};\n\nexport const iconMap: IconMap = {\n  alt: {\n    ...generateMimeTypeToIconMap<IconProps>({\n      FileArchiveIcon: fileIconSet.FileArchiveIconAlt,\n      FileCodeIcon: fileIconSet.FileCodeIconAlt,\n      FileExcelIcon: fileIconSet.FileExcelIconAlt,\n      FilePdfIcon: fileIconSet.FilePdfIcon,\n      FilePowerPointIcon: fileIconSet.FilePowerPointIconAlt,\n      FileWordIcon: fileIconSet.FileWordIconAlt,\n    }),\n    ...generateGeneralTypeToIconMap<IconProps>({\n      FileAltIcon: fileIconSet.FileFallbackIcon,\n      FileAudioIcon: fileIconSet.FileAudioIconAlt,\n      FileImageIcon: fileIconSet.FileImageIcon,\n      FileVideoIcon: fileIconSet.FileVideoIconAlt,\n    }),\n    fallback: fileIconSet.FileFallbackIcon,\n  },\n  standard: {\n    ...generateMimeTypeToIconMap<IconProps>({\n      FileArchiveIcon: fileIconSet.FileArchiveIcon,\n      FileCodeIcon: fileIconSet.FileCodeIcon,\n      FileExcelIcon: fileIconSet.FileExcelIcon,\n      FilePdfIcon: fileIconSet.FilePdfIcon,\n      FilePowerPointIcon: fileIconSet.FilePowerPointIcon,\n      FileWordIcon: fileIconSet.FileWordIcon,\n    }),\n    ...generateGeneralTypeToIconMap<IconProps>({\n      FileAltIcon: fileIconSet.FileFallbackIcon,\n      FileAudioIcon: fileIconSet.FileAudioIcon,\n      FileImageIcon: fileIconSet.FileImageIcon,\n      FileVideoIcon: fileIconSet.FileVideoIcon,\n    }),\n    fallback: fileIconSet.FileFallbackIcon,\n  },\n};\n", "import clsx from 'clsx';\nimport React, { PropsWithChildren, useCallback, useMemo } from 'react';\nimport { useDropzone } from 'react-dropzone';\nimport { useTranslationContext } from '../../context';\n\nexport type ImageDropzoneProps = {\n  /**\n   * Set accepted file types. See https://github.com/okonet/attr-accept for more information. Keep in mind that mime type determination is not reliable across platforms. CSV files, for example, are reported as text/plain under macOS but as application/vnd.ms-excel under Windows. In some cases there might not be a mime type set at all.\n   *\n   * One of type: `string, string[]`\n   */\n  accept?: string | string[];\n  /** Enable/disable the dropzone */\n  disabled?: boolean;\n  handleFiles?: (files: FileList | File[]) => void;\n  maxNumberOfFiles?: number;\n  /** Allow drag 'n' drop (or selection from the file dialog) of multiple files */\n  multiple?: boolean;\n};\n\nexport const ImageDropzone = ({\n  accept: acceptedFiles = [],\n  children,\n  disabled,\n  handleFiles,\n  maxNumberOfFiles,\n  multiple,\n}: PropsWithChildren<ImageDropzoneProps>) => {\n  const { t } = useTranslationContext('ImageDropzone');\n\n  const handleDrop = useCallback(\n    (accepted: File[]) => {\n      if (!handleFiles) {\n        return;\n      }\n\n      if (accepted && accepted.length) {\n        handleFiles(accepted);\n      }\n    },\n    [handleFiles],\n  );\n\n  const accept = useMemo(\n    () =>\n      (typeof acceptedFiles === 'string'\n        ? acceptedFiles.split(',')\n        : acceptedFiles\n      ).reduce<Record<string, Array<string>>>((mediaTypeMap, mediaType) => {\n        mediaTypeMap[mediaType] ??= [];\n        return mediaTypeMap;\n      }, {}),\n    [acceptedFiles],\n  );\n\n  const { getRootProps, isDragAccept, isDragReject } = useDropzone({\n    accept,\n    disabled,\n    maxFiles: maxNumberOfFiles,\n    multiple,\n    noClick: true,\n    onDrop: handleDrop,\n  });\n\n  return (\n    <div\n      {...getRootProps({\n        className: clsx('rfu-dropzone', {\n          'rfu-dropzone--accept': isDragAccept,\n          'rfu-dropzone--reject': isDragReject,\n        }),\n        style: { position: 'relative' },\n      })}\n      tabIndex={-1}\n    >\n      <div className='rfu-dropzone__notifier'>\n        <div className='rfu-dropzone__inner'>\n          <svg\n            height='41'\n            viewBox='0 0 41 41'\n            width='41'\n            xmlns='http://www.w3.org/2000/svg'\n          >\n            <path\n              d='M40.517 28.002V3.997c0-2.197-1.808-3.992-4.005-3.992H12.507a4.004 4.004 0 0 0-3.992 3.993v24.004a4.004 4.004 0 0 0 3.992 3.993h24.005c2.197 0 4.005-1.795 4.005-3.993zm-22.002-7.997l4.062 5.42 5.937-7.423 7.998 10H12.507l6.008-7.997zM.517 8.003V36c0 2.198 1.795 4.005 3.993 4.005h27.997V36H4.51V8.002H.517z'\n              fill='#000'\n              fillRule='nonzero'\n            />\n          </svg>\n          <p>{t<string>('Drag your files here to add to your post')}</p>\n        </div>\n      </div>\n      {children}\n    </div>\n  );\n};\n", "import clsx from 'clsx';\nimport { nanoid } from 'nanoid';\nimport React, { ComponentProps, forwardRef, useCallback, useMemo } from 'react';\n\nimport { useHandleFileChangeWrapper } from './utils';\nimport {\n  useChannelStateContext,\n  useMessageInputContext,\n  useTranslationContext,\n} from '../../context';\nimport type { DefaultStreamChatGenerics } from '../../types';\nimport { PartialSelected } from '../../types/types';\n\n/**\n * @deprecated Use FileInputProps instead.\n */\nexport type UploadButtonProps = {\n  onFileChange: (files: Array<File>) => void;\n  resetOnChange?: boolean;\n} & Omit<ComponentProps<'input'>, 'type' | 'onChange'>;\n\n/**\n * @deprecated Use FileInput instead\n */\n\nexport const UploadButton = forwardRef(function UploadButton(\n  { onFileChange, resetOnChange = true, ...rest }: UploadButtonProps,\n  ref: React.ForwardedRef<HTMLInputElement>,\n) {\n  const handleInputChange = useHandleFileChangeWrapper(resetOnChange, onFileChange);\n\n  return <input onChange={handleInputChange} ref={ref} type='file' {...rest} />;\n});\n\nexport type FileInputProps = UploadButtonProps;\n\nexport const FileInput = UploadButton;\n\nexport const UploadFileInput = forwardRef(function UploadFileInput<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  {\n    className,\n    onFileChange: onFileChangeCustom,\n    ...props\n  }: PartialSelected<FileInputProps, 'onFileChange'>,\n  ref: React.ForwardedRef<HTMLInputElement>,\n) {\n  const { t } = useTranslationContext('UploadFileInput');\n  const { acceptedFiles = [], multipleUploads } =\n    useChannelStateContext<StreamChatGenerics>('UploadFileInput');\n  const { isUploadEnabled, maxFilesLeft, uploadNewFiles } =\n    useMessageInputContext<StreamChatGenerics>('UploadFileInput');\n  const id = useMemo(() => nanoid(), []);\n\n  const onFileChange = useCallback(\n    (files: Array<File>) => {\n      uploadNewFiles(files);\n      onFileChangeCustom?.(files);\n    },\n    [onFileChangeCustom, uploadNewFiles],\n  );\n\n  return (\n    <FileInput\n      accept={acceptedFiles?.join(',')}\n      aria-label={t('aria/File upload')}\n      data-testid='file-input'\n      disabled={!isUploadEnabled || maxFilesLeft === 0}\n      id={id}\n      multiple={multipleUploads}\n      {...props}\n      className={clsx('str-chat__file-input', className)}\n      onFileChange={onFileChange}\n      ref={ref}\n    />\n  );\n});\n", "import { FileLike, RecordedMediaType } from './types';\nimport { ChangeEvent, useCallback } from 'react';\n\nexport const useHandleFileChangeWrapper = (\n  resetOnChange = false,\n  handler?: (files: Array<File>) => void,\n) =>\n  useCallback(\n    ({ currentTarget }: ChangeEvent<HTMLInputElement>) => {\n      const { files } = currentTarget;\n\n      if (!files) return;\n\n      try {\n        handler?.(Array.from(files));\n      } catch (error) {\n        console.error(error);\n      }\n\n      if (resetOnChange) currentTarget.value = '';\n    },\n    [handler, resetOnChange],\n  );\n\nexport function dataTransferItemsHaveFiles(items?: DataTransferItem[]): boolean {\n  if (!items || !items.length) {\n    return false;\n  }\n  for (const item of items) {\n    if (item.kind === 'file' || item.type === 'text/html') {\n      return true;\n    }\n  }\n  return false;\n}\n\nexport async function dataTransferItemsToFiles(\n  items?: DataTransferItem[],\n): Promise<FileLike[]> {\n  if (!items || !items.length) {\n    return [];\n  }\n\n  // If there are files inside the DataTransferItem prefer those\n  const fileLikes = getFileLikes(items);\n  if (fileLikes.length) {\n    return fileLikes;\n  }\n\n  // Otherwise extract images from html\n  const blobPromises = [];\n  for (const item of items) {\n    if (item.type === 'text/html') {\n      blobPromises.push(\n        new Promise<void>((accept) => {\n          item.getAsString(async (s) => {\n            const imagePromises = extractImageSources(s).map((src) =>\n              getImageSource(fileLikes, src),\n            );\n\n            await Promise.all(imagePromises);\n            accept();\n          });\n        }),\n      );\n    }\n  }\n  await Promise.all(blobPromises);\n  return fileLikes;\n}\n\nfunction getFileLikes(items: DataTransferItem[]) {\n  const fileLikes = [];\n  for (const item of items) {\n    if (item.kind === 'file') {\n      const file = item.getAsFile();\n      if (file) {\n        fileLikes.push(file);\n      }\n    }\n  }\n  return fileLikes;\n}\n\nasync function getImageSource(fileLikes: FileLike[], src: string) {\n  let res;\n  try {\n    res = await fetch(src);\n  } catch (e) {\n    return;\n  }\n  const contentType = res.headers.get('Content-type') || 'application/octet-stream';\n  const buf = await res.arrayBuffer();\n  const blob = new Blob([buf], { type: contentType });\n  fileLikes.push(blob);\n}\n\nconst extractImageSources = (s: string) => {\n  const imageTags = new DOMParser()\n    .parseFromString(s, 'text/html')\n    .getElementsByTagName('img');\n  return Array.from(imageTags, (tag) => tag.src).filter((tag) => tag);\n};\n\nexport const isBlobButNotFile = (obj: unknown): obj is Blob =>\n  obj instanceof Blob && !(obj instanceof File);\n\nexport const createFileFromBlobs = ({\n  blobsArray,\n  fileName,\n  mimeType,\n}: {\n  blobsArray: Blob[];\n  fileName: string;\n  mimeType: string;\n}) => {\n  const concatenatedBlob = new Blob(blobsArray, { type: mimeType });\n  return new File([concatenatedBlob], fileName, { type: concatenatedBlob.type });\n};\n\nexport const getExtensionFromMimeType = (mimeType: string) => {\n  const match = mimeType.match(/\\/([^/;]+)/);\n  return match && match[1];\n};\n\nexport const getRecordedMediaTypeFromMimeType = (\n  mimeType: string,\n): RecordedMediaType | null => {\n  const match = mimeType.match(/^(audio|video)\\/.*$/);\n  return match && (match[1] as RecordedMediaType);\n};\n\nexport const readFileAsArrayBuffer = (file: File): Promise<ArrayBuffer> =>\n  new Promise((resolve, reject) => {\n    const fileReader = new FileReader();\n    fileReader.onload = () => {\n      resolve(fileReader.result as ArrayBuffer);\n    };\n\n    fileReader.onerror = () => {\n      reject(fileReader.error);\n    };\n\n    fileReader.readAsArrayBuffer(file);\n  });\n\nexport const generateFileName = (mimeType: string) =>\n  `file_${new Date().toISOString()}.${getExtensionFromMimeType(mimeType)}`;\n", "import React, { forwardRef, useEffect, useState } from 'react';\nimport clsx from 'clsx';\nimport { DownloadButton } from '../Attachment';\n\nexport type BaseImageProps = React.ComponentPropsWithRef<'img'>;\n\nexport const BaseImage = forwardRef<HTMLImageElement, BaseImageProps>(function BaseImage(\n  { ...props },\n  ref,\n) {\n  const { className: propsClassName, onError: propsOnError } = props;\n  const [error, setError] = useState(false);\n\n  useEffect(\n    () => () => {\n      setError(false);\n    },\n    [props.src],\n  );\n\n  return (\n    <>\n      <img\n        data-testid='str-chat__base-image'\n        {...props}\n        className={clsx(propsClassName, 'str-chat__base-image', {\n          'str-chat__base-image--load-failed': error,\n        })}\n        onError={(e) => {\n          setError(true);\n          propsOnError?.(e);\n        }}\n        ref={ref}\n      />\n      {error && <DownloadButton assetUrl={props.src} />}\n    </>\n  );\n});\n", "import React, { CSSProperties, MutableRefObject, useState } from 'react';\nimport { sanitizeUrl } from '@braintree/sanitize-url';\nimport clsx from 'clsx';\n\nimport { BaseImage as DefaultBaseImage } from './BaseImage';\nimport { Modal } from '../Modal';\nimport { ModalGallery as DefaultModalGallery } from './ModalGallery';\n\nimport { useComponentContext } from '../../context/ComponentContext';\nimport { useTranslationContext } from '../../context/TranslationContext';\n\nimport type { Attachment } from 'stream-chat';\n\nimport type { DefaultStreamChatGenerics } from '../../types/types';\n\nexport type GalleryProps<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n  images: ((\n    | {\n        image_url?: string | undefined;\n        thumb_url?: string | undefined;\n      }\n    | Attachment<StreamChatGenerics>\n  ) & { previewUrl?: string; style?: CSSProperties })[];\n  innerRefs?: MutableRefObject<(HTMLElement | null)[]>;\n};\n\nconst UnMemoizedGallery = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  props: GalleryProps<StreamChatGenerics>,\n) => {\n  const { images, innerRefs } = props;\n\n  const [index, setIndex] = useState(0);\n  const [modalOpen, setModalOpen] = useState(false);\n\n  const { BaseImage = DefaultBaseImage, ModalGallery = DefaultModalGallery } =\n    useComponentContext('Gallery');\n  const { t } = useTranslationContext('Gallery');\n\n  const imageFallbackTitle = t('User uploaded content');\n\n  const countImagesDisplayedInPreview = 4;\n  const lastImageIndexInPreview = countImagesDisplayedInPreview - 1;\n\n  const toggleModal = (selectedIndex: number) => {\n    if (modalOpen) {\n      setModalOpen(false);\n    } else {\n      setIndex(selectedIndex);\n      setModalOpen(true);\n    }\n  };\n\n  const renderImages = images.slice(0, countImagesDisplayedInPreview).map((image, i) =>\n    i === lastImageIndexInPreview && images.length > countImagesDisplayedInPreview ? (\n      <button\n        className='str-chat__gallery-placeholder'\n        data-testid='gallery-image-last'\n        key={`gallery-image-${i}`}\n        onClick={() => toggleModal(i)}\n        style={{\n          backgroundImage: `url(${\n            images[lastImageIndexInPreview].previewUrl ||\n            images[lastImageIndexInPreview].image_url ||\n            images[lastImageIndexInPreview].thumb_url\n          })`,\n          ...image.style,\n        }}\n        {...(innerRefs?.current && {\n          ref: (r) => {\n            innerRefs.current[i] = r;\n          },\n        })}\n      >\n        <p>\n          {t<string>('{{ imageCount }} more', {\n            imageCount: images.length - countImagesDisplayedInPreview,\n          })}\n        </p>\n      </button>\n    ) : (\n      <button\n        className='str-chat__gallery-image'\n        data-testid='gallery-image'\n        key={`gallery-image-${i}`}\n        onClick={() => toggleModal(i)}\n      >\n        <BaseImage\n          alt={(image as Attachment<StreamChatGenerics>)?.fallback || imageFallbackTitle}\n          src={sanitizeUrl(image.previewUrl || image.image_url || image.thumb_url)}\n          style={image.style}\n          title={\n            (image as Attachment<StreamChatGenerics>)?.fallback || imageFallbackTitle\n          }\n          {...(innerRefs?.current && {\n            ref: (r) => {\n              innerRefs.current[i] = r;\n            },\n          })}\n        />\n      </button>\n    ),\n  );\n\n  const className = clsx('str-chat__gallery', {\n    'str-chat__gallery--square': images.length > lastImageIndexInPreview,\n    'str-chat__gallery-two-rows': images.length > 2,\n  });\n\n  return (\n    <div className={className}>\n      {renderImages}\n      <Modal\n        className='str-chat__gallery-modal'\n        onClose={() => setModalOpen((modalOpen) => !modalOpen)}\n        open={modalOpen}\n      >\n        <ModalGallery images={images} index={index} />\n      </Modal>\n    </div>\n  );\n};\n\n/**\n * Displays images in a simple responsive grid with a light box to view the images.\n */\nexport const Gallery = React.memo(UnMemoizedGallery) as typeof UnMemoizedGallery;\n", "import clsx from 'clsx';\nimport React, { PropsWithChildren, useEffect, useRef } from 'react';\nimport { FocusScope } from '@react-aria/focus';\n\nimport { CloseIconRound } from './icons';\n\nimport { useTranslationContext } from '../../context';\n\nexport type ModalProps = {\n  /** If true, modal is opened or visible. */\n  open: boolean;\n  /** Custom class to be applied to the modal root div */\n  className?: string;\n  /** Callback handler for closing of modal. */\n  onClose?: (\n    event: React.KeyboardEvent | React.MouseEvent<HTMLButtonElement | HTMLDivElement>,\n  ) => void;\n};\n\nexport const Modal = ({\n  children,\n  className,\n  onClose,\n  open,\n}: PropsWithChildren<ModalProps>) => {\n  const { t } = useTranslationContext('Modal');\n\n  const innerRef = useRef<HTMLDivElement | null>(null);\n  const closeRef = useRef<HTMLButtonElement | null>(null);\n\n  const handleClick = (event: React.MouseEvent<HTMLButtonElement | HTMLDivElement>) => {\n    const target = event.target as HTMLButtonElement | HTMLDivElement;\n    if (!innerRef.current || !closeRef.current) return;\n\n    if (!innerRef.current.contains(target) || closeRef.current.contains(target))\n      onClose?.(event);\n  };\n\n  useEffect(() => {\n    if (!open) return;\n\n    const handleKeyDown = (event: KeyboardEvent) => {\n      if (event.key === 'Escape') onClose?.(event as unknown as React.KeyboardEvent);\n    };\n\n    document.addEventListener('keydown', handleKeyDown);\n    return () => document.removeEventListener('keydown', handleKeyDown);\n  }, [onClose, open]);\n\n  if (!open) return null;\n\n  return (\n    <div\n      className={clsx('str-chat__modal str-chat__modal--open', className)}\n      onClick={handleClick}\n    >\n      <FocusScope autoFocus contain>\n        <button\n          className='str-chat__modal__close-button'\n          ref={closeRef}\n          title={t<string>('Close')}\n        >\n          <CloseIconRound />\n        </button>\n        <div\n          className='str-chat__modal__inner str-chat-react__modal__inner'\n          ref={innerRef}\n        >\n          {children}\n        </div>\n      </FocusScope>\n    </div>\n  );\n};\n", "import React from 'react';\n\nexport const CloseIconRound = () => (\n  <svg\n    data-testid='close-icon-round'\n    fill='none'\n    height='28'\n    viewBox='0 0 28 28'\n    width='28'\n    xmlns='http://www.w3.org/2000/svg'\n  >\n    <rect fill='#72767E' height='28' rx='14' width='28' />\n    <circle cx='14' cy='14' fill='#72767E' r='12' />\n    <path\n      clipRule='evenodd'\n      d='M28 14C28 21.732 21.732 28 14 28C6.26801 28 0 21.732 0 14C0 6.26801 6.26801 0 14 0C21.732 0 28 6.26801 28 14ZM26 14C26 20.6274 20.6274 26 14 26C7.37258 26 2 20.6274 2 14C2 7.37258 7.37258 2 14 2C20.6274 2 26 7.37258 26 14ZM19.59 7L21 8.41L15.41 14L21 19.59L19.59 21L14 15.41L8.41 21L7 19.59L12.59 14L7 8.41L8.41 7L14 12.59L19.59 7Z'\n      fill='white'\n      fillRule='evenodd'\n    />\n  </svg>\n);\n", "import React, { useMemo } from 'react';\nimport ImageGallery, { ReactImageGalleryItem } from 'react-image-gallery';\nimport { BaseImage } from './BaseImage';\nimport { useTranslationContext } from '../../context';\n\nimport type { Attachment } from 'stream-chat';\nimport type { DefaultStreamChatGenerics } from '../../types/types';\n\nexport type ModalGalleryProps<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n  /** The images for the Carousel component */\n  images: Attachment<StreamChatGenerics>[];\n  /** The index for the component */\n  index?: number;\n};\n\nconst onError: React.ReactEventHandler<HTMLImageElement> = (e) => {\n  // Prevent having alt attribute on img as the img takes the height of the alt text\n  // instead of the CSS / element width & height when the CSS mask (fallback) is applied.\n  (e.target as HTMLImageElement).alt = '';\n};\n\nconst renderItem = ({ original, originalAlt }: ReactImageGalleryItem) => (\n  <BaseImage\n    alt={originalAlt}\n    className='image-gallery-image'\n    onError={onError}\n    src={original}\n  />\n);\n\nexport const ModalGallery = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  props: ModalGalleryProps<StreamChatGenerics>,\n) => {\n  const { images, index } = props;\n  const { t } = useTranslationContext('ModalGallery');\n\n  const formattedArray = useMemo(\n    () =>\n      images.map((image) => {\n        const imageSrc = image.image_url || image.thumb_url || '';\n        return {\n          original: imageSrc,\n          originalAlt: t('User uploaded content'),\n          source: imageSrc,\n        };\n      }),\n    [images, t],\n  );\n\n  return (\n    // @ts-expect-error ignore the TS error as react-image-gallery was on @types/react@18 while stream-chat-react being upgraded to React 19 (https://github.com/xiaolin/react-image-gallery/issues/809)\n    <ImageGallery\n      items={formattedArray}\n      renderItem={renderItem}\n      showIndex={true}\n      showPlayButton={false}\n      showThumbnails={false}\n      startIndex={index}\n    />\n  );\n};\n", "import React, { CSSProperties, MutableRefObject, useState } from 'react';\nimport { sanitizeUrl } from '@braintree/sanitize-url';\n\nimport { BaseImage as DefaultBaseImage } from './BaseImage';\nimport { Modal } from '../Modal';\nimport { ModalGallery as DefaultModalGallery } from './ModalGallery';\nimport { useComponentContext } from '../../context';\n\nimport type { Attachment } from 'stream-chat';\nimport type { DefaultStreamChatGenerics, Dimensions } from '../../types/types';\n\nexport type ImageProps<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n  dimensions?: Dimensions;\n  innerRef?: MutableRefObject<HTMLImageElement | null>;\n  previewUrl?: string;\n  style?: CSSProperties;\n} & (\n  | {\n      /** The text fallback for the image */\n      fallback?: string;\n      /** The full size image url */\n      image_url?: string;\n      /** The thumb url */\n      thumb_url?: string;\n    }\n  | Attachment<StreamChatGenerics>\n);\n\n/**\n * A simple component that displays an image.\n */\nexport const ImageComponent = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  props: ImageProps<StreamChatGenerics>,\n) => {\n  const {\n    dimensions = {},\n    fallback,\n    image_url,\n    innerRef,\n    previewUrl,\n    style,\n    thumb_url,\n  } = props;\n\n  const [modalIsOpen, setModalIsOpen] = useState(false);\n  const { BaseImage = DefaultBaseImage, ModalGallery = DefaultModalGallery } =\n    useComponentContext('ImageComponent');\n\n  const imageSrc = sanitizeUrl(previewUrl || image_url || thumb_url);\n\n  const toggleModal = () => setModalIsOpen((modalIsOpen) => !modalIsOpen);\n\n  return (\n    <>\n      <BaseImage\n        alt={fallback}\n        className='str-chat__message-attachment--img'\n        data-testid='image-test'\n        onClick={toggleModal}\n        src={imageSrc}\n        style={style}\n        tabIndex={0}\n        title={fallback}\n        {...dimensions}\n        {...(innerRef && { ref: innerRef })}\n      />\n      <Modal className='str-chat__image-modal' onClose={toggleModal} open={modalIsOpen}>\n        <ModalGallery images={[props]} index={0} />\n      </Modal>\n    </>\n  );\n};\n", "import React from 'react';\nimport clsx from 'clsx';\nimport ReactPlayer from 'react-player';\n\nimport { AudioProps } from './Audio';\nimport { ImageComponent } from '../Gallery';\nimport { SafeAnchor } from '../SafeAnchor';\nimport { PlayButton, ProgressBar } from './components';\nimport { useAudioController } from './hooks/useAudioController';\nimport { useChannelStateContext } from '../../context/ChannelStateContext';\nimport { useTranslationContext } from '../../context/TranslationContext';\n\nimport type { Attachment } from 'stream-chat';\nimport type { RenderAttachmentProps } from './utils';\nimport type { Dimensions } from '../../types/types';\n\nconst getHostFromURL = (url?: string | null) => {\n  if (url !== undefined && url !== null) {\n    const [trimmedUrl] = url.replace(/^(?:https?:\\/\\/)?(?:www\\.)?/i, '').split('/');\n\n    return trimmedUrl;\n  }\n  return null;\n};\n\nconst UnableToRenderCard = ({ type }: { type?: CardProps['type'] }) => {\n  const { t } = useTranslationContext('Card');\n\n  return (\n    <div\n      className={clsx('str-chat__message-attachment-card', {\n        [`str-chat__message-attachment-card--${type}`]: type,\n      })}\n    >\n      <div className='str-chat__message-attachment-card--content'>\n        <div className='str-chat__message-attachment-card--text'>\n          {t<string>('this content could not be displayed')}\n        </div>\n      </div>\n    </div>\n  );\n};\n\nconst SourceLink = ({\n  author_name,\n  url,\n}: Pick<CardProps, 'author_name'> & { url: string }) => (\n  <div\n    className='str-chat__message-attachment-card--source-link'\n    data-testid='card-source-link'\n  >\n    <SafeAnchor\n      className='str-chat__message-attachment-card--url'\n      href={url}\n      rel='noopener noreferrer'\n      target='_blank'\n    >\n      {author_name || getHostFromURL(url)}\n    </SafeAnchor>\n  </div>\n);\n\ntype CardHeaderProps = Pick<\n  CardProps,\n  'asset_url' | 'title' | 'type' | 'image_url' | 'thumb_url'\n> & {\n  dimensions: Dimensions;\n  image?: string;\n};\n\nconst CardHeader = (props: CardHeaderProps) => {\n  const { asset_url, dimensions, image, image_url, thumb_url, title, type } = props;\n\n  let visual = null;\n  if (asset_url && type === 'video') {\n    visual = (\n      <ReactPlayer\n        className='react-player'\n        controls\n        height='100%'\n        url={asset_url}\n        width='100%'\n      />\n    );\n  } else if (image) {\n    visual = (\n      <ImageComponent\n        dimensions={dimensions}\n        fallback={title || image}\n        image_url={image_url}\n        thumb_url={thumb_url}\n      />\n    );\n  }\n\n  return visual ? (\n    <div\n      className='str-chat__message-attachment-card--header str-chat__message-attachment-card-react--header'\n      data-testid={'card-header'}\n    >\n      {visual}\n    </div>\n  ) : null;\n};\n\ntype CardContentProps = RenderAttachmentProps['attachment'];\n\nconst CardContent = (props: CardContentProps) => {\n  const { author_name, og_scrape_url, text, title, title_link, type } = props;\n  const url = title_link || og_scrape_url;\n\n  return (\n    <div className='str-chat__message-attachment-card--content'>\n      {type === 'audio' ? (\n        <CardAudio og={props} />\n      ) : (\n        <div className='str-chat__message-attachment-card--flex'>\n          {url && <SourceLink author_name={author_name} url={url} />}\n          {title && (\n            <div className='str-chat__message-attachment-card--title'>{title}</div>\n          )}\n          {text && <div className='str-chat__message-attachment-card--text'>{text}</div>}\n        </div>\n      )}\n    </div>\n  );\n};\n\nexport const CardAudio = ({\n  og: { asset_url, author_name, mime_type, og_scrape_url, text, title, title_link },\n}: AudioProps) => {\n  const { audioRef, isPlaying, progress, seek, togglePlay } = useAudioController({\n    mimeType: mime_type,\n  });\n\n  const url = title_link || og_scrape_url;\n  const dataTestId = 'card-audio-widget';\n  const rootClassName = 'str-chat__message-attachment-card-audio-widget';\n  return (\n    <div className={rootClassName} data-testid={dataTestId}>\n      {asset_url && (\n        <>\n          <audio ref={audioRef}>\n            <source data-testid='audio-source' src={asset_url} type='audio/mp3' />\n          </audio>\n          <div className='str-chat__message-attachment-card-audio-widget--first-row'>\n            <div className='str-chat__message-attachment-audio-widget--play-controls'>\n              <PlayButton isPlaying={isPlaying} onClick={togglePlay} />\n            </div>\n            <ProgressBar onClick={seek} progress={progress} />\n          </div>\n        </>\n      )}\n      <div className='str-chat__message-attachment-audio-widget--second-row'>\n        {url && <SourceLink author_name={author_name} url={url} />}\n        {title && (\n          <div className='str-chat__message-attachment-audio-widget--title'>{title}</div>\n        )}\n        {text && (\n          <div className='str-chat__message-attachment-audio-widget--description'>\n            {text}\n          </div>\n        )}\n      </div>\n    </div>\n  );\n};\n\nexport type CardProps = RenderAttachmentProps['attachment'];\n\nconst UnMemoizedCard = (props: CardProps) => {\n  const { asset_url, giphy, image_url, thumb_url, title, title_link, type } = props;\n  const { giphyVersion: giphyVersionName } = useChannelStateContext('CardHeader');\n\n  let image = thumb_url || image_url;\n  const dimensions: { height?: string; width?: string } = {};\n\n  if (type === 'giphy' && typeof giphy !== 'undefined') {\n    const giphyVersion =\n      giphy[giphyVersionName as keyof NonNullable<Attachment['giphy']>];\n    image = giphyVersion.url;\n    dimensions.height = giphyVersion.height;\n    dimensions.width = giphyVersion.width;\n  }\n\n  if (!title && !title_link && !asset_url && !image) {\n    return <UnableToRenderCard />;\n  }\n\n  return (\n    <div\n      className={`str-chat__message-attachment-card str-chat__message-attachment-card--${type}`}\n    >\n      <CardHeader {...props} dimensions={dimensions} image={image} />\n      <CardContent {...props} />\n    </div>\n  );\n};\n\n/**\n * Simple Card Layout for displaying links\n */\nexport const Card = React.memo(UnMemoizedCard) as typeof UnMemoizedCard;\n", "import React from 'react';\nimport { FileIcon } from '../ReactFileUtilities';\nimport type { Attachment } from 'stream-chat';\n\nimport { DownloadButton, FileSizeIndicator } from './components';\n\nimport type { DefaultStreamChatGenerics } from '../../types/types';\n\nexport type FileAttachmentProps<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n  attachment: Attachment<StreamChatGenerics>;\n};\n\nconst UnMemoizedFileAttachment = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n  attachment,\n}: FileAttachmentProps<StreamChatGenerics>) => (\n  <div className='str-chat__message-attachment-file--item' data-testid='attachment-file'>\n    <FileIcon className='str-chat__file-icon' mimeType={attachment.mime_type} />\n    <div className='str-chat__message-attachment-file--item-text'>\n      <div className='str-chat__message-attachment-file--item-first-row'>\n        <div\n          className='str-chat__message-attachment-file--item-name'\n          data-testid='file-title'\n        >\n          {attachment.title}\n        </div>\n        <DownloadButton assetUrl={attachment.asset_url} />\n      </div>\n      <FileSizeIndicator fileSize={attachment.file_size} />\n    </div>\n  </div>\n);\n\nexport const FileAttachment = React.memo(\n  UnMemoizedFileAttachment,\n) as typeof UnMemoizedFileAttachment;\n", "import React from 'react';\nimport { FileIcon } from '../ReactFileUtilities';\nimport { useTranslationContext } from '../../context';\nimport type { Attachment } from 'stream-chat';\nimport type { DefaultStreamChatGenerics } from '../../types/types';\n\nexport type UnsupportedAttachmentProps<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n  attachment: Attachment<StreamChatGenerics>;\n};\n\nexport const UnsupportedAttachment = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n  attachment,\n}: UnsupportedAttachmentProps<StreamChatGenerics>) => {\n  const { t } = useTranslationContext('UnsupportedAttachment');\n  return (\n    <div\n      className='str-chat__message-attachment-unsupported'\n      data-testid='attachment-unsupported'\n    >\n      <FileIcon className='str-chat__file-icon' />\n      <div className='str-chat__message-attachment-unsupported__metadata'>\n        <div\n          className='str-chat__message-attachment-unsupported__title'\n          data-testid='unsupported-attachment-title'\n        >\n          {attachment.title || t<string>('Unsupported attachment')}\n        </div>\n      </div>\n    </div>\n  );\n};\n", "import React, { useCallback } from 'react';\nimport clsx from 'clsx';\n\nexport const Item = React.forwardRef(function Item(props, innerRef) {\n  const {\n    className,\n    component: Component,\n    item,\n    onClickHandler,\n    onSelectHandler,\n    selected,\n    style,\n  } = props;\n\n  const handleSelect = useCallback(() => onSelectHandler(item), [item, onSelectHandler]);\n  const handleClick = useCallback(\n    (event) => onClickHandler(event, item),\n    [item, onClickHandler],\n  );\n\n  return (\n    <li\n      className={clsx(className, { 'str-chat__suggestion-item--selected': selected })}\n      style={style}\n    >\n      <a\n        href=''\n        onClick={handleClick}\n        onFocus={handleSelect}\n        onMouseEnter={handleSelect}\n        ref={innerRef}\n      >\n        <Component entity={item} selected={selected} />\n      </a>\n    </li>\n  );\n});\n", "import React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport clsx from 'clsx';\n\nimport { useComponentContext } from '../../context/ComponentContext';\n\nimport { Item } from './Item';\nimport { escapeRegExp } from '../Message/renderText';\n\nexport const List = ({\n  className,\n  component,\n  currentTrigger,\n  dropdownScroll,\n  getSelectedItem,\n  getTextToReplace,\n  itemClassName,\n  itemStyle,\n  onSelect,\n  selectionEnd,\n  style,\n  SuggestionItem: PropSuggestionItem,\n  value: propValue,\n  values,\n}) => {\n  const { AutocompleteSuggestionItem } = useComponentContext('SuggestionList');\n  const SuggestionItem = PropSuggestionItem || AutocompleteSuggestionItem || Item;\n\n  const [selectedItemIndex, setSelectedItemIndex] = useState(undefined);\n\n  const itemsRef = [];\n\n  const isSelected = (item) =>\n    selectedItemIndex === values.findIndex((value) => getId(value) === getId(item));\n\n  const getId = (item) => {\n    const textToReplace = getTextToReplace(item);\n    if (textToReplace.key) {\n      return textToReplace.key;\n    }\n\n    if (typeof item === 'string' || !item.key) {\n      return textToReplace.text;\n    }\n\n    return item.key;\n  };\n\n  const findItemIndex = useCallback(\n    (item) =>\n      values.findIndex((value) =>\n        value.id ? value.id === item.id : value.name === item.name,\n      ),\n    [values],\n  );\n\n  const modifyText = (value) => {\n    if (!value) return;\n\n    onSelect(getTextToReplace(value));\n    if (getSelectedItem) getSelectedItem(value);\n  };\n\n  const handleClick = useCallback(\n    (e, item) => {\n      e?.preventDefault();\n\n      const index = findItemIndex(item);\n\n      modifyText(values[index]);\n    },\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    [modifyText, findItemIndex],\n  );\n\n  const selectItem = useCallback(\n    (item) => {\n      const index = findItemIndex(item);\n      setSelectedItemIndex(index);\n    },\n    [findItemIndex],\n  );\n\n  const handleKeyDown = useCallback(\n    (event) => {\n      if (event.key === 'ArrowUp') {\n        setSelectedItemIndex((prevSelected) => {\n          if (prevSelected === undefined) return 0;\n          const newIndex = prevSelected === 0 ? values.length - 1 : prevSelected - 1;\n          dropdownScroll(itemsRef[newIndex]);\n          return newIndex;\n        });\n      }\n\n      if (event.key === 'ArrowDown') {\n        setSelectedItemIndex((prevSelected) => {\n          if (prevSelected === undefined) return 0;\n          const newIndex = prevSelected === values.length - 1 ? 0 : prevSelected + 1;\n          dropdownScroll(itemsRef[newIndex]);\n          return newIndex;\n        });\n      }\n\n      if (\n        (event.key === 'Enter' || event.key === 'Tab') &&\n        selectedItemIndex !== undefined\n      ) {\n        handleClick(event, values[selectedItemIndex]);\n      }\n\n      return null;\n    },\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    [selectedItemIndex, values],\n  );\n\n  useEffect(() => {\n    document.addEventListener('keydown', handleKeyDown, false);\n    return () => document.removeEventListener('keydown', handleKeyDown);\n  }, [handleKeyDown]);\n\n  useEffect(() => {\n    if (values?.length) selectItem(values[0]);\n  }, [values]); // eslint-disable-line\n\n  const restructureItem = useCallback(\n    (item) => {\n      const matched = item.name || item.id;\n\n      const textBeforeCursor = propValue.slice(0, selectionEnd);\n      const triggerIndex = textBeforeCursor.lastIndexOf(currentTrigger);\n      const editedPropValue = escapeRegExp(textBeforeCursor.slice(triggerIndex + 1));\n\n      const parts = matched.split(new RegExp(`(${editedPropValue})`, 'gi'));\n\n      const itemNameParts = { match: editedPropValue, parts };\n\n      return { ...item, itemNameParts };\n    },\n    [propValue, selectionEnd, currentTrigger],\n  );\n\n  const restructuredValues = useMemo(\n    () => values.map(restructureItem),\n    [values, restructureItem],\n  );\n\n  return (\n    <ul className={clsx('str-chat__suggestion-list', className)} style={style}>\n      {restructuredValues.map((item, i) => (\n        <SuggestionItem\n          className={itemClassName}\n          component={component}\n          item={item}\n          key={getId(item)}\n          onClickHandler={handleClick}\n          onSelectHandler={selectItem}\n          ref={(ref) => {\n            itemsRef[i] = ref;\n          }}\n          selected={isSelected(item)}\n          style={itemStyle}\n          value={propValue}\n        />\n      ))}\n    </ul>\n  );\n};\n", "export function escapeRegExp(text: string) {\n  return text.replace(/[-[\\]{}()*+?.,/\\\\^$|#]/g, '\\\\$&');\n}\n\nexport const detectHttp = /(http(s?):\\/\\/)?(www\\.)?/;\n\nexport const messageCodeBlocks = (message: string) => {\n  const codeRegex = /```[a-z]*\\n[\\s\\S]*?\\n```|`[a-z]*[\\s\\S]*?`/gm;\n  const matches = message.match(codeRegex);\n  return matches || [];\n};\n\nexport const matchMarkdownLinks = (message: string) => {\n  const regexMdLinks = /\\[([^[]+)\\](\\(.*\\))/gm;\n  const matches = message.match(regexMdLinks);\n  const singleMatch = /\\[([^[]+)\\]\\((.*)\\)/;\n\n  const links = matches\n    ? matches.map((match) => {\n        const i = singleMatch.exec(match);\n        return i && [i[1], i[2]];\n      })\n    : [];\n\n  return links.flat();\n};\n", "/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('unist').Parent} Parent\n */\n\n/**\n * @template Fn\n * @template Fallback\n * @typedef {Fn extends (value: any) => value is infer Thing ? Thing : Fallback} Predicate\n */\n\n/**\n * @callback Check\n *   Check that an arbitrary value is a node.\n * @param {unknown} this\n *   The given context.\n * @param {unknown} [node]\n *   Anything (typically a node).\n * @param {number | null | undefined} [index]\n *   The node\u2019s position in its parent.\n * @param {Parent | null | undefined} [parent]\n *   The node\u2019s parent.\n * @returns {boolean}\n *   Whether this is a node and passes a test.\n *\n * @typedef {Record<string, unknown> | Node} Props\n *   Object to check for equivalence.\n *\n *   Note: `Node` is included as it is common but is not indexable.\n *\n * @typedef {Array<Props | TestFunction | string> | Props | TestFunction | string | null | undefined} Test\n *   Check for an arbitrary node.\n *\n * @callback TestFunction\n *   Check if a node passes a test.\n * @param {unknown} this\n *   The given context.\n * @param {Node} node\n *   A node.\n * @param {number | undefined} [index]\n *   The node\u2019s position in its parent.\n * @param {Parent | undefined} [parent]\n *   The node\u2019s parent.\n * @returns {boolean | undefined | void}\n *   Whether this node passes the test.\n *\n *   Note: `void` is included until TS sees no return as `undefined`.\n */\n\n/**\n * Check if `node` is a `Node` and whether it passes the given test.\n *\n * @param {unknown} node\n *   Thing to check, typically `Node`.\n * @param {Test} test\n *   A check for a specific node.\n * @param {number | null | undefined} index\n *   The node\u2019s position in its parent.\n * @param {Parent | null | undefined} parent\n *   The node\u2019s parent.\n * @param {unknown} context\n *   Context object (`this`) to pass to `test` functions.\n * @returns {boolean}\n *   Whether `node` is a node and passes a test.\n */\nexport const is =\n  // Note: overloads in JSDoc can\u2019t yet use different `@template`s.\n  /**\n   * @type {(\n   *   (<Condition extends string>(node: unknown, test: Condition, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & {type: Condition}) &\n   *   (<Condition extends Props>(node: unknown, test: Condition, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Condition) &\n   *   (<Condition extends TestFunction>(node: unknown, test: Condition, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Predicate<Condition, Node>) &\n   *   ((node?: null | undefined) => false) &\n   *   ((node: unknown, test?: null | undefined, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node) &\n   *   ((node: unknown, test?: Test, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => boolean)\n   * )}\n   */\n  (\n    /**\n     * @param {unknown} [node]\n     * @param {Test} [test]\n     * @param {number | null | undefined} [index]\n     * @param {Parent | null | undefined} [parent]\n     * @param {unknown} [context]\n     * @returns {boolean}\n     */\n    // eslint-disable-next-line max-params\n    function (node, test, index, parent, context) {\n      const check = convert(test)\n\n      if (\n        index !== undefined &&\n        index !== null &&\n        (typeof index !== 'number' ||\n          index < 0 ||\n          index === Number.POSITIVE_INFINITY)\n      ) {\n        throw new Error('Expected positive finite index')\n      }\n\n      if (\n        parent !== undefined &&\n        parent !== null &&\n        (!is(parent) || !parent.children)\n      ) {\n        throw new Error('Expected parent node')\n      }\n\n      if (\n        (parent === undefined || parent === null) !==\n        (index === undefined || index === null)\n      ) {\n        throw new Error('Expected both parent and index')\n      }\n\n      return looksLikeANode(node)\n        ? check.call(context, node, index, parent)\n        : false\n    }\n  )\n\n/**\n * Generate an assertion from a test.\n *\n * Useful if you\u2019re going to test many nodes, for example when creating a\n * utility where something else passes a compatible test.\n *\n * The created function is a bit faster because it expects valid input only:\n * a `node`, `index`, and `parent`.\n *\n * @param {Test} test\n *   *   when nullish, checks if `node` is a `Node`.\n *   *   when `string`, works like passing `(node) => node.type === test`.\n *   *   when `function` checks if function passed the node is true.\n *   *   when `object`, checks that all keys in test are in node, and that they have (strictly) equal values.\n *   *   when `array`, checks if any one of the subtests pass.\n * @returns {Check}\n *   An assertion.\n */\nexport const convert =\n  // Note: overloads in JSDoc can\u2019t yet use different `@template`s.\n  /**\n   * @type {(\n   *   (<Condition extends string>(test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & {type: Condition}) &\n   *   (<Condition extends Props>(test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Condition) &\n   *   (<Condition extends TestFunction>(test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Predicate<Condition, Node>) &\n   *   ((test?: null | undefined) => (node?: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node) &\n   *   ((test?: Test) => Check)\n   * )}\n   */\n  (\n    /**\n     * @param {Test} [test]\n     * @returns {Check}\n     */\n    function (test) {\n      if (test === null || test === undefined) {\n        return ok\n      }\n\n      if (typeof test === 'function') {\n        return castFactory(test)\n      }\n\n      if (typeof test === 'object') {\n        return Array.isArray(test) ? anyFactory(test) : propsFactory(test)\n      }\n\n      if (typeof test === 'string') {\n        return typeFactory(test)\n      }\n\n      throw new Error('Expected function, string, or object as test')\n    }\n  )\n\n/**\n * @param {Array<Props | TestFunction | string>} tests\n * @returns {Check}\n */\nfunction anyFactory(tests) {\n  /** @type {Array<Check>} */\n  const checks = []\n  let index = -1\n\n  while (++index < tests.length) {\n    checks[index] = convert(tests[index])\n  }\n\n  return castFactory(any)\n\n  /**\n   * @this {unknown}\n   * @type {TestFunction}\n   */\n  function any(...parameters) {\n    let index = -1\n\n    while (++index < checks.length) {\n      if (checks[index].apply(this, parameters)) return true\n    }\n\n    return false\n  }\n}\n\n/**\n * Turn an object into a test for a node with a certain fields.\n *\n * @param {Props} check\n * @returns {Check}\n */\nfunction propsFactory(check) {\n  const checkAsRecord = /** @type {Record<string, unknown>} */ (check)\n\n  return castFactory(all)\n\n  /**\n   * @param {Node} node\n   * @returns {boolean}\n   */\n  function all(node) {\n    const nodeAsRecord = /** @type {Record<string, unknown>} */ (\n      /** @type {unknown} */ (node)\n    )\n\n    /** @type {string} */\n    let key\n\n    for (key in check) {\n      if (nodeAsRecord[key] !== checkAsRecord[key]) return false\n    }\n\n    return true\n  }\n}\n\n/**\n * Turn a string into a test for a node with a certain type.\n *\n * @param {string} check\n * @returns {Check}\n */\nfunction typeFactory(check) {\n  return castFactory(type)\n\n  /**\n   * @param {Node} node\n   */\n  function type(node) {\n    return node && node.type === check\n  }\n}\n\n/**\n * Turn a custom test into a test for a node that passes that test.\n *\n * @param {TestFunction} testFunction\n * @returns {Check}\n */\nfunction castFactory(testFunction) {\n  return check\n\n  /**\n   * @this {unknown}\n   * @type {Check}\n   */\n  function check(value, index, parent) {\n    return Boolean(\n      looksLikeANode(value) &&\n        testFunction.call(\n          this,\n          value,\n          typeof index === 'number' ? index : undefined,\n          parent || undefined\n        )\n    )\n  }\n}\n\nfunction ok() {\n  return true\n}\n\n/**\n * @param {unknown} value\n * @returns {value is Node}\n */\nfunction looksLikeANode(value) {\n  return value !== null && typeof value === 'object' && 'type' in value\n}\n", "/**\n * @param {string} d\n * @returns {string}\n */\nexport function color(d) {\n  return '\\u001B[33m' + d + '\\u001B[39m'\n}\n", "/**\n * @typedef {import('unist').Node} UnistNode\n * @typedef {import('unist').Parent} UnistParent\n */\n\n/**\n * @typedef {Exclude<import('unist-util-is').Test, undefined> | undefined} Test\n *   Test from `unist-util-is`.\n *\n *   Note: we have remove and add `undefined`, because otherwise when generating\n *   automatic `.d.ts` files, TS tries to flatten paths from a local perspective,\n *   which doesn\u2019t work when publishing on npm.\n */\n\n/**\n * @typedef {(\n *   Fn extends (value: any) => value is infer Thing\n *   ? Thing\n *   : Fallback\n * )} Predicate\n *   Get the value of a type guard `Fn`.\n * @template Fn\n *   Value; typically function that is a type guard (such as `(x): x is Y`).\n * @template Fallback\n *   Value to yield if `Fn` is not a type guard.\n */\n\n/**\n * @typedef {(\n *   Check extends null | undefined // No test.\n *   ? Value\n *   : Value extends {type: Check} // String (type) test.\n *   ? Value\n *   : Value extends Check // Partial test.\n *   ? Value\n *   : Check extends Function // Function test.\n *   ? Predicate<Check, Value> extends Value\n *     ? Predicate<Check, Value>\n *     : never\n *   : never // Some other test?\n * )} MatchesOne\n *   Check whether a node matches a primitive check in the type system.\n * @template Value\n *   Value; typically unist `Node`.\n * @template Check\n *   Value; typically `unist-util-is`-compatible test, but not arrays.\n */\n\n/**\n * @typedef {(\n *   Check extends Array<any>\n *   ? MatchesOne<Value, Check[keyof Check]>\n *   : MatchesOne<Value, Check>\n * )} Matches\n *   Check whether a node matches a check in the type system.\n * @template Value\n *   Value; typically unist `Node`.\n * @template Check\n *   Value; typically `unist-util-is`-compatible test.\n */\n\n/**\n * @typedef {0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10} Uint\n *   Number; capped reasonably.\n */\n\n/**\n * @typedef {I extends 0 ? 1 : I extends 1 ? 2 : I extends 2 ? 3 : I extends 3 ? 4 : I extends 4 ? 5 : I extends 5 ? 6 : I extends 6 ? 7 : I extends 7 ? 8 : I extends 8 ? 9 : 10} Increment\n *   Increment a number in the type system.\n * @template {Uint} [I=0]\n *   Index.\n */\n\n/**\n * @typedef {(\n *   Node extends UnistParent\n *   ? Node extends {children: Array<infer Children>}\n *     ? Child extends Children ? Node : never\n *     : never\n *   : never\n * )} InternalParent\n *   Collect nodes that can be parents of `Child`.\n * @template {UnistNode} Node\n *   All node types in a tree.\n * @template {UnistNode} Child\n *   Node to search for.\n */\n\n/**\n * @typedef {InternalParent<InclusiveDescendant<Tree>, Child>} Parent\n *   Collect nodes in `Tree` that can be parents of `Child`.\n * @template {UnistNode} Tree\n *   All node types in a tree.\n * @template {UnistNode} Child\n *   Node to search for.\n */\n\n/**\n * @typedef {(\n *   Depth extends Max\n *   ? never\n *   :\n *     | InternalParent<Node, Child>\n *     | InternalAncestor<Node, InternalParent<Node, Child>, Max, Increment<Depth>>\n * )} InternalAncestor\n *   Collect nodes in `Tree` that can be ancestors of `Child`.\n * @template {UnistNode} Node\n *   All node types in a tree.\n * @template {UnistNode} Child\n *   Node to search for.\n * @template {Uint} [Max=10]\n *   Max; searches up to this depth.\n * @template {Uint} [Depth=0]\n *   Current depth.\n */\n\n/**\n * @typedef {InternalAncestor<InclusiveDescendant<Tree>, Child>} Ancestor\n *   Collect nodes in `Tree` that can be ancestors of `Child`.\n * @template {UnistNode} Tree\n *   All node types in a tree.\n * @template {UnistNode} Child\n *   Node to search for.\n */\n\n/**\n * @typedef {(\n *   Tree extends UnistParent\n *     ? Depth extends Max\n *       ? Tree\n *       : Tree | InclusiveDescendant<Tree['children'][number], Max, Increment<Depth>>\n *     : Tree\n * )} InclusiveDescendant\n *   Collect all (inclusive) descendants of `Tree`.\n *\n *   > \uD83D\uDC49 **Note**: for performance reasons, this seems to be the fastest way to\n *   > recurse without actually running into an infinite loop, which the\n *   > previous version did.\n *   >\n *   > Practically, a max of `2` is typically enough assuming a `Root` is\n *   > passed, but it doesn\u2019t improve performance.\n *   > It gets higher with `List > ListItem > Table > TableRow > TableCell`.\n *   > Using up to `10` doesn\u2019t hurt or help either.\n * @template {UnistNode} Tree\n *   Tree type.\n * @template {Uint} [Max=10]\n *   Max; searches up to this depth.\n * @template {Uint} [Depth=0]\n *   Current depth.\n */\n\n/**\n * @typedef {'skip' | boolean} Action\n *   Union of the action types.\n *\n * @typedef {number} Index\n *   Move to the sibling at `index` next (after node itself is completely\n *   traversed).\n *\n *   Useful if mutating the tree, such as removing the node the visitor is\n *   currently on, or any of its previous siblings.\n *   Results less than 0 or greater than or equal to `children.length` stop\n *   traversing the parent.\n *\n * @typedef {[(Action | null | undefined | void)?, (Index | null | undefined)?]} ActionTuple\n *   List with one or two values, the first an action, the second an index.\n *\n * @typedef {Action | ActionTuple | Index | null | undefined | void} VisitorResult\n *   Any value that can be returned from a visitor.\n */\n\n/**\n * @callback Visitor\n *   Handle a node (matching `test`, if given).\n *\n *   Visitors are free to transform `node`.\n *   They can also transform the parent of node (the last of `ancestors`).\n *\n *   Replacing `node` itself, if `SKIP` is not returned, still causes its\n *   descendants to be walked (which is a bug).\n *\n *   When adding or removing previous siblings of `node` (or next siblings, in\n *   case of reverse), the `Visitor` should return a new `Index` to specify the\n *   sibling to traverse after `node` is traversed.\n *   Adding or removing next siblings of `node` (or previous siblings, in case\n *   of reverse) is handled as expected without needing to return a new `Index`.\n *\n *   Removing the children property of an ancestor still results in them being\n *   traversed.\n * @param {Visited} node\n *   Found node.\n * @param {Array<VisitedParents>} ancestors\n *   Ancestors of `node`.\n * @returns {VisitorResult}\n *   What to do next.\n *\n *   An `Index` is treated as a tuple of `[CONTINUE, Index]`.\n *   An `Action` is treated as a tuple of `[Action]`.\n *\n *   Passing a tuple back only makes sense if the `Action` is `SKIP`.\n *   When the `Action` is `EXIT`, that action can be returned.\n *   When the `Action` is `CONTINUE`, `Index` can be returned.\n * @template {UnistNode} [Visited=UnistNode]\n *   Visited node type.\n * @template {UnistParent} [VisitedParents=UnistParent]\n *   Ancestor type.\n */\n\n/**\n * @typedef {Visitor<Matches<InclusiveDescendant<Tree>, Check>, Ancestor<Tree, Matches<InclusiveDescendant<Tree>, Check>>>} BuildVisitor\n *   Build a typed `Visitor` function from a tree and a test.\n *\n *   It will infer which values are passed as `node` and which as `parents`.\n * @template {UnistNode} [Tree=UnistNode]\n *   Tree type.\n * @template {Test} [Check=Test]\n *   Test type.\n */\n\nimport {convert} from 'unist-util-is'\nimport {color} from 'unist-util-visit-parents/do-not-use-color'\n\n/** @type {Readonly<ActionTuple>} */\nconst empty = []\n\n/**\n * Continue traversing as normal.\n */\nexport const CONTINUE = true\n\n/**\n * Stop traversing immediately.\n */\nexport const EXIT = false\n\n/**\n * Do not traverse this node\u2019s children.\n */\nexport const SKIP = 'skip'\n\n/**\n * Visit nodes, with ancestral information.\n *\n * This algorithm performs *depth-first* *tree traversal* in *preorder*\n * (**NLR**) or if `reverse` is given, in *reverse preorder* (**NRL**).\n *\n * You can choose for which nodes `visitor` is called by passing a `test`.\n * For complex tests, you should test yourself in `visitor`, as it will be\n * faster and will have improved type information.\n *\n * Walking the tree is an intensive task.\n * Make use of the return values of the visitor when possible.\n * Instead of walking a tree multiple times, walk it once, use `unist-util-is`\n * to check if a node matches, and then perform different operations.\n *\n * You can change the tree.\n * See `Visitor` for more info.\n *\n * @overload\n * @param {Tree} tree\n * @param {Check} check\n * @param {BuildVisitor<Tree, Check>} visitor\n * @param {boolean | null | undefined} [reverse]\n * @returns {undefined}\n *\n * @overload\n * @param {Tree} tree\n * @param {BuildVisitor<Tree>} visitor\n * @param {boolean | null | undefined} [reverse]\n * @returns {undefined}\n *\n * @param {UnistNode} tree\n *   Tree to traverse.\n * @param {Visitor | Test} test\n *   `unist-util-is`-compatible test\n * @param {Visitor | boolean | null | undefined} [visitor]\n *   Handle each node.\n * @param {boolean | null | undefined} [reverse]\n *   Traverse in reverse preorder (NRL) instead of the default preorder (NLR).\n * @returns {undefined}\n *   Nothing.\n *\n * @template {UnistNode} Tree\n *   Node type.\n * @template {Test} Check\n *   `unist-util-is`-compatible test.\n */\nexport function visitParents(tree, test, visitor, reverse) {\n  /** @type {Test} */\n  let check\n\n  if (typeof test === 'function' && typeof visitor !== 'function') {\n    reverse = visitor\n    // @ts-expect-error no visitor given, so `visitor` is test.\n    visitor = test\n  } else {\n    // @ts-expect-error visitor given, so `test` isn\u2019t a visitor.\n    check = test\n  }\n\n  const is = convert(check)\n  const step = reverse ? -1 : 1\n\n  factory(tree, undefined, [])()\n\n  /**\n   * @param {UnistNode} node\n   * @param {number | undefined} index\n   * @param {Array<UnistParent>} parents\n   */\n  function factory(node, index, parents) {\n    const value = /** @type {Record<string, unknown>} */ (\n      node && typeof node === 'object' ? node : {}\n    )\n\n    if (typeof value.type === 'string') {\n      const name =\n        // `hast`\n        typeof value.tagName === 'string'\n          ? value.tagName\n          : // `xast`\n          typeof value.name === 'string'\n          ? value.name\n          : undefined\n\n      Object.defineProperty(visit, 'name', {\n        value:\n          'node (' + color(node.type + (name ? '<' + name + '>' : '')) + ')'\n      })\n    }\n\n    return visit\n\n    function visit() {\n      /** @type {Readonly<ActionTuple>} */\n      let result = empty\n      /** @type {Readonly<ActionTuple>} */\n      let subresult\n      /** @type {number} */\n      let offset\n      /** @type {Array<UnistParent>} */\n      let grandparents\n\n      if (!test || is(node, index, parents[parents.length - 1] || undefined)) {\n        // @ts-expect-error: `visitor` is now a visitor.\n        result = toResult(visitor(node, parents))\n\n        if (result[0] === EXIT) {\n          return result\n        }\n      }\n\n      if ('children' in node && node.children) {\n        const nodeAsParent = /** @type {UnistParent} */ (node)\n\n        if (nodeAsParent.children && result[0] !== SKIP) {\n          offset = (reverse ? nodeAsParent.children.length : -1) + step\n          grandparents = parents.concat(nodeAsParent)\n\n          while (offset > -1 && offset < nodeAsParent.children.length) {\n            const child = nodeAsParent.children[offset]\n\n            subresult = factory(child, offset, grandparents)()\n\n            if (subresult[0] === EXIT) {\n              return subresult\n            }\n\n            offset =\n              typeof subresult[1] === 'number' ? subresult[1] : offset + step\n          }\n        }\n      }\n\n      return result\n    }\n  }\n}\n\n/**\n * Turn a return value into a clean result.\n *\n * @param {VisitorResult} value\n *   Valid return values from visitors.\n * @returns {Readonly<ActionTuple>}\n *   Clean result.\n */\nfunction toResult(value) {\n  if (Array.isArray(value)) {\n    return value\n  }\n\n  if (typeof value === 'number') {\n    return [CONTINUE, value]\n  }\n\n  return value === null || value === undefined ? empty : [value]\n}\n", "/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').Parents} Parents\n */\n\n/**\n * @template Fn\n * @template Fallback\n * @typedef {Fn extends (value: any) => value is infer Thing ? Thing : Fallback} Predicate\n */\n\n/**\n * @callback Check\n *   Check that an arbitrary value is an element.\n * @param {unknown} this\n *   Context object (`this`) to call `test` with\n * @param {unknown} [element]\n *   Anything (typically a node).\n * @param {number | null | undefined} [index]\n *   Position of `element` in its parent.\n * @param {Parents | null | undefined} [parent]\n *   Parent of `element`.\n * @returns {boolean}\n *   Whether this is an element and passes a test.\n *\n * @typedef {Array<TestFunction | string> | TestFunction | string | null | undefined} Test\n *   Check for an arbitrary element.\n *\n *   * when `string`, checks that the element has that tag name\n *   * when `function`, see `TestFunction`\n *   * when `Array`, checks if one of the subtests pass\n *\n * @callback TestFunction\n *   Check if an element passes a test.\n * @param {unknown} this\n *   The given context.\n * @param {Element} element\n *   An element.\n * @param {number | undefined} [index]\n *   Position of `element` in its parent.\n * @param {Parents | undefined} [parent]\n *   Parent of `element`.\n * @returns {boolean | undefined | void}\n *   Whether this element passes the test.\n *\n *   Note: `void` is included until TS sees no return as `undefined`.\n */\n\n/**\n * Check if `element` is an `Element` and whether it passes the given test.\n *\n * @param element\n *   Thing to check, typically `element`.\n * @param test\n *   Check for a specific element.\n * @param index\n *   Position of `element` in its parent.\n * @param parent\n *   Parent of `element`.\n * @param context\n *   Context object (`this`) to call `test` with.\n * @returns\n *   Whether `element` is an `Element` and passes a test.\n * @throws\n *   When an incorrect `test`, `index`, or `parent` is given; there is no error\n *   thrown when `element` is not a node or not an element.\n */\nexport const isElement =\n  // Note: overloads in JSDoc can\u2019t yet use different `@template`s.\n  /**\n   * @type {(\n   *   (<Condition extends TestFunction>(element: unknown, test: Condition, index?: number | null | undefined, parent?: Parents | null | undefined, context?: unknown) => element is Element & Predicate<Condition, Element>) &\n   *   (<Condition extends string>(element: unknown, test: Condition, index?: number | null | undefined, parent?: Parents | null | undefined, context?: unknown) => element is Element & {tagName: Condition}) &\n   *   ((element?: null | undefined) => false) &\n   *   ((element: unknown, test?: null | undefined, index?: number | null | undefined, parent?: Parents | null | undefined, context?: unknown) => element is Element) &\n   *   ((element: unknown, test?: Test, index?: number | null | undefined, parent?: Parents | null | undefined, context?: unknown) => boolean)\n   * )}\n   */\n  (\n    /**\n     * @param {unknown} [element]\n     * @param {Test | undefined} [test]\n     * @param {number | null | undefined} [index]\n     * @param {Parents | null | undefined} [parent]\n     * @param {unknown} [context]\n     * @returns {boolean}\n     */\n    // eslint-disable-next-line max-params\n    function (element, test, index, parent, context) {\n      const check = convertElement(test)\n\n      if (\n        index !== null &&\n        index !== undefined &&\n        (typeof index !== 'number' ||\n          index < 0 ||\n          index === Number.POSITIVE_INFINITY)\n      ) {\n        throw new Error('Expected positive finite `index`')\n      }\n\n      if (\n        parent !== null &&\n        parent !== undefined &&\n        (!parent.type || !parent.children)\n      ) {\n        throw new Error('Expected valid `parent`')\n      }\n\n      if (\n        (index === null || index === undefined) !==\n        (parent === null || parent === undefined)\n      ) {\n        throw new Error('Expected both `index` and `parent`')\n      }\n\n      return looksLikeAnElement(element)\n        ? check.call(context, element, index, parent)\n        : false\n    }\n  )\n\n/**\n * Generate a check from a test.\n *\n * Useful if you\u2019re going to test many nodes, for example when creating a\n * utility where something else passes a compatible test.\n *\n * The created function is a bit faster because it expects valid input only:\n * an `element`, `index`, and `parent`.\n *\n * @param test\n *   A test for a specific element.\n * @returns\n *   A check.\n */\nexport const convertElement =\n  // Note: overloads in JSDoc can\u2019t yet use different `@template`s.\n  /**\n   * @type {(\n   *   (<Condition extends TestFunction>(test: Condition) => (element: unknown, index?: number | null | undefined, parent?: Parents | null | undefined, context?: unknown) => element is Element & Predicate<Condition, Element>) &\n   *   (<Condition extends string>(test: Condition) => (element: unknown, index?: number | null | undefined, parent?: Parents | null | undefined, context?: unknown) => element is Element & {tagName: Condition}) &\n   *   ((test?: null | undefined) => (element?: unknown, index?: number | null | undefined, parent?: Parents | null | undefined, context?: unknown) => element is Element) &\n   *   ((test?: Test) => Check)\n   * )}\n   */\n  (\n    /**\n     * @param {Test | null | undefined} [test]\n     * @returns {Check}\n     */\n    function (test) {\n      if (test === null || test === undefined) {\n        return element\n      }\n\n      if (typeof test === 'string') {\n        return tagNameFactory(test)\n      }\n\n      // Assume array.\n      if (typeof test === 'object') {\n        return anyFactory(test)\n      }\n\n      if (typeof test === 'function') {\n        return castFactory(test)\n      }\n\n      throw new Error('Expected function, string, or array as `test`')\n    }\n  )\n\n/**\n * Handle multiple tests.\n *\n * @param {Array<TestFunction | string>} tests\n * @returns {Check}\n */\nfunction anyFactory(tests) {\n  /** @type {Array<Check>} */\n  const checks = []\n  let index = -1\n\n  while (++index < tests.length) {\n    checks[index] = convertElement(tests[index])\n  }\n\n  return castFactory(any)\n\n  /**\n   * @this {unknown}\n   * @type {TestFunction}\n   */\n  function any(...parameters) {\n    let index = -1\n\n    while (++index < checks.length) {\n      if (checks[index].apply(this, parameters)) return true\n    }\n\n    return false\n  }\n}\n\n/**\n * Turn a string into a test for an element with a certain type.\n *\n * @param {string} check\n * @returns {Check}\n */\nfunction tagNameFactory(check) {\n  return castFactory(tagName)\n\n  /**\n   * @param {Element} element\n   * @returns {boolean}\n   */\n  function tagName(element) {\n    return element.tagName === check\n  }\n}\n\n/**\n * Turn a custom test into a test for an element that passes that test.\n *\n * @param {TestFunction} testFunction\n * @returns {Check}\n */\nfunction castFactory(testFunction) {\n  return check\n\n  /**\n   * @this {unknown}\n   * @type {Check}\n   */\n  function check(value, index, parent) {\n    return Boolean(\n      looksLikeAnElement(value) &&\n        testFunction.call(\n          this,\n          value,\n          typeof index === 'number' ? index : undefined,\n          parent || undefined\n        )\n    )\n  }\n}\n\n/**\n * Make sure something is an element.\n *\n * @param {unknown} element\n * @returns {element is Element}\n */\nfunction element(element) {\n  return Boolean(\n    element &&\n      typeof element === 'object' &&\n      'type' in element &&\n      element.type === 'element' &&\n      'tagName' in element &&\n      typeof element.tagName === 'string'\n  )\n}\n\n/**\n * @param {unknown} value\n * @returns {value is Element}\n */\nfunction looksLikeAnElement(value) {\n  return (\n    value !== null &&\n    typeof value === 'object' &&\n    'type' in value &&\n    'tagName' in value\n  )\n}\n", "export default function escapeStringRegexp(string) {\n\tif (typeof string !== 'string') {\n\t\tthrow new TypeError('Expected a string');\n\t}\n\n\t// Escape characters with special meaning either inside or outside character sets.\n\t// Use a simple backslash escape when it\u2019s always valid, and a `\\xnn` escape when the simpler form would be disallowed by Unicode patterns\u2019 stricter grammar.\n\treturn string\n\t\t.replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&')\n\t\t.replace(/-/g, '\\\\x2d');\n}\n", "/**\n * @typedef {import('hast').Nodes} Nodes\n * @typedef {import('hast').Parents} Parents\n * @typedef {import('hast').Root} Root\n * @typedef {import('hast').RootContent} RootContent\n * @typedef {import('hast').Text} Text\n * @typedef {import('hast-util-is-element').Test} Test\n * @typedef {import('unist-util-visit-parents').VisitorResult} VisitorResult\n */\n\n/**\n * @typedef {RegExp | string} Find\n *   Pattern to find.\n *\n *   Strings are escaped and then turned into global expressions.\n *\n * @typedef {Array<FindAndReplaceTuple>} FindAndReplaceList\n *   Several find and replaces, in array form.\n *\n * @typedef {[Find, Replace?]} FindAndReplaceTuple\n *   Find and replace in tuple form.\n *\n * @typedef RegExpMatchObject\n *   Info on the match.\n * @property {number} index\n *   The index of the search at which the result was found.\n * @property {string} input\n *   A copy of the search string in the text node.\n * @property {[...Array<Parents>, Text]} stack\n *   All ancestors of the text node, where the last node is the text itself.\n *\n * @typedef {ReplaceFunction | string | null | undefined} Replace\n *   Thing to replace with.\n *\n * @callback ReplaceFunction\n *   Callback called when a search matches.\n * @param {...any} parameters\n *   The parameters are the result of corresponding search expression:\n *\n *   * `value` (`string`) \u2014 whole match\n *   * `...capture` (`Array<string>`) \u2014 matches from regex capture groups\n *   * `match` (`RegExpMatchObject`) \u2014 info on the match\n * @returns {Array<RootContent> | RootContent | string | false | null | undefined}\n *   Thing to replace with.\n *\n *   * when `null`, `undefined`, `''`, remove the match\n *   * \u2026or when `false`, do not replace at all\n *   * \u2026or when `string`, replace with a text node of that value\n *   * \u2026or when `Node` or `Array<Node>`, replace with those nodes\n *\n * @typedef {[RegExp, ReplaceFunction]} Pair\n *   Normalized find and replace.\n * @typedef {Array<Pair>} Pairs\n *   All find and replaced.\n *\n * @typedef Options\n *   Configuration.\n * @property {Test | null | undefined} [ignore]\n *   Test for which elements to ignore (optional).\n */\n\nimport {visitParents} from 'unist-util-visit-parents'\nimport {convertElement} from 'hast-util-is-element'\nimport escape from 'escape-string-regexp'\n\n/** @type {Options} */\nconst emptyOptions = {}\n\n/**\n * Default tag names to ignore.\n *\n * The defaults are `math`, `script`, `style`, `svg`, and `title`.\n *\n * @type {Array<string>}\n */\nexport const defaultIgnore = ['math', 'script', 'style', 'svg', 'title']\n\n/**\n * Find patterns in a tree and replace them.\n *\n * The algorithm searches the tree in *preorder* for complete values in `Text`\n * nodes.\n * Partial matches are not supported.\n *\n * @param {Nodes} tree\n *   Tree to change.\n * @param {FindAndReplaceList | FindAndReplaceTuple} list\n *   One or more find-and-replace pairs.\n * @param {Readonly<Options> | null | undefined} [options]\n *   Configuration (when `find` is not `Find`).\n * @returns {undefined}\n *   Nothing.\n */\nexport function findAndReplace(tree, list, options) {\n  const settings = options || emptyOptions\n  const ignored = convertElement(settings.ignore || defaultIgnore)\n  const pairs = toPairs(list)\n  let pairIndex = -1\n\n  while (++pairIndex < pairs.length) {\n    visitParents(tree, 'text', visitor)\n  }\n\n  /** @type {import('unist-util-visit-parents').BuildVisitor<Root, 'text'>} */\n  function visitor(node, parents) {\n    let index = -1\n    /** @type {Parents | undefined} */\n    let grandparent\n\n    while (++index < parents.length) {\n      const parent = parents[index]\n      /** @type {Array<Nodes> | undefined} */\n      const siblings = grandparent ? grandparent.children : undefined\n\n      if (\n        ignored(\n          parent,\n          siblings ? siblings.indexOf(parent) : undefined,\n          grandparent\n        )\n      ) {\n        return\n      }\n\n      grandparent = parent\n    }\n\n    if (grandparent) {\n      return handler(node, parents)\n    }\n  }\n\n  /**\n   * Handle a text node which is not in an ignored parent.\n   *\n   * @param {Text} node\n   *   Text node.\n   * @param {Array<Parents>} parents\n   *   Parents.\n   * @returns {VisitorResult}\n   *   Result.\n   */\n  function handler(node, parents) {\n    const parent = parents[parents.length - 1]\n    const find = pairs[pairIndex][0]\n    const replace = pairs[pairIndex][1]\n    let start = 0\n    /** @type {Array<Nodes>} */\n    const siblings = parent.children\n    const index = siblings.indexOf(node)\n    let change = false\n    /** @type {Array<RootContent>} */\n    let nodes = []\n\n    find.lastIndex = 0\n\n    let match = find.exec(node.value)\n\n    while (match) {\n      const position = match.index\n      /** @type {RegExpMatchObject} */\n      const matchObject = {\n        index: match.index,\n        input: match.input,\n        stack: [...parents, node]\n      }\n      let value = replace(...match, matchObject)\n\n      if (typeof value === 'string') {\n        value = value.length > 0 ? {type: 'text', value} : undefined\n      }\n\n      // It wasn\u2019t a match after all.\n      if (value === false) {\n        // False acts as if there was no match.\n        // So we need to reset `lastIndex`, which currently being at the end of\n        // the current match, to the beginning.\n        find.lastIndex = position + 1\n      } else {\n        if (start !== position) {\n          nodes.push({type: 'text', value: node.value.slice(start, position)})\n        }\n\n        if (Array.isArray(value)) {\n          nodes.push(...value)\n        } else if (value) {\n          nodes.push(value)\n        }\n\n        start = position + match[0].length\n        change = true\n      }\n\n      if (!find.global) {\n        break\n      }\n\n      match = find.exec(node.value)\n    }\n\n    if (change) {\n      if (start < node.value.length) {\n        nodes.push({type: 'text', value: node.value.slice(start)})\n      }\n\n      parent.children.splice(index, 1, ...nodes)\n    } else {\n      nodes = [node]\n    }\n\n    return index + nodes.length\n  }\n}\n\n/**\n * Turn a tuple or a list of tuples into pairs.\n *\n * @param {FindAndReplaceList | FindAndReplaceTuple} tupleOrList\n *   Schema.\n * @returns {Pairs}\n *   Clean pairs.\n */\nfunction toPairs(tupleOrList) {\n  /** @type {Pairs} */\n  const result = []\n\n  if (!Array.isArray(tupleOrList)) {\n    throw new TypeError('Expected find and replace tuple or list of tuples')\n  }\n\n  /** @type {FindAndReplaceList} */\n  // @ts-expect-error: correct.\n  const list =\n    !tupleOrList[0] || Array.isArray(tupleOrList[0])\n      ? tupleOrList\n      : [tupleOrList]\n\n  let index = -1\n\n  while (++index < list.length) {\n    const tuple = list[index]\n    result.push([toExpression(tuple[0]), toFunction(tuple[1])])\n  }\n\n  return result\n}\n\n/**\n * Turn a find into an expression.\n *\n * @param {Find} find\n *   Find.\n * @returns {RegExp}\n *   Expression.\n */\nfunction toExpression(find) {\n  return typeof find === 'string' ? new RegExp(escape(find), 'g') : find\n}\n\n/**\n * Turn a replace into a function.\n *\n * @param {Replace} replace\n *   Replace.\n * @returns {ReplaceFunction}\n *   Function.\n */\nfunction toFunction(replace) {\n  return typeof replace === 'function'\n    ? replace\n    : function () {\n        return replace\n      }\n}\n", "/**\n * @typedef {import('unist').Node} Node\n */\n\n/**\n * @typedef {Array<Node> | string} ChildrenOrValue\n *   List to use as `children` or value to use as `value`.\n *\n * @typedef {Record<string, unknown>} Props\n *   Other fields to add to the node.\n */\n\n/**\n * Build a node.\n *\n * @template {string} T\n * @template {Props} P\n * @template {Array<Node>} C\n *\n * @overload\n * @param {T} type\n * @returns {{type: T}}\n *\n * @overload\n * @param {T} type\n * @param {P} props\n * @returns {{type: T} & P}\n *\n * @overload\n * @param {T} type\n * @param {string} value\n * @returns {{type: T, value: string}}\n *\n * @overload\n * @param {T} type\n * @param {P} props\n * @param {string} value\n * @returns {{type: T, value: string} & P}\n *\n * @overload\n * @param {T} type\n * @param {C} children\n * @returns {{type: T, children: C}}\n *\n * @overload\n * @param {T} type\n * @param {P} props\n * @param {C} children\n * @returns {{type: T, children: C} & P}\n *\n * @param {string} type\n *   Node type.\n * @param {ChildrenOrValue | Props | null | undefined} [props]\n *   Fields assigned to node (default: `undefined`).\n * @param {ChildrenOrValue | null | undefined} [value]\n *   Children of node or value of `node` (cast to string).\n * @returns {Node}\n *   Built node.\n */\nexport function u(type, props, value) {\n  /** @type {Node} */\n  const node = {type: String(type)}\n\n  if (\n    (value === undefined || value === null) &&\n    (typeof props === 'string' || Array.isArray(props))\n  ) {\n    value = props\n  } else {\n    Object.assign(node, props)\n  }\n\n  if (Array.isArray(value)) {\n    // @ts-expect-error: create a parent.\n    node.children = value\n  } else if (value !== undefined && value !== null) {\n    // @ts-expect-error: create a literal.\n    node.value = String(value)\n  }\n\n  return node\n}\n", "import { findAndReplace, ReplaceFunction } from 'hast-util-find-and-replace';\nimport { u } from 'unist-builder';\nimport emojiRegex from 'emoji-regex';\n\nimport type { Nodes } from 'hast-util-find-and-replace/lib';\n\nexport const emojiMarkdownPlugin = () => {\n  const replace: ReplaceFunction = (match) =>\n    u('element', { properties: {}, tagName: 'emoji' }, [u('text', match)]);\n\n  const transform = (node: Nodes) => findAndReplace(node, [emojiRegex(), replace]);\n\n  return transform;\n};\n", "/**\n * @typedef {import('unist').Node} UnistNode\n * @typedef {import('unist').Parent} UnistParent\n * @typedef {import('unist-util-visit-parents').VisitorResult} VisitorResult\n */\n\n/**\n * @typedef {Exclude<import('unist-util-is').Test, undefined> | undefined} Test\n *   Test from `unist-util-is`.\n *\n *   Note: we have remove and add `undefined`, because otherwise when generating\n *   automatic `.d.ts` files, TS tries to flatten paths from a local perspective,\n *   which doesn\u2019t work when publishing on npm.\n */\n\n// To do: use types from `unist-util-visit-parents` when it\u2019s released.\n\n/**\n * @typedef {(\n *   Fn extends (value: any) => value is infer Thing\n *   ? Thing\n *   : Fallback\n * )} Predicate\n *   Get the value of a type guard `Fn`.\n * @template Fn\n *   Value; typically function that is a type guard (such as `(x): x is Y`).\n * @template Fallback\n *   Value to yield if `Fn` is not a type guard.\n */\n\n/**\n * @typedef {(\n *   Check extends null | undefined // No test.\n *   ? Value\n *   : Value extends {type: Check} // String (type) test.\n *   ? Value\n *   : Value extends Check // Partial test.\n *   ? Value\n *   : Check extends Function // Function test.\n *   ? Predicate<Check, Value> extends Value\n *     ? Predicate<Check, Value>\n *     : never\n *   : never // Some other test?\n * )} MatchesOne\n *   Check whether a node matches a primitive check in the type system.\n * @template Value\n *   Value; typically unist `Node`.\n * @template Check\n *   Value; typically `unist-util-is`-compatible test, but not arrays.\n */\n\n/**\n * @typedef {(\n *   Check extends Array<any>\n *   ? MatchesOne<Value, Check[keyof Check]>\n *   : MatchesOne<Value, Check>\n * )} Matches\n *   Check whether a node matches a check in the type system.\n * @template Value\n *   Value; typically unist `Node`.\n * @template Check\n *   Value; typically `unist-util-is`-compatible test.\n */\n\n/**\n * @typedef {0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10} Uint\n *   Number; capped reasonably.\n */\n\n/**\n * @typedef {I extends 0 ? 1 : I extends 1 ? 2 : I extends 2 ? 3 : I extends 3 ? 4 : I extends 4 ? 5 : I extends 5 ? 6 : I extends 6 ? 7 : I extends 7 ? 8 : I extends 8 ? 9 : 10} Increment\n *   Increment a number in the type system.\n * @template {Uint} [I=0]\n *   Index.\n */\n\n/**\n * @typedef {(\n *   Node extends UnistParent\n *   ? Node extends {children: Array<infer Children>}\n *     ? Child extends Children ? Node : never\n *     : never\n *   : never\n * )} InternalParent\n *   Collect nodes that can be parents of `Child`.\n * @template {UnistNode} Node\n *   All node types in a tree.\n * @template {UnistNode} Child\n *   Node to search for.\n */\n\n/**\n * @typedef {InternalParent<InclusiveDescendant<Tree>, Child>} Parent\n *   Collect nodes in `Tree` that can be parents of `Child`.\n * @template {UnistNode} Tree\n *   All node types in a tree.\n * @template {UnistNode} Child\n *   Node to search for.\n */\n\n/**\n * @typedef {(\n *   Depth extends Max\n *   ? never\n *   :\n *     | InternalParent<Node, Child>\n *     | InternalAncestor<Node, InternalParent<Node, Child>, Max, Increment<Depth>>\n * )} InternalAncestor\n *   Collect nodes in `Tree` that can be ancestors of `Child`.\n * @template {UnistNode} Node\n *   All node types in a tree.\n * @template {UnistNode} Child\n *   Node to search for.\n * @template {Uint} [Max=10]\n *   Max; searches up to this depth.\n * @template {Uint} [Depth=0]\n *   Current depth.\n */\n\n/**\n * @typedef {(\n *   Tree extends UnistParent\n *     ? Depth extends Max\n *       ? Tree\n *       : Tree | InclusiveDescendant<Tree['children'][number], Max, Increment<Depth>>\n *     : Tree\n * )} InclusiveDescendant\n *   Collect all (inclusive) descendants of `Tree`.\n *\n *   > \uD83D\uDC49 **Note**: for performance reasons, this seems to be the fastest way to\n *   > recurse without actually running into an infinite loop, which the\n *   > previous version did.\n *   >\n *   > Practically, a max of `2` is typically enough assuming a `Root` is\n *   > passed, but it doesn\u2019t improve performance.\n *   > It gets higher with `List > ListItem > Table > TableRow > TableCell`.\n *   > Using up to `10` doesn\u2019t hurt or help either.\n * @template {UnistNode} Tree\n *   Tree type.\n * @template {Uint} [Max=10]\n *   Max; searches up to this depth.\n * @template {Uint} [Depth=0]\n *   Current depth.\n */\n\n/**\n * @callback Visitor\n *   Handle a node (matching `test`, if given).\n *\n *   Visitors are free to transform `node`.\n *   They can also transform `parent`.\n *\n *   Replacing `node` itself, if `SKIP` is not returned, still causes its\n *   descendants to be walked (which is a bug).\n *\n *   When adding or removing previous siblings of `node` (or next siblings, in\n *   case of reverse), the `Visitor` should return a new `Index` to specify the\n *   sibling to traverse after `node` is traversed.\n *   Adding or removing next siblings of `node` (or previous siblings, in case\n *   of reverse) is handled as expected without needing to return a new `Index`.\n *\n *   Removing the children property of `parent` still results in them being\n *   traversed.\n * @param {Visited} node\n *   Found node.\n * @param {Visited extends UnistNode ? number | undefined : never} index\n *   Index of `node` in `parent`.\n * @param {Ancestor extends UnistParent ? Ancestor | undefined : never} parent\n *   Parent of `node`.\n * @returns {VisitorResult}\n *   What to do next.\n *\n *   An `Index` is treated as a tuple of `[CONTINUE, Index]`.\n *   An `Action` is treated as a tuple of `[Action]`.\n *\n *   Passing a tuple back only makes sense if the `Action` is `SKIP`.\n *   When the `Action` is `EXIT`, that action can be returned.\n *   When the `Action` is `CONTINUE`, `Index` can be returned.\n * @template {UnistNode} [Visited=UnistNode]\n *   Visited node type.\n * @template {UnistParent} [Ancestor=UnistParent]\n *   Ancestor type.\n */\n\n/**\n * @typedef {Visitor<Visited, Parent<Ancestor, Visited>>} BuildVisitorFromMatch\n *   Build a typed `Visitor` function from a node and all possible parents.\n *\n *   It will infer which values are passed as `node` and which as `parent`.\n * @template {UnistNode} Visited\n *   Node type.\n * @template {UnistParent} Ancestor\n *   Parent type.\n */\n\n/**\n * @typedef {(\n *   BuildVisitorFromMatch<\n *     Matches<Descendant, Check>,\n *     Extract<Descendant, UnistParent>\n *   >\n * )} BuildVisitorFromDescendants\n *   Build a typed `Visitor` function from a list of descendants and a test.\n *\n *   It will infer which values are passed as `node` and which as `parent`.\n * @template {UnistNode} Descendant\n *   Node type.\n * @template {Test} Check\n *   Test type.\n */\n\n/**\n * @typedef {(\n *   BuildVisitorFromDescendants<\n *     InclusiveDescendant<Tree>,\n *     Check\n *   >\n * )} BuildVisitor\n *   Build a typed `Visitor` function from a tree and a test.\n *\n *   It will infer which values are passed as `node` and which as `parent`.\n * @template {UnistNode} [Tree=UnistNode]\n *   Node type.\n * @template {Test} [Check=Test]\n *   Test type.\n */\n\nimport {visitParents} from 'unist-util-visit-parents'\n\nexport {CONTINUE, EXIT, SKIP} from 'unist-util-visit-parents'\n\n/**\n * Visit nodes.\n *\n * This algorithm performs *depth-first* *tree traversal* in *preorder*\n * (**NLR**) or if `reverse` is given, in *reverse preorder* (**NRL**).\n *\n * You can choose for which nodes `visitor` is called by passing a `test`.\n * For complex tests, you should test yourself in `visitor`, as it will be\n * faster and will have improved type information.\n *\n * Walking the tree is an intensive task.\n * Make use of the return values of the visitor when possible.\n * Instead of walking a tree multiple times, walk it once, use `unist-util-is`\n * to check if a node matches, and then perform different operations.\n *\n * You can change the tree.\n * See `Visitor` for more info.\n *\n * @overload\n * @param {Tree} tree\n * @param {Check} check\n * @param {BuildVisitor<Tree, Check>} visitor\n * @param {boolean | null | undefined} [reverse]\n * @returns {undefined}\n *\n * @overload\n * @param {Tree} tree\n * @param {BuildVisitor<Tree>} visitor\n * @param {boolean | null | undefined} [reverse]\n * @returns {undefined}\n *\n * @param {UnistNode} tree\n *   Tree to traverse.\n * @param {Visitor | Test} testOrVisitor\n *   `unist-util-is`-compatible test (optional, omit to pass a visitor).\n * @param {Visitor | boolean | null | undefined} [visitorOrReverse]\n *   Handle each node (when test is omitted, pass `reverse`).\n * @param {boolean | null | undefined} [maybeReverse=false]\n *   Traverse in reverse preorder (NRL) instead of the default preorder (NLR).\n * @returns {undefined}\n *   Nothing.\n *\n * @template {UnistNode} Tree\n *   Node type.\n * @template {Test} Check\n *   `unist-util-is`-compatible test.\n */\nexport function visit(tree, testOrVisitor, visitorOrReverse, maybeReverse) {\n  /** @type {boolean | null | undefined} */\n  let reverse\n  /** @type {Test} */\n  let test\n  /** @type {Visitor} */\n  let visitor\n\n  if (\n    typeof testOrVisitor === 'function' &&\n    typeof visitorOrReverse !== 'function'\n  ) {\n    test = undefined\n    visitor = testOrVisitor\n    reverse = visitorOrReverse\n  } else {\n    // @ts-expect-error: assume the overload with test was given.\n    test = testOrVisitor\n    // @ts-expect-error: assume the overload with test was given.\n    visitor = visitorOrReverse\n    reverse = maybeReverse\n  }\n\n  visitParents(tree, test, overload, reverse)\n\n  /**\n   * @param {UnistNode} node\n   * @param {Array<UnistParent>} parents\n   */\n  function overload(node, parents) {\n    const parent = parents[parents.length - 1]\n    const index = parent ? parent.children.indexOf(node) : undefined\n    return visitor(node, index, parent)\n  }\n}\n", "import { escapeRegExp } from '../regex';\nimport { findAndReplace, ReplaceFunction } from 'hast-util-find-and-replace';\nimport { u } from 'unist-builder';\nimport { visit } from 'unist-util-visit';\n\nimport type { Nodes } from 'hast-util-find-and-replace/lib';\nimport type { Element } from 'hast';\nimport type { UserResponse } from 'stream-chat';\nimport type { DefaultStreamChatGenerics } from '../../../../types';\n\nexport const mentionsMarkdownPlugin =\n  <StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics>(\n    mentioned_users: UserResponse<StreamChatGenerics>[],\n  ) =>\n  () => {\n    const mentioned_usernames = mentioned_users\n      .map((user) => user.name || user.id)\n      .filter(Boolean)\n      .map(escapeRegExp);\n\n    const mentionedUsersRegex = new RegExp(\n      mentioned_usernames.map((username) => `@${username}`).join('|'),\n      'g',\n    );\n\n    const replace: ReplaceFunction = (match) => {\n      const usernameOrId = match.replace('@', '');\n      const user = mentioned_users.find(\n        ({ id, name }) => name === usernameOrId || id === usernameOrId,\n      );\n      return u('element', { mentionedUser: user, properties: {}, tagName: 'mention' }, [\n        u('text', match),\n      ]);\n    };\n\n    const transform = (tree: Nodes) => {\n      if (!mentioned_usernames.length) return;\n\n      // handles special cases of mentions where user.name is an e-mail\n      // Remark GFM translates all e-mail-like text nodes to links creating\n      // two separate child nodes \"@\" and \"your.name@as.email\" instead of\n      // keeping it as one text node with value \"@your.name@as.email\"\n      // this piece finds these two separated nodes and merges them together\n      // before \"replace\" function takes over\n      visit(tree, (node, index, parent) => {\n        if (typeof index === 'undefined') return;\n        if (!parent) return;\n\n        const nextChild = parent.children.at(index + 1) as Element;\n        const nextChildHref = nextChild?.properties?.href as string | undefined;\n\n        if (\n          node.type === 'text' &&\n          // text value has to have @ sign at the end of the string\n          // and no other characters except whitespace can precede it\n          // valid cases:   \"text @\", \"@\", \" @\"\n          // invalid cases: \"text@\", \"@text\",\n          /.?\\s?@$|^@$/.test(node.value) &&\n          nextChildHref?.startsWith('mailto:')\n        ) {\n          const newTextValue = node.value.replace(/@$/, '');\n          const username = nextChildHref.replace('mailto:', '');\n          parent.children[index] = u('text', newTextValue);\n          parent.children[index + 1] = u('text', `@${username}`);\n        }\n      });\n\n      findAndReplace(tree, [mentionedUsersRegex, replace]);\n    };\n\n    return transform;\n  };\n", "import { visit, Visitor } from 'unist-util-visit';\n\nimport type { Nodes } from 'hast-util-find-and-replace/lib';\n\nconst visitor: Visitor = (node) => {\n  if (node.type !== 'html') return;\n\n  node.type = 'text';\n};\nconst transform = (tree: Nodes) => {\n  visit(tree, visitor);\n};\n\nexport const htmlToTextPlugin = () => transform;\n", "import { visit, Visitor } from 'unist-util-visit';\nimport { u } from 'unist-builder';\n\nimport type { Break } from 'mdast';\nimport type { Nodes } from 'hast-util-find-and-replace/lib';\n\nconst visitor: Visitor = (node, index, parent) => {\n  if (!(index && parent && node.position)) return;\n\n  const prevSibling = parent.children.at(index - 1);\n  if (!prevSibling?.position) return;\n\n  if (node.position.start.line === prevSibling.position.start.line) return;\n  const ownStartLine = node.position.start.line;\n  const prevEndLine = prevSibling.position.end.line;\n\n  // the -1 is adjustment for the single line break into which multiple line breaks are converted\n  const countTruncatedLineBreaks = ownStartLine - prevEndLine - 1;\n  if (countTruncatedLineBreaks < 1) return;\n\n  const lineBreaks = Array.from<unknown, Break>(\n    { length: countTruncatedLineBreaks },\n    () => u('break', { tagName: 'br' }),\n  );\n\n  parent.children = [\n    ...parent.children.slice(0, index),\n    ...lineBreaks,\n    ...parent.children.slice(index),\n  ];\n  return;\n};\nconst transform = (tree: Nodes) => {\n  visit(tree, visitor);\n};\n\nexport const keepLineBreaksPlugin = () => transform;\n", "import React, { ComponentType } from 'react';\nimport ReactMarkdown, { defaultUrlTransform } from 'react-markdown';\nimport { find } from 'linkifyjs';\nimport uniqBy from 'lodash.uniqby';\nimport remarkGfm from 'remark-gfm';\n\nimport { Anchor, Emoji, Mention, MentionProps } from './componentRenderers';\nimport { detectHttp, escapeRegExp, matchMarkdownLinks, messageCodeBlocks } from './regex';\nimport { emojiMarkdownPlugin, mentionsMarkdownPlugin } from './rehypePlugins';\nimport { htmlToTextPlugin, keepLineBreaksPlugin } from './remarkPlugins';\nimport { ErrorBoundary } from '../../UtilityComponents';\n\nimport type { Options } from 'react-markdown/lib';\nimport type { UserResponse } from 'stream-chat';\nimport type { PluggableList } from 'unified'; // A subdependency of react-markdown. The type is not declared or re-exported from anywhere else\n\nimport type { DefaultStreamChatGenerics } from '../../../types/types';\n\nexport type RenderTextPluginConfigurator = (\n  defaultPlugins: PluggableList,\n) => PluggableList;\n\nexport const defaultAllowedTagNames: Array<\n  keyof JSX.IntrinsicElements | 'emoji' | 'mention'\n> = [\n  'html',\n  'text',\n  'br',\n  'p',\n  'em',\n  'strong',\n  'a',\n  'ol',\n  'ul',\n  'li',\n  'code',\n  'pre',\n  'blockquote',\n  'del',\n  'table',\n  'thead',\n  'tbody',\n  'th',\n  'tr',\n  'td',\n  'tfoot',\n  // custom types (tagNames)\n  'emoji',\n  'mention',\n];\n\nfunction formatUrlForDisplay(url: string) {\n  try {\n    return decodeURIComponent(url).replace(detectHttp, '');\n  } catch (e) {\n    return url;\n  }\n}\n\nfunction encodeDecode(url: string) {\n  try {\n    return encodeURI(decodeURIComponent(url));\n  } catch (error) {\n    return url;\n  }\n}\n\nconst urlTransform = (uri: string) =>\n  uri.startsWith('app://') ? uri : defaultUrlTransform(uri);\n\nconst getPluginsForward: RenderTextPluginConfigurator = (plugins: PluggableList) =>\n  plugins;\n\nexport const markDownRenderers: RenderTextOptions['customMarkDownRenderers'] = {\n  a: Anchor,\n  emoji: Emoji,\n  mention: Mention,\n};\n\nexport type RenderTextOptions<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n  allowedTagNames?: Array<\n    keyof JSX.IntrinsicElements | 'emoji' | 'mention' | (string & {})\n  >;\n  customMarkDownRenderers?: Options['components'] &\n    Partial<{\n      emoji: ComponentType;\n      mention: ComponentType<MentionProps<StreamChatGenerics>>;\n    }>;\n  getRehypePlugins?: RenderTextPluginConfigurator;\n  getRemarkPlugins?: RenderTextPluginConfigurator;\n};\n\nexport const renderText = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  text?: string,\n  mentionedUsers?: UserResponse<StreamChatGenerics>[],\n  {\n    allowedTagNames = defaultAllowedTagNames,\n    customMarkDownRenderers,\n    getRehypePlugins = getPluginsForward,\n    getRemarkPlugins = getPluginsForward,\n  }: RenderTextOptions = {},\n) => {\n  // take the @ mentions and turn them into markdown?\n  // translate links\n  if (!text) return null;\n  if (text.trim().length === 1) return <>{text}</>;\n\n  let newText = text;\n  const markdownLinks = matchMarkdownLinks(newText);\n  const codeBlocks = messageCodeBlocks(newText);\n\n  // extract all valid links/emails within text and replace it with proper markup\n  uniqBy([...find(newText, 'email'), ...find(newText, 'url')], 'value').forEach(\n    ({ href, type, value }) => {\n      const linkIsInBlock = codeBlocks.some((block) => block?.includes(value));\n\n      // check if message is already  markdown\n      const noParsingNeeded =\n        markdownLinks &&\n        markdownLinks.filter((text) => {\n          const strippedHref = href?.replace(detectHttp, '');\n          const strippedText = text?.replace(detectHttp, '');\n\n          if (!strippedHref || !strippedText) return false;\n\n          return (\n            strippedHref.includes(strippedText) || strippedText.includes(strippedHref)\n          );\n        });\n\n      if (noParsingNeeded.length > 0 || linkIsInBlock) return;\n\n      try {\n        // special case for mentions:\n        // it could happen that a user's name matches with an e-mail format pattern.\n        // in that case, we check whether the found e-mail is actually a mention\n        // by naively checking for an existence of @ sign in front of it.\n        if (type === 'email' && mentionedUsers) {\n          const emailMatchesWithName = mentionedUsers.some((u) => u.name === value);\n          if (emailMatchesWithName) {\n            newText = newText.replace(\n              new RegExp(escapeRegExp(value), 'g'),\n              (match, position) => {\n                const isMention = newText.charAt(position - 1) === '@';\n                // in case of mention, we leave the match in its original form,\n                // and we let `mentionsMarkdownPlugin` to do its job\n                return isMention ? match : `[${match}](${encodeDecode(href)})`;\n              },\n            );\n\n            return;\n          }\n        }\n\n        const displayLink = type === 'email' ? value : formatUrlForDisplay(href);\n\n        newText = newText.replace(\n          new RegExp(escapeRegExp(value), 'g'),\n          `[${displayLink}](${encodeDecode(href)})`,\n        );\n      } catch (e) {\n        void e;\n      }\n    },\n  );\n\n  const remarkPlugins: PluggableList = [\n    htmlToTextPlugin,\n    keepLineBreaksPlugin,\n    [remarkGfm, { singleTilde: false }],\n  ];\n  const rehypePlugins: PluggableList = [emojiMarkdownPlugin];\n\n  if (mentionedUsers?.length) {\n    rehypePlugins.push(mentionsMarkdownPlugin(mentionedUsers));\n  }\n\n  return (\n    <ErrorBoundary fallback={<>{text}</>}>\n      <ReactMarkdown\n        allowedElements={allowedTagNames}\n        components={{\n          ...markDownRenderers,\n          ...customMarkDownRenderers,\n        }}\n        rehypePlugins={getRehypePlugins(rehypePlugins)}\n        remarkPlugins={getRemarkPlugins(remarkPlugins)}\n        skipHtml\n        unwrapDisallowed\n        urlTransform={urlTransform}\n      >\n        {newText}\n      </ReactMarkdown>\n    </ErrorBoundary>\n  );\n};\n", "export function deprecate(fn) {\n  return fn\n}\n\nexport function equal() {}\n\nexport function ok() {}\n\nexport function unreachable() {}\n", "/**\n * @typedef Options\n *   Configuration for `stringify`.\n * @property {boolean} [padLeft=true]\n *   Whether to pad a space before a token.\n * @property {boolean} [padRight=false]\n *   Whether to pad a space after a token.\n */\n\n/**\n * @typedef {Options} StringifyOptions\n *   Please use `StringifyOptions` instead.\n */\n\n/**\n * Parse comma-separated tokens to an array.\n *\n * @param {string} value\n *   Comma-separated tokens.\n * @returns {Array<string>}\n *   List of tokens.\n */\nexport function parse(value) {\n  /** @type {Array<string>} */\n  const tokens = []\n  const input = String(value || '')\n  let index = input.indexOf(',')\n  let start = 0\n  /** @type {boolean} */\n  let end = false\n\n  while (!end) {\n    if (index === -1) {\n      index = input.length\n      end = true\n    }\n\n    const token = input.slice(start, index).trim()\n\n    if (token || !end) {\n      tokens.push(token)\n    }\n\n    start = index + 1\n    index = input.indexOf(',', start)\n  }\n\n  return tokens\n}\n\n/**\n * Serialize an array of strings or numbers to comma-separated tokens.\n *\n * @param {Array<string|number>} values\n *   List of tokens.\n * @param {Options} [options]\n *   Configuration for `stringify` (optional).\n * @returns {string}\n *   Comma-separated tokens.\n */\nexport function stringify(values, options) {\n  const settings = options || {}\n\n  // Ensure the last empty entry is seen.\n  const input = values[values.length - 1] === '' ? [...values, ''] : values\n\n  return input\n    .join(\n      (settings.padRight ? ' ' : '') +\n        ',' +\n        (settings.padLeft === false ? '' : ' ')\n    )\n    .trim()\n}\n", "/**\n * @typedef Options\n *   Configuration.\n * @property {boolean | null | undefined} [jsx=false]\n *   Support JSX identifiers (default: `false`).\n */\n\nconst startRe = /[$_\\p{ID_Start}]/u\nconst contRe = /[$_\\u{200C}\\u{200D}\\p{ID_Continue}]/u\nconst contReJsx = /[-$_\\u{200C}\\u{200D}\\p{ID_Continue}]/u\nconst nameRe = /^[$_\\p{ID_Start}][$_\\u{200C}\\u{200D}\\p{ID_Continue}]*$/u\nconst nameReJsx = /^[$_\\p{ID_Start}][-$_\\u{200C}\\u{200D}\\p{ID_Continue}]*$/u\n\n/** @type {Options} */\nconst emptyOptions = {}\n\n/**\n * Checks if the given code point can start an identifier.\n *\n * @param {number | undefined} code\n *   Code point to check.\n * @returns {boolean}\n *   Whether `code` can start an identifier.\n */\n// Note: `undefined` is supported so you can pass the result from `''.codePointAt`.\nexport function start(code) {\n  return code ? startRe.test(String.fromCodePoint(code)) : false\n}\n\n/**\n * Checks if the given code point can continue an identifier.\n *\n * @param {number | undefined} code\n *   Code point to check.\n * @param {Options | null | undefined} [options]\n *   Configuration (optional).\n * @returns {boolean}\n *   Whether `code` can continue an identifier.\n */\n// Note: `undefined` is supported so you can pass the result from `''.codePointAt`.\nexport function cont(code, options) {\n  const settings = options || emptyOptions\n  const re = settings.jsx ? contReJsx : contRe\n  return code ? re.test(String.fromCodePoint(code)) : false\n}\n\n/**\n * Checks if the given value is a valid identifier name.\n *\n * @param {string} name\n *   Identifier to check.\n * @param {Options | null | undefined} [options]\n *   Configuration (optional).\n * @returns {boolean}\n *   Whether `name` can be an identifier.\n */\nexport function name(name, options) {\n  const settings = options || emptyOptions\n  const re = settings.jsx ? nameReJsx : nameRe\n  return re.test(name)\n}\n", "/**\n * @typedef {import('hast').Nodes} Nodes\n */\n\n// HTML whitespace expression.\n// See <https://infra.spec.whatwg.org/#ascii-whitespace>.\nconst re = /[ \\t\\n\\f\\r]/g\n\n/**\n * Check if the given value is *inter-element whitespace*.\n *\n * @param {Nodes | string} thing\n *   Thing to check (`Node` or `string`).\n * @returns {boolean}\n *   Whether the `value` is inter-element whitespace (`boolean`): consisting of\n *   zero or more of space, tab (`\\t`), line feed (`\\n`), carriage return\n *   (`\\r`), or form feed (`\\f`); if a node is passed it must be a `Text` node,\n *   whose `value` field is checked.\n */\nexport function whitespace(thing) {\n  return typeof thing === 'object'\n    ? thing.type === 'text'\n      ? empty(thing.value)\n      : false\n    : empty(thing)\n}\n\n/**\n * @param {string} value\n * @returns {boolean}\n */\nfunction empty(value) {\n  return value.replace(re, '') === ''\n}\n", "/**\n * @typedef {import('./info.js').Info} Info\n * @typedef {Record<string, Info>} Properties\n * @typedef {Record<string, string>} Normal\n */\n\nexport class Schema {\n  /**\n   * @constructor\n   * @param {Properties} property\n   * @param {Normal} normal\n   * @param {string} [space]\n   */\n  constructor(property, normal, space) {\n    this.property = property\n    this.normal = normal\n    if (space) {\n      this.space = space\n    }\n  }\n}\n\n/** @type {Properties} */\nSchema.prototype.property = {}\n/** @type {Normal} */\nSchema.prototype.normal = {}\n/** @type {string|null} */\nSchema.prototype.space = null\n", "/**\n * @typedef {import('./schema.js').Properties} Properties\n * @typedef {import('./schema.js').Normal} Normal\n */\n\nimport {Schema} from './schema.js'\n\n/**\n * @param {Schema[]} definitions\n * @param {string} [space]\n * @returns {Schema}\n */\nexport function merge(definitions, space) {\n  /** @type {Properties} */\n  const property = {}\n  /** @type {Normal} */\n  const normal = {}\n  let index = -1\n\n  while (++index < definitions.length) {\n    Object.assign(property, definitions[index].property)\n    Object.assign(normal, definitions[index].normal)\n  }\n\n  return new Schema(property, normal, space)\n}\n", "/**\n * @param {string} value\n * @returns {string}\n */\nexport function normalize(value) {\n  return value.toLowerCase()\n}\n", "export class Info {\n  /**\n   * @constructor\n   * @param {string} property\n   * @param {string} attribute\n   */\n  constructor(property, attribute) {\n    /** @type {string} */\n    this.property = property\n    /** @type {string} */\n    this.attribute = attribute\n  }\n}\n\n/** @type {string|null} */\nInfo.prototype.space = null\nInfo.prototype.boolean = false\nInfo.prototype.booleanish = false\nInfo.prototype.overloadedBoolean = false\nInfo.prototype.number = false\nInfo.prototype.commaSeparated = false\nInfo.prototype.spaceSeparated = false\nInfo.prototype.commaOrSpaceSeparated = false\nInfo.prototype.mustUseProperty = false\nInfo.prototype.defined = false\n", "let powers = 0\n\nexport const boolean = increment()\nexport const booleanish = increment()\nexport const overloadedBoolean = increment()\nexport const number = increment()\nexport const spaceSeparated = increment()\nexport const commaSeparated = increment()\nexport const commaOrSpaceSeparated = increment()\n\nfunction increment() {\n  return 2 ** ++powers\n}\n", "import {Info} from './info.js'\nimport * as types from './types.js'\n\n/** @type {Array<keyof types>} */\n// @ts-expect-error: hush.\nconst checks = Object.keys(types)\n\nexport class DefinedInfo extends Info {\n  /**\n   * @constructor\n   * @param {string} property\n   * @param {string} attribute\n   * @param {number|null} [mask]\n   * @param {string} [space]\n   */\n  constructor(property, attribute, mask, space) {\n    let index = -1\n\n    super(property, attribute)\n\n    mark(this, 'space', space)\n\n    if (typeof mask === 'number') {\n      while (++index < checks.length) {\n        const check = checks[index]\n        mark(this, checks[index], (mask & types[check]) === types[check])\n      }\n    }\n  }\n}\n\nDefinedInfo.prototype.defined = true\n\n/**\n * @param {DefinedInfo} values\n * @param {string} key\n * @param {unknown} value\n */\nfunction mark(values, key, value) {\n  if (value) {\n    // @ts-expect-error: assume `value` matches the expected value of `key`.\n    values[key] = value\n  }\n}\n", "/**\n * @typedef {import('./schema.js').Properties} Properties\n * @typedef {import('./schema.js').Normal} Normal\n *\n * @typedef {Record<string, string>} Attributes\n *\n * @typedef {Object} Definition\n * @property {Record<string, number|null>} properties\n * @property {(attributes: Attributes, property: string) => string} transform\n * @property {string} [space]\n * @property {Attributes} [attributes]\n * @property {Array<string>} [mustUseProperty]\n */\n\nimport {normalize} from '../normalize.js'\nimport {Schema} from './schema.js'\nimport {DefinedInfo} from './defined-info.js'\n\nconst own = {}.hasOwnProperty\n\n/**\n * @param {Definition} definition\n * @returns {Schema}\n */\nexport function create(definition) {\n  /** @type {Properties} */\n  const property = {}\n  /** @type {Normal} */\n  const normal = {}\n  /** @type {string} */\n  let prop\n\n  for (prop in definition.properties) {\n    if (own.call(definition.properties, prop)) {\n      const value = definition.properties[prop]\n      const info = new DefinedInfo(\n        prop,\n        definition.transform(definition.attributes || {}, prop),\n        value,\n        definition.space\n      )\n\n      if (\n        definition.mustUseProperty &&\n        definition.mustUseProperty.includes(prop)\n      ) {\n        info.mustUseProperty = true\n      }\n\n      property[prop] = info\n\n      normal[normalize(prop)] = prop\n      normal[normalize(info.attribute)] = prop\n    }\n  }\n\n  return new Schema(property, normal, definition.space)\n}\n", "import {create} from './util/create.js'\n\nexport const xlink = create({\n  space: 'xlink',\n  transform(_, prop) {\n    return 'xlink:' + prop.slice(5).toLowerCase()\n  },\n  properties: {\n    xLinkActuate: null,\n    xLinkArcRole: null,\n    xLinkHref: null,\n    xLinkRole: null,\n    xLinkShow: null,\n    xLinkTitle: null,\n    xLinkType: null\n  }\n})\n", "import {create} from './util/create.js'\n\nexport const xml = create({\n  space: 'xml',\n  transform(_, prop) {\n    return 'xml:' + prop.slice(3).toLowerCase()\n  },\n  properties: {xmlLang: null, xmlBase: null, xmlSpace: null}\n})\n", "/**\n * @param {Record<string, string>} attributes\n * @param {string} attribute\n * @returns {string}\n */\nexport function caseSensitiveTransform(attributes, attribute) {\n  return attribute in attributes ? attributes[attribute] : attribute\n}\n", "import {caseSensitiveTransform} from './case-sensitive-transform.js'\n\n/**\n * @param {Record<string, string>} attributes\n * @param {string} property\n * @returns {string}\n */\nexport function caseInsensitiveTransform(attributes, property) {\n  return caseSensitiveTransform(attributes, property.toLowerCase())\n}\n", "import {create} from './util/create.js'\nimport {caseInsensitiveTransform} from './util/case-insensitive-transform.js'\n\nexport const xmlns = create({\n  space: 'xmlns',\n  attributes: {xmlnsxlink: 'xmlns:xlink'},\n  transform: caseInsensitiveTransform,\n  properties: {xmlns: null, xmlnsXLink: null}\n})\n", "import {booleanish, number, spaceSeparated} from './util/types.js'\nimport {create} from './util/create.js'\n\nexport const aria = create({\n  transform(_, prop) {\n    return prop === 'role' ? prop : 'aria-' + prop.slice(4).toLowerCase()\n  },\n  properties: {\n    ariaActiveDescendant: null,\n    ariaAtomic: booleanish,\n    ariaAutoComplete: null,\n    ariaBusy: booleanish,\n    ariaChecked: booleanish,\n    ariaColCount: number,\n    ariaColIndex: number,\n    ariaColSpan: number,\n    ariaControls: spaceSeparated,\n    ariaCurrent: null,\n    ariaDescribedBy: spaceSeparated,\n    ariaDetails: null,\n    ariaDisabled: booleanish,\n    ariaDropEffect: spaceSeparated,\n    ariaErrorMessage: null,\n    ariaExpanded: booleanish,\n    ariaFlowTo: spaceSeparated,\n    ariaGrabbed: booleanish,\n    ariaHasPopup: null,\n    ariaHidden: booleanish,\n    ariaInvalid: null,\n    ariaKeyShortcuts: null,\n    ariaLabel: null,\n    ariaLabelledBy: spaceSeparated,\n    ariaLevel: number,\n    ariaLive: null,\n    ariaModal: booleanish,\n    ariaMultiLine: booleanish,\n    ariaMultiSelectable: booleanish,\n    ariaOrientation: null,\n    ariaOwns: spaceSeparated,\n    ariaPlaceholder: null,\n    ariaPosInSet: number,\n    ariaPressed: booleanish,\n    ariaReadOnly: booleanish,\n    ariaRelevant: null,\n    ariaRequired: booleanish,\n    ariaRoleDescription: spaceSeparated,\n    ariaRowCount: number,\n    ariaRowIndex: number,\n    ariaRowSpan: number,\n    ariaSelected: booleanish,\n    ariaSetSize: number,\n    ariaSort: null,\n    ariaValueMax: number,\n    ariaValueMin: number,\n    ariaValueNow: number,\n    ariaValueText: null,\n    role: null\n  }\n})\n", "import {\n  boolean,\n  overloadedBoolean,\n  booleanish,\n  number,\n  spaceSeparated,\n  commaSeparated\n} from './util/types.js'\nimport {create} from './util/create.js'\nimport {caseInsensitiveTransform} from './util/case-insensitive-transform.js'\n\nexport const html = create({\n  space: 'html',\n  attributes: {\n    acceptcharset: 'accept-charset',\n    classname: 'class',\n    htmlfor: 'for',\n    httpequiv: 'http-equiv'\n  },\n  transform: caseInsensitiveTransform,\n  mustUseProperty: ['checked', 'multiple', 'muted', 'selected'],\n  properties: {\n    // Standard Properties.\n    abbr: null,\n    accept: commaSeparated,\n    acceptCharset: spaceSeparated,\n    accessKey: spaceSeparated,\n    action: null,\n    allow: null,\n    allowFullScreen: boolean,\n    allowPaymentRequest: boolean,\n    allowUserMedia: boolean,\n    alt: null,\n    as: null,\n    async: boolean,\n    autoCapitalize: null,\n    autoComplete: spaceSeparated,\n    autoFocus: boolean,\n    autoPlay: boolean,\n    blocking: spaceSeparated,\n    capture: boolean,\n    charSet: null,\n    checked: boolean,\n    cite: null,\n    className: spaceSeparated,\n    cols: number,\n    colSpan: null,\n    content: null,\n    contentEditable: booleanish,\n    controls: boolean,\n    controlsList: spaceSeparated,\n    coords: number | commaSeparated,\n    crossOrigin: null,\n    data: null,\n    dateTime: null,\n    decoding: null,\n    default: boolean,\n    defer: boolean,\n    dir: null,\n    dirName: null,\n    disabled: boolean,\n    download: overloadedBoolean,\n    draggable: booleanish,\n    encType: null,\n    enterKeyHint: null,\n    fetchPriority: null,\n    form: null,\n    formAction: null,\n    formEncType: null,\n    formMethod: null,\n    formNoValidate: boolean,\n    formTarget: null,\n    headers: spaceSeparated,\n    height: number,\n    hidden: boolean,\n    high: number,\n    href: null,\n    hrefLang: null,\n    htmlFor: spaceSeparated,\n    httpEquiv: spaceSeparated,\n    id: null,\n    imageSizes: null,\n    imageSrcSet: null,\n    inert: boolean,\n    inputMode: null,\n    integrity: null,\n    is: null,\n    isMap: boolean,\n    itemId: null,\n    itemProp: spaceSeparated,\n    itemRef: spaceSeparated,\n    itemScope: boolean,\n    itemType: spaceSeparated,\n    kind: null,\n    label: null,\n    lang: null,\n    language: null,\n    list: null,\n    loading: null,\n    loop: boolean,\n    low: number,\n    manifest: null,\n    max: null,\n    maxLength: number,\n    media: null,\n    method: null,\n    min: null,\n    minLength: number,\n    multiple: boolean,\n    muted: boolean,\n    name: null,\n    nonce: null,\n    noModule: boolean,\n    noValidate: boolean,\n    onAbort: null,\n    onAfterPrint: null,\n    onAuxClick: null,\n    onBeforeMatch: null,\n    onBeforePrint: null,\n    onBeforeToggle: null,\n    onBeforeUnload: null,\n    onBlur: null,\n    onCancel: null,\n    onCanPlay: null,\n    onCanPlayThrough: null,\n    onChange: null,\n    onClick: null,\n    onClose: null,\n    onContextLost: null,\n    onContextMenu: null,\n    onContextRestored: null,\n    onCopy: null,\n    onCueChange: null,\n    onCut: null,\n    onDblClick: null,\n    onDrag: null,\n    onDragEnd: null,\n    onDragEnter: null,\n    onDragExit: null,\n    onDragLeave: null,\n    onDragOver: null,\n    onDragStart: null,\n    onDrop: null,\n    onDurationChange: null,\n    onEmptied: null,\n    onEnded: null,\n    onError: null,\n    onFocus: null,\n    onFormData: null,\n    onHashChange: null,\n    onInput: null,\n    onInvalid: null,\n    onKeyDown: null,\n    onKeyPress: null,\n    onKeyUp: null,\n    onLanguageChange: null,\n    onLoad: null,\n    onLoadedData: null,\n    onLoadedMetadata: null,\n    onLoadEnd: null,\n    onLoadStart: null,\n    onMessage: null,\n    onMessageError: null,\n    onMouseDown: null,\n    onMouseEnter: null,\n    onMouseLeave: null,\n    onMouseMove: null,\n    onMouseOut: null,\n    onMouseOver: null,\n    onMouseUp: null,\n    onOffline: null,\n    onOnline: null,\n    onPageHide: null,\n    onPageShow: null,\n    onPaste: null,\n    onPause: null,\n    onPlay: null,\n    onPlaying: null,\n    onPopState: null,\n    onProgress: null,\n    onRateChange: null,\n    onRejectionHandled: null,\n    onReset: null,\n    onResize: null,\n    onScroll: null,\n    onScrollEnd: null,\n    onSecurityPolicyViolation: null,\n    onSeeked: null,\n    onSeeking: null,\n    onSelect: null,\n    onSlotChange: null,\n    onStalled: null,\n    onStorage: null,\n    onSubmit: null,\n    onSuspend: null,\n    onTimeUpdate: null,\n    onToggle: null,\n    onUnhandledRejection: null,\n    onUnload: null,\n    onVolumeChange: null,\n    onWaiting: null,\n    onWheel: null,\n    open: boolean,\n    optimum: number,\n    pattern: null,\n    ping: spaceSeparated,\n    placeholder: null,\n    playsInline: boolean,\n    popover: null,\n    popoverTarget: null,\n    popoverTargetAction: null,\n    poster: null,\n    preload: null,\n    readOnly: boolean,\n    referrerPolicy: null,\n    rel: spaceSeparated,\n    required: boolean,\n    reversed: boolean,\n    rows: number,\n    rowSpan: number,\n    sandbox: spaceSeparated,\n    scope: null,\n    scoped: boolean,\n    seamless: boolean,\n    selected: boolean,\n    shadowRootDelegatesFocus: boolean,\n    shadowRootMode: null,\n    shape: null,\n    size: number,\n    sizes: null,\n    slot: null,\n    span: number,\n    spellCheck: booleanish,\n    src: null,\n    srcDoc: null,\n    srcLang: null,\n    srcSet: null,\n    start: number,\n    step: null,\n    style: null,\n    tabIndex: number,\n    target: null,\n    title: null,\n    translate: null,\n    type: null,\n    typeMustMatch: boolean,\n    useMap: null,\n    value: booleanish,\n    width: number,\n    wrap: null,\n\n    // Legacy.\n    // See: https://html.spec.whatwg.org/#other-elements,-attributes-and-apis\n    align: null, // Several. Use CSS `text-align` instead,\n    aLink: null, // `<body>`. Use CSS `a:active {color}` instead\n    archive: spaceSeparated, // `<object>`. List of URIs to archives\n    axis: null, // `<td>` and `<th>`. Use `scope` on `<th>`\n    background: null, // `<body>`. Use CSS `background-image` instead\n    bgColor: null, // `<body>` and table elements. Use CSS `background-color` instead\n    border: number, // `<table>`. Use CSS `border-width` instead,\n    borderColor: null, // `<table>`. Use CSS `border-color` instead,\n    bottomMargin: number, // `<body>`\n    cellPadding: null, // `<table>`\n    cellSpacing: null, // `<table>`\n    char: null, // Several table elements. When `align=char`, sets the character to align on\n    charOff: null, // Several table elements. When `char`, offsets the alignment\n    classId: null, // `<object>`\n    clear: null, // `<br>`. Use CSS `clear` instead\n    code: null, // `<object>`\n    codeBase: null, // `<object>`\n    codeType: null, // `<object>`\n    color: null, // `<font>` and `<hr>`. Use CSS instead\n    compact: boolean, // Lists. Use CSS to reduce space between items instead\n    declare: boolean, // `<object>`\n    event: null, // `<script>`\n    face: null, // `<font>`. Use CSS instead\n    frame: null, // `<table>`\n    frameBorder: null, // `<iframe>`. Use CSS `border` instead\n    hSpace: number, // `<img>` and `<object>`\n    leftMargin: number, // `<body>`\n    link: null, // `<body>`. Use CSS `a:link {color: *}` instead\n    longDesc: null, // `<frame>`, `<iframe>`, and `<img>`. Use an `<a>`\n    lowSrc: null, // `<img>`. Use a `<picture>`\n    marginHeight: number, // `<body>`\n    marginWidth: number, // `<body>`\n    noResize: boolean, // `<frame>`\n    noHref: boolean, // `<area>`. Use no href instead of an explicit `nohref`\n    noShade: boolean, // `<hr>`. Use background-color and height instead of borders\n    noWrap: boolean, // `<td>` and `<th>`\n    object: null, // `<applet>`\n    profile: null, // `<head>`\n    prompt: null, // `<isindex>`\n    rev: null, // `<link>`\n    rightMargin: number, // `<body>`\n    rules: null, // `<table>`\n    scheme: null, // `<meta>`\n    scrolling: booleanish, // `<frame>`. Use overflow in the child context\n    standby: null, // `<object>`\n    summary: null, // `<table>`\n    text: null, // `<body>`. Use CSS `color` instead\n    topMargin: number, // `<body>`\n    valueType: null, // `<param>`\n    version: null, // `<html>`. Use a doctype.\n    vAlign: null, // Several. Use CSS `vertical-align` instead\n    vLink: null, // `<body>`. Use CSS `a:visited {color}` instead\n    vSpace: number, // `<img>` and `<object>`\n\n    // Non-standard Properties.\n    allowTransparency: null,\n    autoCorrect: null,\n    autoSave: null,\n    disablePictureInPicture: boolean,\n    disableRemotePlayback: boolean,\n    prefix: null,\n    property: null,\n    results: number,\n    security: null,\n    unselectable: null\n  }\n})\n", "import {\n  boolean,\n  number,\n  spaceSeparated,\n  commaSeparated,\n  commaOrSpaceSeparated\n} from './util/types.js'\nimport {create} from './util/create.js'\nimport {caseSensitiveTransform} from './util/case-sensitive-transform.js'\n\nexport const svg = create({\n  space: 'svg',\n  attributes: {\n    accentHeight: 'accent-height',\n    alignmentBaseline: 'alignment-baseline',\n    arabicForm: 'arabic-form',\n    baselineShift: 'baseline-shift',\n    capHeight: 'cap-height',\n    className: 'class',\n    clipPath: 'clip-path',\n    clipRule: 'clip-rule',\n    colorInterpolation: 'color-interpolation',\n    colorInterpolationFilters: 'color-interpolation-filters',\n    colorProfile: 'color-profile',\n    colorRendering: 'color-rendering',\n    crossOrigin: 'crossorigin',\n    dataType: 'datatype',\n    dominantBaseline: 'dominant-baseline',\n    enableBackground: 'enable-background',\n    fillOpacity: 'fill-opacity',\n    fillRule: 'fill-rule',\n    floodColor: 'flood-color',\n    floodOpacity: 'flood-opacity',\n    fontFamily: 'font-family',\n    fontSize: 'font-size',\n    fontSizeAdjust: 'font-size-adjust',\n    fontStretch: 'font-stretch',\n    fontStyle: 'font-style',\n    fontVariant: 'font-variant',\n    fontWeight: 'font-weight',\n    glyphName: 'glyph-name',\n    glyphOrientationHorizontal: 'glyph-orientation-horizontal',\n    glyphOrientationVertical: 'glyph-orientation-vertical',\n    hrefLang: 'hreflang',\n    horizAdvX: 'horiz-adv-x',\n    horizOriginX: 'horiz-origin-x',\n    horizOriginY: 'horiz-origin-y',\n    imageRendering: 'image-rendering',\n    letterSpacing: 'letter-spacing',\n    lightingColor: 'lighting-color',\n    markerEnd: 'marker-end',\n    markerMid: 'marker-mid',\n    markerStart: 'marker-start',\n    navDown: 'nav-down',\n    navDownLeft: 'nav-down-left',\n    navDownRight: 'nav-down-right',\n    navLeft: 'nav-left',\n    navNext: 'nav-next',\n    navPrev: 'nav-prev',\n    navRight: 'nav-right',\n    navUp: 'nav-up',\n    navUpLeft: 'nav-up-left',\n    navUpRight: 'nav-up-right',\n    onAbort: 'onabort',\n    onActivate: 'onactivate',\n    onAfterPrint: 'onafterprint',\n    onBeforePrint: 'onbeforeprint',\n    onBegin: 'onbegin',\n    onCancel: 'oncancel',\n    onCanPlay: 'oncanplay',\n    onCanPlayThrough: 'oncanplaythrough',\n    onChange: 'onchange',\n    onClick: 'onclick',\n    onClose: 'onclose',\n    onCopy: 'oncopy',\n    onCueChange: 'oncuechange',\n    onCut: 'oncut',\n    onDblClick: 'ondblclick',\n    onDrag: 'ondrag',\n    onDragEnd: 'ondragend',\n    onDragEnter: 'ondragenter',\n    onDragExit: 'ondragexit',\n    onDragLeave: 'ondragleave',\n    onDragOver: 'ondragover',\n    onDragStart: 'ondragstart',\n    onDrop: 'ondrop',\n    onDurationChange: 'ondurationchange',\n    onEmptied: 'onemptied',\n    onEnd: 'onend',\n    onEnded: 'onended',\n    onError: 'onerror',\n    onFocus: 'onfocus',\n    onFocusIn: 'onfocusin',\n    onFocusOut: 'onfocusout',\n    onHashChange: 'onhashchange',\n    onInput: 'oninput',\n    onInvalid: 'oninvalid',\n    onKeyDown: 'onkeydown',\n    onKeyPress: 'onkeypress',\n    onKeyUp: 'onkeyup',\n    onLoad: 'onload',\n    onLoadedData: 'onloadeddata',\n    onLoadedMetadata: 'onloadedmetadata',\n    onLoadStart: 'onloadstart',\n    onMessage: 'onmessage',\n    onMouseDown: 'onmousedown',\n    onMouseEnter: 'onmouseenter',\n    onMouseLeave: 'onmouseleave',\n    onMouseMove: 'onmousemove',\n    onMouseOut: 'onmouseout',\n    onMouseOver: 'onmouseover',\n    onMouseUp: 'onmouseup',\n    onMouseWheel: 'onmousewheel',\n    onOffline: 'onoffline',\n    onOnline: 'ononline',\n    onPageHide: 'onpagehide',\n    onPageShow: 'onpageshow',\n    onPaste: 'onpaste',\n    onPause: 'onpause',\n    onPlay: 'onplay',\n    onPlaying: 'onplaying',\n    onPopState: 'onpopstate',\n    onProgress: 'onprogress',\n    onRateChange: 'onratechange',\n    onRepeat: 'onrepeat',\n    onReset: 'onreset',\n    onResize: 'onresize',\n    onScroll: 'onscroll',\n    onSeeked: 'onseeked',\n    onSeeking: 'onseeking',\n    onSelect: 'onselect',\n    onShow: 'onshow',\n    onStalled: 'onstalled',\n    onStorage: 'onstorage',\n    onSubmit: 'onsubmit',\n    onSuspend: 'onsuspend',\n    onTimeUpdate: 'ontimeupdate',\n    onToggle: 'ontoggle',\n    onUnload: 'onunload',\n    onVolumeChange: 'onvolumechange',\n    onWaiting: 'onwaiting',\n    onZoom: 'onzoom',\n    overlinePosition: 'overline-position',\n    overlineThickness: 'overline-thickness',\n    paintOrder: 'paint-order',\n    panose1: 'panose-1',\n    pointerEvents: 'pointer-events',\n    referrerPolicy: 'referrerpolicy',\n    renderingIntent: 'rendering-intent',\n    shapeRendering: 'shape-rendering',\n    stopColor: 'stop-color',\n    stopOpacity: 'stop-opacity',\n    strikethroughPosition: 'strikethrough-position',\n    strikethroughThickness: 'strikethrough-thickness',\n    strokeDashArray: 'stroke-dasharray',\n    strokeDashOffset: 'stroke-dashoffset',\n    strokeLineCap: 'stroke-linecap',\n    strokeLineJoin: 'stroke-linejoin',\n    strokeMiterLimit: 'stroke-miterlimit',\n    strokeOpacity: 'stroke-opacity',\n    strokeWidth: 'stroke-width',\n    tabIndex: 'tabindex',\n    textAnchor: 'text-anchor',\n    textDecoration: 'text-decoration',\n    textRendering: 'text-rendering',\n    transformOrigin: 'transform-origin',\n    typeOf: 'typeof',\n    underlinePosition: 'underline-position',\n    underlineThickness: 'underline-thickness',\n    unicodeBidi: 'unicode-bidi',\n    unicodeRange: 'unicode-range',\n    unitsPerEm: 'units-per-em',\n    vAlphabetic: 'v-alphabetic',\n    vHanging: 'v-hanging',\n    vIdeographic: 'v-ideographic',\n    vMathematical: 'v-mathematical',\n    vectorEffect: 'vector-effect',\n    vertAdvY: 'vert-adv-y',\n    vertOriginX: 'vert-origin-x',\n    vertOriginY: 'vert-origin-y',\n    wordSpacing: 'word-spacing',\n    writingMode: 'writing-mode',\n    xHeight: 'x-height',\n    // These were camelcased in Tiny. Now lowercased in SVG 2\n    playbackOrder: 'playbackorder',\n    timelineBegin: 'timelinebegin'\n  },\n  transform: caseSensitiveTransform,\n  properties: {\n    about: commaOrSpaceSeparated,\n    accentHeight: number,\n    accumulate: null,\n    additive: null,\n    alignmentBaseline: null,\n    alphabetic: number,\n    amplitude: number,\n    arabicForm: null,\n    ascent: number,\n    attributeName: null,\n    attributeType: null,\n    azimuth: number,\n    bandwidth: null,\n    baselineShift: null,\n    baseFrequency: null,\n    baseProfile: null,\n    bbox: null,\n    begin: null,\n    bias: number,\n    by: null,\n    calcMode: null,\n    capHeight: number,\n    className: spaceSeparated,\n    clip: null,\n    clipPath: null,\n    clipPathUnits: null,\n    clipRule: null,\n    color: null,\n    colorInterpolation: null,\n    colorInterpolationFilters: null,\n    colorProfile: null,\n    colorRendering: null,\n    content: null,\n    contentScriptType: null,\n    contentStyleType: null,\n    crossOrigin: null,\n    cursor: null,\n    cx: null,\n    cy: null,\n    d: null,\n    dataType: null,\n    defaultAction: null,\n    descent: number,\n    diffuseConstant: number,\n    direction: null,\n    display: null,\n    dur: null,\n    divisor: number,\n    dominantBaseline: null,\n    download: boolean,\n    dx: null,\n    dy: null,\n    edgeMode: null,\n    editable: null,\n    elevation: number,\n    enableBackground: null,\n    end: null,\n    event: null,\n    exponent: number,\n    externalResourcesRequired: null,\n    fill: null,\n    fillOpacity: number,\n    fillRule: null,\n    filter: null,\n    filterRes: null,\n    filterUnits: null,\n    floodColor: null,\n    floodOpacity: null,\n    focusable: null,\n    focusHighlight: null,\n    fontFamily: null,\n    fontSize: null,\n    fontSizeAdjust: null,\n    fontStretch: null,\n    fontStyle: null,\n    fontVariant: null,\n    fontWeight: null,\n    format: null,\n    fr: null,\n    from: null,\n    fx: null,\n    fy: null,\n    g1: commaSeparated,\n    g2: commaSeparated,\n    glyphName: commaSeparated,\n    glyphOrientationHorizontal: null,\n    glyphOrientationVertical: null,\n    glyphRef: null,\n    gradientTransform: null,\n    gradientUnits: null,\n    handler: null,\n    hanging: number,\n    hatchContentUnits: null,\n    hatchUnits: null,\n    height: null,\n    href: null,\n    hrefLang: null,\n    horizAdvX: number,\n    horizOriginX: number,\n    horizOriginY: number,\n    id: null,\n    ideographic: number,\n    imageRendering: null,\n    initialVisibility: null,\n    in: null,\n    in2: null,\n    intercept: number,\n    k: number,\n    k1: number,\n    k2: number,\n    k3: number,\n    k4: number,\n    kernelMatrix: commaOrSpaceSeparated,\n    kernelUnitLength: null,\n    keyPoints: null, // SEMI_COLON_SEPARATED\n    keySplines: null, // SEMI_COLON_SEPARATED\n    keyTimes: null, // SEMI_COLON_SEPARATED\n    kerning: null,\n    lang: null,\n    lengthAdjust: null,\n    letterSpacing: null,\n    lightingColor: null,\n    limitingConeAngle: number,\n    local: null,\n    markerEnd: null,\n    markerMid: null,\n    markerStart: null,\n    markerHeight: null,\n    markerUnits: null,\n    markerWidth: null,\n    mask: null,\n    maskContentUnits: null,\n    maskUnits: null,\n    mathematical: null,\n    max: null,\n    media: null,\n    mediaCharacterEncoding: null,\n    mediaContentEncodings: null,\n    mediaSize: number,\n    mediaTime: null,\n    method: null,\n    min: null,\n    mode: null,\n    name: null,\n    navDown: null,\n    navDownLeft: null,\n    navDownRight: null,\n    navLeft: null,\n    navNext: null,\n    navPrev: null,\n    navRight: null,\n    navUp: null,\n    navUpLeft: null,\n    navUpRight: null,\n    numOctaves: null,\n    observer: null,\n    offset: null,\n    onAbort: null,\n    onActivate: null,\n    onAfterPrint: null,\n    onBeforePrint: null,\n    onBegin: null,\n    onCancel: null,\n    onCanPlay: null,\n    onCanPlayThrough: null,\n    onChange: null,\n    onClick: null,\n    onClose: null,\n    onCopy: null,\n    onCueChange: null,\n    onCut: null,\n    onDblClick: null,\n    onDrag: null,\n    onDragEnd: null,\n    onDragEnter: null,\n    onDragExit: null,\n    onDragLeave: null,\n    onDragOver: null,\n    onDragStart: null,\n    onDrop: null,\n    onDurationChange: null,\n    onEmptied: null,\n    onEnd: null,\n    onEnded: null,\n    onError: null,\n    onFocus: null,\n    onFocusIn: null,\n    onFocusOut: null,\n    onHashChange: null,\n    onInput: null,\n    onInvalid: null,\n    onKeyDown: null,\n    onKeyPress: null,\n    onKeyUp: null,\n    onLoad: null,\n    onLoadedData: null,\n    onLoadedMetadata: null,\n    onLoadStart: null,\n    onMessage: null,\n    onMouseDown: null,\n    onMouseEnter: null,\n    onMouseLeave: null,\n    onMouseMove: null,\n    onMouseOut: null,\n    onMouseOver: null,\n    onMouseUp: null,\n    onMouseWheel: null,\n    onOffline: null,\n    onOnline: null,\n    onPageHide: null,\n    onPageShow: null,\n    onPaste: null,\n    onPause: null,\n    onPlay: null,\n    onPlaying: null,\n    onPopState: null,\n    onProgress: null,\n    onRateChange: null,\n    onRepeat: null,\n    onReset: null,\n    onResize: null,\n    onScroll: null,\n    onSeeked: null,\n    onSeeking: null,\n    onSelect: null,\n    onShow: null,\n    onStalled: null,\n    onStorage: null,\n    onSubmit: null,\n    onSuspend: null,\n    onTimeUpdate: null,\n    onToggle: null,\n    onUnload: null,\n    onVolumeChange: null,\n    onWaiting: null,\n    onZoom: null,\n    opacity: null,\n    operator: null,\n    order: null,\n    orient: null,\n    orientation: null,\n    origin: null,\n    overflow: null,\n    overlay: null,\n    overlinePosition: number,\n    overlineThickness: number,\n    paintOrder: null,\n    panose1: null,\n    path: null,\n    pathLength: number,\n    patternContentUnits: null,\n    patternTransform: null,\n    patternUnits: null,\n    phase: null,\n    ping: spaceSeparated,\n    pitch: null,\n    playbackOrder: null,\n    pointerEvents: null,\n    points: null,\n    pointsAtX: number,\n    pointsAtY: number,\n    pointsAtZ: number,\n    preserveAlpha: null,\n    preserveAspectRatio: null,\n    primitiveUnits: null,\n    propagate: null,\n    property: commaOrSpaceSeparated,\n    r: null,\n    radius: null,\n    referrerPolicy: null,\n    refX: null,\n    refY: null,\n    rel: commaOrSpaceSeparated,\n    rev: commaOrSpaceSeparated,\n    renderingIntent: null,\n    repeatCount: null,\n    repeatDur: null,\n    requiredExtensions: commaOrSpaceSeparated,\n    requiredFeatures: commaOrSpaceSeparated,\n    requiredFonts: commaOrSpaceSeparated,\n    requiredFormats: commaOrSpaceSeparated,\n    resource: null,\n    restart: null,\n    result: null,\n    rotate: null,\n    rx: null,\n    ry: null,\n    scale: null,\n    seed: null,\n    shapeRendering: null,\n    side: null,\n    slope: null,\n    snapshotTime: null,\n    specularConstant: number,\n    specularExponent: number,\n    spreadMethod: null,\n    spacing: null,\n    startOffset: null,\n    stdDeviation: null,\n    stemh: null,\n    stemv: null,\n    stitchTiles: null,\n    stopColor: null,\n    stopOpacity: null,\n    strikethroughPosition: number,\n    strikethroughThickness: number,\n    string: null,\n    stroke: null,\n    strokeDashArray: commaOrSpaceSeparated,\n    strokeDashOffset: null,\n    strokeLineCap: null,\n    strokeLineJoin: null,\n    strokeMiterLimit: number,\n    strokeOpacity: number,\n    strokeWidth: null,\n    style: null,\n    surfaceScale: number,\n    syncBehavior: null,\n    syncBehaviorDefault: null,\n    syncMaster: null,\n    syncTolerance: null,\n    syncToleranceDefault: null,\n    systemLanguage: commaOrSpaceSeparated,\n    tabIndex: number,\n    tableValues: null,\n    target: null,\n    targetX: number,\n    targetY: number,\n    textAnchor: null,\n    textDecoration: null,\n    textRendering: null,\n    textLength: null,\n    timelineBegin: null,\n    title: null,\n    transformBehavior: null,\n    type: null,\n    typeOf: commaOrSpaceSeparated,\n    to: null,\n    transform: null,\n    transformOrigin: null,\n    u1: null,\n    u2: null,\n    underlinePosition: number,\n    underlineThickness: number,\n    unicode: null,\n    unicodeBidi: null,\n    unicodeRange: null,\n    unitsPerEm: number,\n    values: null,\n    vAlphabetic: number,\n    vMathematical: number,\n    vectorEffect: null,\n    vHanging: number,\n    vIdeographic: number,\n    version: null,\n    vertAdvY: number,\n    vertOriginX: number,\n    vertOriginY: number,\n    viewBox: null,\n    viewTarget: null,\n    visibility: null,\n    width: null,\n    widths: null,\n    wordSpacing: null,\n    writingMode: null,\n    x: null,\n    x1: null,\n    x2: null,\n    xChannelSelector: null,\n    xHeight: number,\n    y: null,\n    y1: null,\n    y2: null,\n    yChannelSelector: null,\n    z: null,\n    zoomAndPan: null\n  }\n})\n", "/**\n * @typedef {import('./util/schema.js').Schema} Schema\n */\n\nimport {normalize} from './normalize.js'\nimport {DefinedInfo} from './util/defined-info.js'\nimport {Info} from './util/info.js'\n\nconst valid = /^data[-\\w.:]+$/i\nconst dash = /-[a-z]/g\nconst cap = /[A-Z]/g\n\n/**\n * @param {Schema} schema\n * @param {string} value\n * @returns {Info}\n */\nexport function find(schema, value) {\n  const normal = normalize(value)\n  let prop = value\n  let Type = Info\n\n  if (normal in schema.normal) {\n    return schema.property[schema.normal[normal]]\n  }\n\n  if (normal.length > 4 && normal.slice(0, 4) === 'data' && valid.test(value)) {\n    // Attribute or property.\n    if (value.charAt(4) === '-') {\n      // Turn it into a property.\n      const rest = value.slice(5).replace(dash, camelcase)\n      prop = 'data' + rest.charAt(0).toUpperCase() + rest.slice(1)\n    } else {\n      // Turn it into an attribute.\n      const rest = value.slice(4)\n\n      if (!dash.test(rest)) {\n        let dashes = rest.replace(cap, kebab)\n\n        if (dashes.charAt(0) !== '-') {\n          dashes = '-' + dashes\n        }\n\n        value = 'data' + dashes\n      }\n    }\n\n    Type = DefinedInfo\n  }\n\n  return new Type(prop, value)\n}\n\n/**\n * @param {string} $0\n * @returns {string}\n */\nfunction kebab($0) {\n  return '-' + $0.toLowerCase()\n}\n\n/**\n * @param {string} $0\n * @returns {string}\n */\nfunction camelcase($0) {\n  return $0.charAt(1).toUpperCase()\n}\n", "/**\n * `hast` is close to `React`, but differs in a couple of cases.\n *\n * To get a React property from a hast property, check if it is in\n * `hastToReact`, if it is, then use the corresponding value,\n * otherwise, use the hast property.\n *\n * @type {Record<string, string>}\n */\nexport const hastToReact = {\n  classId: 'classID',\n  dataType: 'datatype',\n  itemId: 'itemID',\n  strokeDashArray: 'strokeDasharray',\n  strokeDashOffset: 'strokeDashoffset',\n  strokeLineCap: 'strokeLinecap',\n  strokeLineJoin: 'strokeLinejoin',\n  strokeMiterLimit: 'strokeMiterlimit',\n  typeOf: 'typeof',\n  xLinkActuate: 'xlinkActuate',\n  xLinkArcRole: 'xlinkArcrole',\n  xLinkHref: 'xlinkHref',\n  xLinkRole: 'xlinkRole',\n  xLinkShow: 'xlinkShow',\n  xLinkTitle: 'xlinkTitle',\n  xLinkType: 'xlinkType',\n  xmlnsXLink: 'xmlnsXlink'\n}\n", "/**\n * @typedef {import('./lib/util/info.js').Info} Info\n * @typedef {import('./lib/util/schema.js').Schema} Schema\n */\n\nimport {merge} from './lib/util/merge.js'\nimport {xlink} from './lib/xlink.js'\nimport {xml} from './lib/xml.js'\nimport {xmlns} from './lib/xmlns.js'\nimport {aria} from './lib/aria.js'\nimport {html as htmlBase} from './lib/html.js'\nimport {svg as svgBase} from './lib/svg.js'\n\nexport {find} from './lib/find.js'\nexport {hastToReact} from './lib/hast-to-react.js'\nexport {normalize} from './lib/normalize.js'\nexport const html = merge([xml, xlink, xmlns, aria, htmlBase], 'html')\nexport const svg = merge([xml, xlink, xmlns, aria, svgBase], 'svg')\n", "/**\n * Parse space-separated tokens to an array of strings.\n *\n * @param {string} value\n *   Space-separated tokens.\n * @returns {Array<string>}\n *   List of tokens.\n */\nexport function parse(value) {\n  const input = String(value || '').trim()\n  return input ? input.split(/[ \\t\\n\\r\\f]+/g) : []\n}\n\n/**\n * Serialize an array of strings as space separated-tokens.\n *\n * @param {Array<string|number>} values\n *   List of tokens.\n * @returns {string}\n *   Space-separated tokens.\n */\nexport function stringify(values) {\n  return values.join(' ').trim()\n}\n", "import StyleToObject from '../cjs/index.js';\n\n// ensure compatibility with rollup umd build\nexport default StyleToObject.default || StyleToObject;\n", "/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('unist').Point} Point\n * @typedef {import('unist').Position} Position\n */\n\n/**\n * @typedef NodeLike\n * @property {string} type\n * @property {PositionLike | null | undefined} [position]\n *\n * @typedef PositionLike\n * @property {PointLike | null | undefined} [start]\n * @property {PointLike | null | undefined} [end]\n *\n * @typedef PointLike\n * @property {number | null | undefined} [line]\n * @property {number | null | undefined} [column]\n * @property {number | null | undefined} [offset]\n */\n\n/**\n * Get the ending point of `node`.\n *\n * @param node\n *   Node.\n * @returns\n *   Point.\n */\nexport const pointEnd = point('end')\n\n/**\n * Get the starting point of `node`.\n *\n * @param node\n *   Node.\n * @returns\n *   Point.\n */\nexport const pointStart = point('start')\n\n/**\n * Get the positional info of `node`.\n *\n * @param {'end' | 'start'} type\n *   Side.\n * @returns\n *   Getter.\n */\nfunction point(type) {\n  return point\n\n  /**\n   * Get the point info of `node` at a bound side.\n   *\n   * @param {Node | NodeLike | null | undefined} [node]\n   * @returns {Point | undefined}\n   */\n  function point(node) {\n    const point = (node && node.position && node.position[type]) || {}\n\n    if (\n      typeof point.line === 'number' &&\n      point.line > 0 &&\n      typeof point.column === 'number' &&\n      point.column > 0\n    ) {\n      return {\n        line: point.line,\n        column: point.column,\n        offset:\n          typeof point.offset === 'number' && point.offset > -1\n            ? point.offset\n            : undefined\n      }\n    }\n  }\n}\n\n/**\n * Get the positional info of `node`.\n *\n * @param {Node | NodeLike | null | undefined} [node]\n *   Node.\n * @returns {Position | undefined}\n *   Position.\n */\nexport function position(node) {\n  const start = pointStart(node)\n  const end = pointEnd(node)\n\n  if (start && end) {\n    return {start, end}\n  }\n}\n", "/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('unist').Point} Point\n * @typedef {import('unist').Position} Position\n */\n\n/**\n * @typedef NodeLike\n * @property {string} type\n * @property {PositionLike | null | undefined} [position]\n *\n * @typedef PointLike\n * @property {number | null | undefined} [line]\n * @property {number | null | undefined} [column]\n * @property {number | null | undefined} [offset]\n *\n * @typedef PositionLike\n * @property {PointLike | null | undefined} [start]\n * @property {PointLike | null | undefined} [end]\n */\n\n/**\n * Serialize the positional info of a point, position (start and end points),\n * or node.\n *\n * @param {Node | NodeLike | Point | PointLike | Position | PositionLike | null | undefined} [value]\n *   Node, position, or point.\n * @returns {string}\n *   Pretty printed positional info of a node (`string`).\n *\n *   In the format of a range `ls:cs-le:ce` (when given `node` or `position`)\n *   or a point `l:c` (when given `point`), where `l` stands for line, `c` for\n *   column, `s` for `start`, and `e` for end.\n *   An empty string (`''`) is returned if the given value is neither `node`,\n *   `position`, nor `point`.\n */\nexport function stringifyPosition(value) {\n  // Nothing.\n  if (!value || typeof value !== 'object') {\n    return ''\n  }\n\n  // Node.\n  if ('position' in value || 'type' in value) {\n    return position(value.position)\n  }\n\n  // Position.\n  if ('start' in value || 'end' in value) {\n    return position(value)\n  }\n\n  // Point.\n  if ('line' in value || 'column' in value) {\n    return point(value)\n  }\n\n  // ?\n  return ''\n}\n\n/**\n * @param {Point | PointLike | null | undefined} point\n * @returns {string}\n */\nfunction point(point) {\n  return index(point && point.line) + ':' + index(point && point.column)\n}\n\n/**\n * @param {Position | PositionLike | null | undefined} pos\n * @returns {string}\n */\nfunction position(pos) {\n  return point(pos && pos.start) + '-' + point(pos && pos.end)\n}\n\n/**\n * @param {number | null | undefined} value\n * @returns {number}\n */\nfunction index(value) {\n  return value && typeof value === 'number' ? value : 1\n}\n", "/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('unist').Point} Point\n * @typedef {import('unist').Position} Position\n */\n\n/**\n * @typedef {object & {type: string, position?: Position | undefined}} NodeLike\n *\n * @typedef Options\n *   Configuration.\n * @property {Array<Node> | null | undefined} [ancestors]\n *   Stack of (inclusive) ancestor nodes surrounding the message (optional).\n * @property {Error | null | undefined} [cause]\n *   Original error cause of the message (optional).\n * @property {Point | Position | null | undefined} [place]\n *   Place of message (optional).\n * @property {string | null | undefined} [ruleId]\n *   Category of message (optional, example: `'my-rule'`).\n * @property {string | null | undefined} [source]\n *   Namespace of who sent the message (optional, example: `'my-package'`).\n */\n\nimport {stringifyPosition} from 'unist-util-stringify-position'\n\n/**\n * Message.\n */\nexport class VFileMessage extends Error {\n  /**\n   * Create a message for `reason`.\n   *\n   * > \uD83E\uDEA6 **Note**: also has obsolete signatures.\n   *\n   * @overload\n   * @param {string} reason\n   * @param {Options | null | undefined} [options]\n   * @returns\n   *\n   * @overload\n   * @param {string} reason\n   * @param {Node | NodeLike | null | undefined} parent\n   * @param {string | null | undefined} [origin]\n   * @returns\n   *\n   * @overload\n   * @param {string} reason\n   * @param {Point | Position | null | undefined} place\n   * @param {string | null | undefined} [origin]\n   * @returns\n   *\n   * @overload\n   * @param {string} reason\n   * @param {string | null | undefined} [origin]\n   * @returns\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {Node | NodeLike | null | undefined} parent\n   * @param {string | null | undefined} [origin]\n   * @returns\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {Point | Position | null | undefined} place\n   * @param {string | null | undefined} [origin]\n   * @returns\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {string | null | undefined} [origin]\n   * @returns\n   *\n   * @param {Error | VFileMessage | string} causeOrReason\n   *   Reason for message, should use markdown.\n   * @param {Node | NodeLike | Options | Point | Position | string | null | undefined} [optionsOrParentOrPlace]\n   *   Configuration (optional).\n   * @param {string | null | undefined} [origin]\n   *   Place in code where the message originates (example:\n   *   `'my-package:my-rule'` or `'my-rule'`).\n   * @returns\n   *   Instance of `VFileMessage`.\n   */\n  // eslint-disable-next-line complexity\n  constructor(causeOrReason, optionsOrParentOrPlace, origin) {\n    super()\n\n    if (typeof optionsOrParentOrPlace === 'string') {\n      origin = optionsOrParentOrPlace\n      optionsOrParentOrPlace = undefined\n    }\n\n    /** @type {string} */\n    let reason = ''\n    /** @type {Options} */\n    let options = {}\n    let legacyCause = false\n\n    if (optionsOrParentOrPlace) {\n      // Point.\n      if (\n        'line' in optionsOrParentOrPlace &&\n        'column' in optionsOrParentOrPlace\n      ) {\n        options = {place: optionsOrParentOrPlace}\n      }\n      // Position.\n      else if (\n        'start' in optionsOrParentOrPlace &&\n        'end' in optionsOrParentOrPlace\n      ) {\n        options = {place: optionsOrParentOrPlace}\n      }\n      // Node.\n      else if ('type' in optionsOrParentOrPlace) {\n        options = {\n          ancestors: [optionsOrParentOrPlace],\n          place: optionsOrParentOrPlace.position\n        }\n      }\n      // Options.\n      else {\n        options = {...optionsOrParentOrPlace}\n      }\n    }\n\n    if (typeof causeOrReason === 'string') {\n      reason = causeOrReason\n    }\n    // Error.\n    else if (!options.cause && causeOrReason) {\n      legacyCause = true\n      reason = causeOrReason.message\n      options.cause = causeOrReason\n    }\n\n    if (!options.ruleId && !options.source && typeof origin === 'string') {\n      const index = origin.indexOf(':')\n\n      if (index === -1) {\n        options.ruleId = origin\n      } else {\n        options.source = origin.slice(0, index)\n        options.ruleId = origin.slice(index + 1)\n      }\n    }\n\n    if (!options.place && options.ancestors && options.ancestors) {\n      const parent = options.ancestors[options.ancestors.length - 1]\n\n      if (parent) {\n        options.place = parent.position\n      }\n    }\n\n    const start =\n      options.place && 'start' in options.place\n        ? options.place.start\n        : options.place\n\n    /* eslint-disable no-unused-expressions */\n    /**\n     * Stack of ancestor nodes surrounding the message.\n     *\n     * @type {Array<Node> | undefined}\n     */\n    this.ancestors = options.ancestors || undefined\n\n    /**\n     * Original error cause of the message.\n     *\n     * @type {Error | undefined}\n     */\n    this.cause = options.cause || undefined\n\n    /**\n     * Starting column of message.\n     *\n     * @type {number | undefined}\n     */\n    this.column = start ? start.column : undefined\n\n    /**\n     * State of problem.\n     *\n     * * `true` \u2014 error, file not usable\n     * * `false` \u2014 warning, change may be needed\n     * * `undefined` \u2014 change likely not needed\n     *\n     * @type {boolean | null | undefined}\n     */\n    this.fatal = undefined\n\n    /**\n     * Path of a file (used throughout the `VFile` ecosystem).\n     *\n     * @type {string | undefined}\n     */\n    this.file\n\n    // Field from `Error`.\n    /**\n     * Reason for message.\n     *\n     * @type {string}\n     */\n    this.message = reason\n\n    /**\n     * Starting line of error.\n     *\n     * @type {number | undefined}\n     */\n    this.line = start ? start.line : undefined\n\n    // Field from `Error`.\n    /**\n     * Serialized positional info of message.\n     *\n     * On normal errors, this would be something like `ParseError`, buit in\n     * `VFile` messages we use this space to show where an error happened.\n     */\n    this.name = stringifyPosition(options.place) || '1:1'\n\n    /**\n     * Place of message.\n     *\n     * @type {Point | Position | undefined}\n     */\n    this.place = options.place || undefined\n\n    /**\n     * Reason for message, should use markdown.\n     *\n     * @type {string}\n     */\n    this.reason = this.message\n\n    /**\n     * Category of message (example: `'my-rule'`).\n     *\n     * @type {string | undefined}\n     */\n    this.ruleId = options.ruleId || undefined\n\n    /**\n     * Namespace of message (example: `'my-package'`).\n     *\n     * @type {string | undefined}\n     */\n    this.source = options.source || undefined\n\n    // Field from `Error`.\n    /**\n     * Stack of message.\n     *\n     * This is used by normal errors to show where something happened in\n     * programming code, irrelevant for `VFile` messages,\n     *\n     * @type {string}\n     */\n    this.stack =\n      legacyCause && options.cause && typeof options.cause.stack === 'string'\n        ? options.cause.stack\n        : ''\n\n    // The following fields are \u201Cwell known\u201D.\n    // Not standard.\n    // Feel free to add other non-standard fields to your messages.\n\n    /**\n     * Specify the source value that\u2019s being reported, which is deemed\n     * incorrect.\n     *\n     * @type {string | undefined}\n     */\n    this.actual\n\n    /**\n     * Suggest acceptable values that can be used instead of `actual`.\n     *\n     * @type {Array<string> | undefined}\n     */\n    this.expected\n\n    /**\n     * Long form description of the message (you should use markdown).\n     *\n     * @type {string | undefined}\n     */\n    this.note\n\n    /**\n     * Link to docs for the message.\n     *\n     * > \uD83D\uDC49 **Note**: this must be an absolute URL that can be passed as `x`\n     * > to `new URL(x)`.\n     *\n     * @type {string | undefined}\n     */\n    this.url\n    /* eslint-enable no-unused-expressions */\n  }\n}\n\nVFileMessage.prototype.file = ''\nVFileMessage.prototype.name = ''\nVFileMessage.prototype.reason = ''\nVFileMessage.prototype.message = ''\nVFileMessage.prototype.stack = ''\nVFileMessage.prototype.column = undefined\nVFileMessage.prototype.line = undefined\nVFileMessage.prototype.ancestors = undefined\nVFileMessage.prototype.cause = undefined\nVFileMessage.prototype.fatal = undefined\nVFileMessage.prototype.place = undefined\nVFileMessage.prototype.ruleId = undefined\nVFileMessage.prototype.source = undefined\n", "/**\n * @import {Identifier, Literal, MemberExpression} from 'estree'\n * @import {Jsx, JsxDev, Options, Props} from 'hast-util-to-jsx-runtime'\n * @import {Element, Nodes, Parents, Root, Text} from 'hast'\n * @import {MdxFlowExpressionHast, MdxTextExpressionHast} from 'mdast-util-mdx-expression'\n * @import {MdxJsxFlowElementHast, MdxJsxTextElementHast} from 'mdast-util-mdx-jsx'\n * @import {MdxjsEsmHast} from 'mdast-util-mdxjs-esm'\n * @import {Position} from 'unist'\n * @import {Child, Create, Field, State, Style} from './types.js'\n */\n\nimport {stringify as commas} from 'comma-separated-tokens'\nimport {ok as assert} from 'devlop'\nimport {name as isIdentifierName} from 'estree-util-is-identifier-name'\nimport {whitespace} from 'hast-util-whitespace'\nimport {find, hastToReact, html, svg} from 'property-information'\nimport {stringify as spaces} from 'space-separated-tokens'\nimport styleToObject from 'style-to-object'\nimport {pointStart} from 'unist-util-position'\nimport {VFileMessage} from 'vfile-message'\n\n// To do: next major: `Object.hasOwn`.\nconst own = {}.hasOwnProperty\n\n/** @type {Map<string, number>} */\nconst emptyMap = new Map()\n\nconst cap = /[A-Z]/g\nconst dashSomething = /-([a-z])/g\n\n// `react-dom` triggers a warning for *any* white space in tables.\n// To follow GFM, `mdast-util-to-hast` injects line endings between elements.\n// Other tools might do so too, but they don\u2019t do here, so we remove all of\n// that.\n\n// See: <https://github.com/facebook/react/pull/7081>.\n// See: <https://github.com/facebook/react/pull/7515>.\n// See: <https://github.com/remarkjs/remark-react/issues/64>.\n// See: <https://github.com/rehypejs/rehype-react/pull/29>.\n// See: <https://github.com/rehypejs/rehype-react/pull/32>.\n// See: <https://github.com/rehypejs/rehype-react/pull/45>.\nconst tableElements = new Set(['table', 'tbody', 'thead', 'tfoot', 'tr'])\n\nconst tableCellElement = new Set(['td', 'th'])\n\nconst docs = 'https://github.com/syntax-tree/hast-util-to-jsx-runtime'\n\n/**\n * Transform a hast tree to preact, react, solid, svelte, vue, etc.,\n * with an automatic JSX runtime.\n *\n * @param {Nodes} tree\n *   Tree to transform.\n * @param {Options} options\n *   Configuration (required).\n * @returns {JSX.Element}\n *   JSX element.\n */\n\nexport function toJsxRuntime(tree, options) {\n  if (!options || options.Fragment === undefined) {\n    throw new TypeError('Expected `Fragment` in options')\n  }\n\n  const filePath = options.filePath || undefined\n  /** @type {Create} */\n  let create\n\n  if (options.development) {\n    if (typeof options.jsxDEV !== 'function') {\n      throw new TypeError(\n        'Expected `jsxDEV` in options when `development: true`'\n      )\n    }\n\n    create = developmentCreate(filePath, options.jsxDEV)\n  } else {\n    if (typeof options.jsx !== 'function') {\n      throw new TypeError('Expected `jsx` in production options')\n    }\n\n    if (typeof options.jsxs !== 'function') {\n      throw new TypeError('Expected `jsxs` in production options')\n    }\n\n    create = productionCreate(filePath, options.jsx, options.jsxs)\n  }\n\n  /** @type {State} */\n  const state = {\n    Fragment: options.Fragment,\n    ancestors: [],\n    components: options.components || {},\n    create,\n    elementAttributeNameCase: options.elementAttributeNameCase || 'react',\n    evaluater: options.createEvaluater ? options.createEvaluater() : undefined,\n    filePath,\n    ignoreInvalidStyle: options.ignoreInvalidStyle || false,\n    passKeys: options.passKeys !== false,\n    passNode: options.passNode || false,\n    schema: options.space === 'svg' ? svg : html,\n    stylePropertyNameCase: options.stylePropertyNameCase || 'dom',\n    tableCellAlignToStyle: options.tableCellAlignToStyle !== false\n  }\n\n  const result = one(state, tree, undefined)\n\n  // JSX element.\n  if (result && typeof result !== 'string') {\n    return result\n  }\n\n  // Text node or something that turned into nothing.\n  return state.create(\n    tree,\n    state.Fragment,\n    {children: result || undefined},\n    undefined\n  )\n}\n\n/**\n * Transform a node.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Nodes} node\n *   Current node.\n * @param {string | undefined} key\n *   Key.\n * @returns {Child | undefined}\n *   Child, optional.\n */\nfunction one(state, node, key) {\n  if (node.type === 'element') {\n    return element(state, node, key)\n  }\n\n  if (node.type === 'mdxFlowExpression' || node.type === 'mdxTextExpression') {\n    return mdxExpression(state, node)\n  }\n\n  if (node.type === 'mdxJsxFlowElement' || node.type === 'mdxJsxTextElement') {\n    return mdxJsxElement(state, node, key)\n  }\n\n  if (node.type === 'mdxjsEsm') {\n    return mdxEsm(state, node)\n  }\n\n  if (node.type === 'root') {\n    return root(state, node, key)\n  }\n\n  if (node.type === 'text') {\n    return text(state, node)\n  }\n}\n\n/**\n * Handle element.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Element} node\n *   Current node.\n * @param {string | undefined} key\n *   Key.\n * @returns {Child | undefined}\n *   Child, optional.\n */\nfunction element(state, node, key) {\n  const parentSchema = state.schema\n  let schema = parentSchema\n\n  if (node.tagName.toLowerCase() === 'svg' && parentSchema.space === 'html') {\n    schema = svg\n    state.schema = schema\n  }\n\n  state.ancestors.push(node)\n\n  const type = findComponentFromName(state, node.tagName, false)\n  const props = createElementProps(state, node)\n  let children = createChildren(state, node)\n\n  if (tableElements.has(node.tagName)) {\n    children = children.filter(function (child) {\n      return typeof child === 'string' ? !whitespace(child) : true\n    })\n  }\n\n  addNode(state, props, type, node)\n  addChildren(props, children)\n\n  // Restore.\n  state.ancestors.pop()\n  state.schema = parentSchema\n\n  return state.create(node, type, props, key)\n}\n\n/**\n * Handle MDX expression.\n *\n * @param {State} state\n *   Info passed around.\n * @param {MdxFlowExpressionHast | MdxTextExpressionHast} node\n *   Current node.\n * @returns {Child | undefined}\n *   Child, optional.\n */\nfunction mdxExpression(state, node) {\n  if (node.data && node.data.estree && state.evaluater) {\n    const program = node.data.estree\n    const expression = program.body[0]\n    assert(expression.type === 'ExpressionStatement')\n\n    // Assume result is a child.\n    return /** @type {Child | undefined} */ (\n      state.evaluater.evaluateExpression(expression.expression)\n    )\n  }\n\n  crashEstree(state, node.position)\n}\n\n/**\n * Handle MDX ESM.\n *\n * @param {State} state\n *   Info passed around.\n * @param {MdxjsEsmHast} node\n *   Current node.\n * @returns {Child | undefined}\n *   Child, optional.\n */\nfunction mdxEsm(state, node) {\n  if (node.data && node.data.estree && state.evaluater) {\n    // Assume result is a child.\n    return /** @type {Child | undefined} */ (\n      state.evaluater.evaluateProgram(node.data.estree)\n    )\n  }\n\n  crashEstree(state, node.position)\n}\n\n/**\n * Handle MDX JSX.\n *\n * @param {State} state\n *   Info passed around.\n * @param {MdxJsxFlowElementHast | MdxJsxTextElementHast} node\n *   Current node.\n * @param {string | undefined} key\n *   Key.\n * @returns {Child | undefined}\n *   Child, optional.\n */\nfunction mdxJsxElement(state, node, key) {\n  const parentSchema = state.schema\n  let schema = parentSchema\n\n  if (node.name === 'svg' && parentSchema.space === 'html') {\n    schema = svg\n    state.schema = schema\n  }\n\n  state.ancestors.push(node)\n\n  const type =\n    node.name === null\n      ? state.Fragment\n      : findComponentFromName(state, node.name, true)\n  const props = createJsxElementProps(state, node)\n  const children = createChildren(state, node)\n\n  addNode(state, props, type, node)\n  addChildren(props, children)\n\n  // Restore.\n  state.ancestors.pop()\n  state.schema = parentSchema\n\n  return state.create(node, type, props, key)\n}\n\n/**\n * Handle root.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Root} node\n *   Current node.\n * @param {string | undefined} key\n *   Key.\n * @returns {Child | undefined}\n *   Child, optional.\n */\nfunction root(state, node, key) {\n  /** @type {Props} */\n  const props = {}\n\n  addChildren(props, createChildren(state, node))\n\n  return state.create(node, state.Fragment, props, key)\n}\n\n/**\n * Handle text.\n *\n * @param {State} _\n *   Info passed around.\n * @param {Text} node\n *   Current node.\n * @returns {Child | undefined}\n *   Child, optional.\n */\nfunction text(_, node) {\n  return node.value\n}\n\n/**\n * Add `node` to props.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Props} props\n *   Props.\n * @param {unknown} type\n *   Type.\n * @param {Element | MdxJsxFlowElementHast | MdxJsxTextElementHast} node\n *   Node.\n * @returns {undefined}\n *   Nothing.\n */\nfunction addNode(state, props, type, node) {\n  // If this is swapped out for a component:\n  if (typeof type !== 'string' && type !== state.Fragment && state.passNode) {\n    props.node = node\n  }\n}\n\n/**\n * Add children to props.\n *\n * @param {Props} props\n *   Props.\n * @param {Array<Child>} children\n *   Children.\n * @returns {undefined}\n *   Nothing.\n */\nfunction addChildren(props, children) {\n  if (children.length > 0) {\n    const value = children.length > 1 ? children : children[0]\n\n    if (value) {\n      props.children = value\n    }\n  }\n}\n\n/**\n * @param {string | undefined} _\n *   Path to file.\n * @param {Jsx} jsx\n *   Dynamic.\n * @param {Jsx} jsxs\n *   Static.\n * @returns {Create}\n *   Create a production element.\n */\nfunction productionCreate(_, jsx, jsxs) {\n  return create\n  /** @type {Create} */\n  function create(_, type, props, key) {\n    // Only an array when there are 2 or more children.\n    const isStaticChildren = Array.isArray(props.children)\n    const fn = isStaticChildren ? jsxs : jsx\n    return key ? fn(type, props, key) : fn(type, props)\n  }\n}\n\n/**\n * @param {string | undefined} filePath\n *   Path to file.\n * @param {JsxDev} jsxDEV\n *   Development.\n * @returns {Create}\n *   Create a development element.\n */\nfunction developmentCreate(filePath, jsxDEV) {\n  return create\n  /** @type {Create} */\n  function create(node, type, props, key) {\n    // Only an array when there are 2 or more children.\n    const isStaticChildren = Array.isArray(props.children)\n    const point = pointStart(node)\n    return jsxDEV(\n      type,\n      props,\n      key,\n      isStaticChildren,\n      {\n        columnNumber: point ? point.column - 1 : undefined,\n        fileName: filePath,\n        lineNumber: point ? point.line : undefined\n      },\n      undefined\n    )\n  }\n}\n\n/**\n * Create props from an element.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Element} node\n *   Current element.\n * @returns {Props}\n *   Props.\n */\nfunction createElementProps(state, node) {\n  /** @type {Props} */\n  const props = {}\n  /** @type {string | undefined} */\n  let alignValue\n  /** @type {string} */\n  let prop\n\n  for (prop in node.properties) {\n    if (prop !== 'children' && own.call(node.properties, prop)) {\n      const result = createProperty(state, prop, node.properties[prop])\n\n      if (result) {\n        const [key, value] = result\n\n        if (\n          state.tableCellAlignToStyle &&\n          key === 'align' &&\n          typeof value === 'string' &&\n          tableCellElement.has(node.tagName)\n        ) {\n          alignValue = value\n        } else {\n          props[key] = value\n        }\n      }\n    }\n  }\n\n  if (alignValue) {\n    // Assume style is an object.\n    const style = /** @type {Style} */ (props.style || (props.style = {}))\n    style[state.stylePropertyNameCase === 'css' ? 'text-align' : 'textAlign'] =\n      alignValue\n  }\n\n  return props\n}\n\n/**\n * Create props from a JSX element.\n *\n * @param {State} state\n *   Info passed around.\n * @param {MdxJsxFlowElementHast | MdxJsxTextElementHast} node\n *   Current JSX element.\n * @returns {Props}\n *   Props.\n */\nfunction createJsxElementProps(state, node) {\n  /** @type {Props} */\n  const props = {}\n\n  for (const attribute of node.attributes) {\n    if (attribute.type === 'mdxJsxExpressionAttribute') {\n      if (attribute.data && attribute.data.estree && state.evaluater) {\n        const program = attribute.data.estree\n        const expression = program.body[0]\n        assert(expression.type === 'ExpressionStatement')\n        const objectExpression = expression.expression\n        assert(objectExpression.type === 'ObjectExpression')\n        const property = objectExpression.properties[0]\n        assert(property.type === 'SpreadElement')\n\n        Object.assign(\n          props,\n          state.evaluater.evaluateExpression(property.argument)\n        )\n      } else {\n        crashEstree(state, node.position)\n      }\n    } else {\n      // For JSX, the author is responsible of passing in the correct values.\n      const name = attribute.name\n      /** @type {unknown} */\n      let value\n\n      if (attribute.value && typeof attribute.value === 'object') {\n        if (\n          attribute.value.data &&\n          attribute.value.data.estree &&\n          state.evaluater\n        ) {\n          const program = attribute.value.data.estree\n          const expression = program.body[0]\n          assert(expression.type === 'ExpressionStatement')\n          value = state.evaluater.evaluateExpression(expression.expression)\n        } else {\n          crashEstree(state, node.position)\n        }\n      } else {\n        value = attribute.value === null ? true : attribute.value\n      }\n\n      // Assume a prop.\n      props[name] = /** @type {Props[keyof Props]} */ (value)\n    }\n  }\n\n  return props\n}\n\n/**\n * Create children.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Parents} node\n *   Current element.\n * @returns {Array<Child>}\n *   Children.\n */\nfunction createChildren(state, node) {\n  /** @type {Array<Child>} */\n  const children = []\n  let index = -1\n  /** @type {Map<string, number>} */\n  // Note: test this when Solid doesn\u2019t want to merge my upcoming PR.\n  /* c8 ignore next */\n  const countsByName = state.passKeys ? new Map() : emptyMap\n\n  while (++index < node.children.length) {\n    const child = node.children[index]\n    /** @type {string | undefined} */\n    let key\n\n    if (state.passKeys) {\n      const name =\n        child.type === 'element'\n          ? child.tagName\n          : child.type === 'mdxJsxFlowElement' ||\n              child.type === 'mdxJsxTextElement'\n            ? child.name\n            : undefined\n\n      if (name) {\n        const count = countsByName.get(name) || 0\n        key = name + '-' + count\n        countsByName.set(name, count + 1)\n      }\n    }\n\n    const result = one(state, child, key)\n    if (result !== undefined) children.push(result)\n  }\n\n  return children\n}\n\n/**\n * Handle a property.\n *\n * @param {State} state\n *   Info passed around.\n * @param {string} prop\n *   Key.\n * @param {Array<number | string> | boolean | number | string | null | undefined} value\n *   hast property value.\n * @returns {Field | undefined}\n *   Field for runtime, optional.\n */\nfunction createProperty(state, prop, value) {\n  const info = find(state.schema, prop)\n\n  // Ignore nullish and `NaN` values.\n  if (\n    value === null ||\n    value === undefined ||\n    (typeof value === 'number' && Number.isNaN(value))\n  ) {\n    return\n  }\n\n  if (Array.isArray(value)) {\n    // Accept `array`.\n    // Most props are space-separated.\n    value = info.commaSeparated ? commas(value) : spaces(value)\n  }\n\n  // React only accepts `style` as object.\n  if (info.property === 'style') {\n    let styleObject =\n      typeof value === 'object' ? value : parseStyle(state, String(value))\n\n    if (state.stylePropertyNameCase === 'css') {\n      styleObject = transformStylesToCssCasing(styleObject)\n    }\n\n    return ['style', styleObject]\n  }\n\n  return [\n    state.elementAttributeNameCase === 'react' && info.space\n      ? hastToReact[info.property] || info.property\n      : info.attribute,\n    value\n  ]\n}\n\n/**\n * Parse a CSS declaration to an object.\n *\n * @param {State} state\n *   Info passed around.\n * @param {string} value\n *   CSS declarations.\n * @returns {Style}\n *   Properties.\n * @throws\n *   Throws `VFileMessage` when CSS cannot be parsed.\n */\nfunction parseStyle(state, value) {\n  /** @type {Style} */\n  const result = {}\n\n  try {\n    styleToObject(value, replacer)\n  } catch (error) {\n    if (!state.ignoreInvalidStyle) {\n      const cause = /** @type {Error} */ (error)\n      const message = new VFileMessage('Cannot parse `style` attribute', {\n        ancestors: state.ancestors,\n        cause,\n        ruleId: 'style',\n        source: 'hast-util-to-jsx-runtime'\n      })\n      message.file = state.filePath || undefined\n      message.url = docs + '#cannot-parse-style-attribute'\n\n      throw message\n    }\n  }\n\n  return result\n\n  /**\n   * Add a CSS property (normal, so with dashes) to `result` as a DOM CSS\n   * property.\n   *\n   * @param {string} name\n   *   Key.\n   * @param {string} value\n   *   Value\n   * @returns {undefined}\n   *   Nothing.\n   */\n  function replacer(name, value) {\n    let key = name\n\n    if (key.slice(0, 2) !== '--') {\n      if (key.slice(0, 4) === '-ms-') key = 'ms-' + key.slice(4)\n      key = key.replace(dashSomething, toCamel)\n    }\n\n    result[key] = value\n  }\n}\n\n/**\n * Create a JSX name from a string.\n *\n * @param {State} state\n *   To do.\n * @param {string} name\n *   Name.\n * @param {boolean} allowExpression\n *   Allow member expressions and identifiers.\n * @returns {unknown}\n *   To do.\n */\nfunction findComponentFromName(state, name, allowExpression) {\n  /** @type {Identifier | Literal | MemberExpression} */\n  let result\n\n  if (!allowExpression) {\n    result = {type: 'Literal', value: name}\n  } else if (name.includes('.')) {\n    const identifiers = name.split('.')\n    let index = -1\n    /** @type {Identifier | Literal | MemberExpression | undefined} */\n    let node\n\n    while (++index < identifiers.length) {\n      /** @type {Identifier | Literal} */\n      const prop = isIdentifierName(identifiers[index])\n        ? {type: 'Identifier', name: identifiers[index]}\n        : {type: 'Literal', value: identifiers[index]}\n      node = node\n        ? {\n            type: 'MemberExpression',\n            object: node,\n            property: prop,\n            computed: Boolean(index && prop.type === 'Literal'),\n            optional: false\n          }\n        : prop\n    }\n\n    assert(node, 'always a result')\n    result = node\n  } else {\n    result =\n      isIdentifierName(name) && !/^[a-z]/.test(name)\n        ? {type: 'Identifier', name}\n        : {type: 'Literal', value: name}\n  }\n\n  // Only literals can be passed in `components` currently.\n  // No identifiers / member expressions.\n  if (result.type === 'Literal') {\n    const name = /** @type {keyof JSX.IntrinsicElements} */ (result.value)\n\n    return own.call(state.components, name) ? state.components[name] : name\n  }\n\n  // Assume component.\n  if (state.evaluater) {\n    return state.evaluater.evaluateExpression(result)\n  }\n\n  crashEstree(state)\n}\n\n/**\n * @param {State} state\n * @param {Position | undefined} [place]\n * @returns {never}\n */\nfunction crashEstree(state, place) {\n  const message = new VFileMessage(\n    'Cannot handle MDX estrees without `createEvaluater`',\n    {\n      ancestors: state.ancestors,\n      place,\n      ruleId: 'mdx-estree',\n      source: 'hast-util-to-jsx-runtime'\n    }\n  )\n  message.file = state.filePath || undefined\n  message.url = docs + '#cannot-handle-mdx-estrees-without-createevaluater'\n\n  throw message\n}\n\n/**\n * Transform a DOM casing style object to a CSS casing style object.\n *\n * @param {Style} domCasing\n * @returns {Style}\n */\nfunction transformStylesToCssCasing(domCasing) {\n  /** @type {Style} */\n  const cssCasing = {}\n  /** @type {string} */\n  let from\n\n  for (from in domCasing) {\n    if (own.call(domCasing, from)) {\n      cssCasing[transformStyleToCssCasing(from)] = domCasing[from]\n    }\n  }\n\n  return cssCasing\n}\n\n/**\n * Transform a DOM casing style field to a CSS casing style field.\n *\n * @param {string} from\n * @returns {string}\n */\nfunction transformStyleToCssCasing(from) {\n  let to = from.replace(cap, toDash)\n  // Handle `ms-xxx` -> `-ms-xxx`.\n  if (to.slice(0, 3) === 'ms-') to = '-' + to\n  return to\n}\n\n/**\n * Make `$1` capitalized.\n *\n * @param {string} _\n *   Whatever.\n * @param {string} $1\n *   Single ASCII alphabetical.\n * @returns {string}\n *   Capitalized `$1`.\n */\nfunction toCamel(_, $1) {\n  return $1.toUpperCase()\n}\n\n/**\n * Make `$0` dash cased.\n *\n * @param {string} $0\n *   Capitalized ASCII leter.\n * @returns {string}\n *   Dash and lower letter.\n */\nfunction toDash($0) {\n  return '-' + $0.toLowerCase()\n}\n", "/**\n * HTML URL properties.\n *\n * Each key is a property name and each value is a list of tag names it applies\n * to or `null` if it applies to all elements.\n *\n * @type {Record<string, Array<string> | null>}\n */\nexport const urlAttributes = {\n  action: ['form'],\n  cite: ['blockquote', 'del', 'ins', 'q'],\n  data: ['object'],\n  formAction: ['button', 'input'],\n  href: ['a', 'area', 'base', 'link'],\n  icon: ['menuitem'],\n  itemId: null,\n  manifest: ['html'],\n  ping: ['a', 'area'],\n  poster: ['video'],\n  src: [\n    'audio',\n    'embed',\n    'iframe',\n    'img',\n    'input',\n    'script',\n    'source',\n    'track',\n    'video'\n  ]\n}\n", "/**\n * @import {Element, ElementContent, Nodes, Parents, Root} from 'hast'\n * @import {ComponentProps, ElementType, ReactElement} from 'react'\n * @import {Options as RemarkRehypeOptions} from 'remark-rehype'\n * @import {BuildVisitor} from 'unist-util-visit'\n * @import {PluggableList} from 'unified'\n */\n\n/**\n * @callback AllowElement\n *   Filter elements.\n * @param {Readonly<Element>} element\n *   Element to check.\n * @param {number} index\n *   Index of `element` in `parent`.\n * @param {Readonly<Parents> | undefined} parent\n *   Parent of `element`.\n * @returns {boolean | null | undefined}\n *   Whether to allow `element` (default: `false`).\n */\n\n/**\n * @typedef ExtraProps\n *   Extra fields we pass.\n * @property {Element | undefined} [node]\n *   passed when `passNode` is on.\n */\n\n/**\n * @typedef {{\n *   [Key in Extract<ElementType, string>]?: ElementType<ComponentProps<Key> & ExtraProps>\n * }} Components\n *   Map tag names to components.\n */\n\n/**\n * @typedef Deprecation\n *   Deprecation.\n * @property {string} from\n *   Old field.\n * @property {string} id\n *   ID in readme.\n * @property {keyof Options} [to]\n *   New field.\n */\n\n/**\n * @typedef Options\n *   Configuration.\n * @property {AllowElement | null | undefined} [allowElement]\n *   Filter elements (optional);\n *   `allowedElements` / `disallowedElements` is used first.\n * @property {ReadonlyArray<string> | null | undefined} [allowedElements]\n *   Tag names to allow (default: all tag names);\n *   cannot combine w/ `disallowedElements`.\n * @property {string | null | undefined} [children]\n *   Markdown.\n * @property {string | null | undefined} [className]\n *   Wrap in a `div` with this class name.\n * @property {Components | null | undefined} [components]\n *   Map tag names to components.\n * @property {ReadonlyArray<string> | null | undefined} [disallowedElements]\n *   Tag names to disallow (default: `[]`);\n *   cannot combine w/ `allowedElements`.\n * @property {PluggableList | null | undefined} [rehypePlugins]\n *   List of rehype plugins to use.\n * @property {PluggableList | null | undefined} [remarkPlugins]\n *   List of remark plugins to use.\n * @property {Readonly<RemarkRehypeOptions> | null | undefined} [remarkRehypeOptions]\n *   Options to pass through to `remark-rehype`.\n * @property {boolean | null | undefined} [skipHtml=false]\n *   Ignore HTML in markdown completely (default: `false`).\n * @property {boolean | null | undefined} [unwrapDisallowed=false]\n *   Extract (unwrap) what\u2019s in disallowed elements (default: `false`);\n *   normally when say `strong` is not allowed, it and it\u2019s children are dropped,\n *   with `unwrapDisallowed` the element itself is replaced by its children.\n * @property {UrlTransform | null | undefined} [urlTransform]\n *   Change URLs (default: `defaultUrlTransform`)\n */\n\n/**\n * @callback UrlTransform\n *   Transform all URLs.\n * @param {string} url\n *   URL.\n * @param {string} key\n *   Property name (example: `'href'`).\n * @param {Readonly<Element>} node\n *   Node.\n * @returns {string | null | undefined}\n *   Transformed URL (optional).\n */\n\nimport {unreachable} from 'devlop'\nimport {toJsxRuntime} from 'hast-util-to-jsx-runtime'\nimport {urlAttributes} from 'html-url-attributes'\nimport {Fragment, jsx, jsxs} from 'react/jsx-runtime'\nimport remarkParse from 'remark-parse'\nimport remarkRehype from 'remark-rehype'\nimport {unified} from 'unified'\nimport {visit} from 'unist-util-visit'\nimport {VFile} from 'vfile'\n\nconst changelog =\n  'https://github.com/remarkjs/react-markdown/blob/main/changelog.md'\n\n/** @type {PluggableList} */\nconst emptyPlugins = []\n/** @type {Readonly<RemarkRehypeOptions>} */\nconst emptyRemarkRehypeOptions = {allowDangerousHtml: true}\nconst safeProtocol = /^(https?|ircs?|mailto|xmpp)$/i\n\n// Mutable because we `delete` any time it\u2019s used and a message is sent.\n/** @type {ReadonlyArray<Readonly<Deprecation>>} */\nconst deprecations = [\n  {from: 'astPlugins', id: 'remove-buggy-html-in-markdown-parser'},\n  {from: 'allowDangerousHtml', id: 'remove-buggy-html-in-markdown-parser'},\n  {\n    from: 'allowNode',\n    id: 'replace-allownode-allowedtypes-and-disallowedtypes',\n    to: 'allowElement'\n  },\n  {\n    from: 'allowedTypes',\n    id: 'replace-allownode-allowedtypes-and-disallowedtypes',\n    to: 'allowedElements'\n  },\n  {\n    from: 'disallowedTypes',\n    id: 'replace-allownode-allowedtypes-and-disallowedtypes',\n    to: 'disallowedElements'\n  },\n  {from: 'escapeHtml', id: 'remove-buggy-html-in-markdown-parser'},\n  {from: 'includeElementIndex', id: '#remove-includeelementindex'},\n  {\n    from: 'includeNodeIndex',\n    id: 'change-includenodeindex-to-includeelementindex'\n  },\n  {from: 'linkTarget', id: 'remove-linktarget'},\n  {from: 'plugins', id: 'change-plugins-to-remarkplugins', to: 'remarkPlugins'},\n  {from: 'rawSourcePos', id: '#remove-rawsourcepos'},\n  {from: 'renderers', id: 'change-renderers-to-components', to: 'components'},\n  {from: 'source', id: 'change-source-to-children', to: 'children'},\n  {from: 'sourcePos', id: '#remove-sourcepos'},\n  {from: 'transformImageUri', id: '#add-urltransform', to: 'urlTransform'},\n  {from: 'transformLinkUri', id: '#add-urltransform', to: 'urlTransform'}\n]\n\n/**\n * Component to render markdown.\n *\n * @param {Readonly<Options>} options\n *   Props.\n * @returns {ReactElement}\n *   React element.\n */\nexport function Markdown(options) {\n  const allowedElements = options.allowedElements\n  const allowElement = options.allowElement\n  const children = options.children || ''\n  const className = options.className\n  const components = options.components\n  const disallowedElements = options.disallowedElements\n  const rehypePlugins = options.rehypePlugins || emptyPlugins\n  const remarkPlugins = options.remarkPlugins || emptyPlugins\n  const remarkRehypeOptions = options.remarkRehypeOptions\n    ? {...options.remarkRehypeOptions, ...emptyRemarkRehypeOptions}\n    : emptyRemarkRehypeOptions\n  const skipHtml = options.skipHtml\n  const unwrapDisallowed = options.unwrapDisallowed\n  const urlTransform = options.urlTransform || defaultUrlTransform\n\n  const processor = unified()\n    .use(remarkParse)\n    .use(remarkPlugins)\n    .use(remarkRehype, remarkRehypeOptions)\n    .use(rehypePlugins)\n\n  const file = new VFile()\n\n  if (typeof children === 'string') {\n    file.value = children\n  } else {\n    unreachable(\n      'Unexpected value `' +\n        children +\n        '` for `children` prop, expected `string`'\n    )\n  }\n\n  if (allowedElements && disallowedElements) {\n    unreachable(\n      'Unexpected combined `allowedElements` and `disallowedElements`, expected one or the other'\n    )\n  }\n\n  for (const deprecation of deprecations) {\n    if (Object.hasOwn(options, deprecation.from)) {\n      unreachable(\n        'Unexpected `' +\n          deprecation.from +\n          '` prop, ' +\n          (deprecation.to\n            ? 'use `' + deprecation.to + '` instead'\n            : 'remove it') +\n          ' (see <' +\n          changelog +\n          '#' +\n          deprecation.id +\n          '> for more info)'\n      )\n    }\n  }\n\n  const mdastTree = processor.parse(file)\n  /** @type {Nodes} */\n  let hastTree = processor.runSync(mdastTree, file)\n\n  // Wrap in `div` if there\u2019s a class name.\n  if (className) {\n    hastTree = {\n      type: 'element',\n      tagName: 'div',\n      properties: {className},\n      // Assume no doctypes.\n      children: /** @type {Array<ElementContent>} */ (\n        hastTree.type === 'root' ? hastTree.children : [hastTree]\n      )\n    }\n  }\n\n  visit(hastTree, transform)\n\n  return toJsxRuntime(hastTree, {\n    Fragment,\n    // @ts-expect-error\n    // React components are allowed to return numbers,\n    // but not according to the types in hast-util-to-jsx-runtime\n    components,\n    ignoreInvalidStyle: true,\n    jsx,\n    jsxs,\n    passKeys: true,\n    passNode: true\n  })\n\n  /** @type {BuildVisitor<Root>} */\n  function transform(node, index, parent) {\n    if (node.type === 'raw' && parent && typeof index === 'number') {\n      if (skipHtml) {\n        parent.children.splice(index, 1)\n      } else {\n        parent.children[index] = {type: 'text', value: node.value}\n      }\n\n      return index\n    }\n\n    if (node.type === 'element') {\n      /** @type {string} */\n      let key\n\n      for (key in urlAttributes) {\n        if (\n          Object.hasOwn(urlAttributes, key) &&\n          Object.hasOwn(node.properties, key)\n        ) {\n          const value = node.properties[key]\n          const test = urlAttributes[key]\n          if (test === null || test.includes(node.tagName)) {\n            node.properties[key] = urlTransform(String(value || ''), key, node)\n          }\n        }\n      }\n    }\n\n    if (node.type === 'element') {\n      let remove = allowedElements\n        ? !allowedElements.includes(node.tagName)\n        : disallowedElements\n          ? disallowedElements.includes(node.tagName)\n          : false\n\n      if (!remove && allowElement && typeof index === 'number') {\n        remove = !allowElement(node, index, parent)\n      }\n\n      if (remove && parent && typeof index === 'number') {\n        if (unwrapDisallowed && node.children) {\n          parent.children.splice(index, 1, ...node.children)\n        } else {\n          parent.children.splice(index, 1)\n        }\n\n        return index\n      }\n    }\n  }\n}\n\n/**\n * Make a URL safe.\n *\n * @satisfies {UrlTransform}\n * @param {string} value\n *   URL.\n * @returns {string}\n *   Safe URL.\n */\nexport function defaultUrlTransform(value) {\n  // Same as:\n  // <https://github.com/micromark/micromark/blob/929275e/packages/micromark-util-sanitize-uri/dev/index.js#L34>\n  // But without the `encode` part.\n  const colon = value.indexOf(':')\n  const questionMark = value.indexOf('?')\n  const numberSign = value.indexOf('#')\n  const slash = value.indexOf('/')\n\n  if (\n    // If there is no protocol, it\u2019s relative.\n    colon === -1 ||\n    // If the first colon is after a `?`, `#`, or `/`, it\u2019s not a protocol.\n    (slash !== -1 && colon > slash) ||\n    (questionMark !== -1 && colon > questionMark) ||\n    (numberSign !== -1 && colon > numberSign) ||\n    // It is a protocol, it should be allowed.\n    safeProtocol.test(value.slice(0, colon))\n  ) {\n    return value\n  }\n\n  return ''\n}\n", "/**\n * @typedef {import('mdast').Nodes} Nodes\n *\n * @typedef Options\n *   Configuration (optional).\n * @property {boolean | null | undefined} [includeImageAlt=true]\n *   Whether to use `alt` for `image`s (default: `true`).\n * @property {boolean | null | undefined} [includeHtml=true]\n *   Whether to use `value` of HTML (default: `true`).\n */\n\n/** @type {Options} */\nconst emptyOptions = {}\n\n/**\n * Get the text content of a node or list of nodes.\n *\n * Prefers the node\u2019s plain-text fields, otherwise serializes its children,\n * and if the given value is an array, serialize the nodes in it.\n *\n * @param {unknown} [value]\n *   Thing to serialize, typically `Node`.\n * @param {Options | null | undefined} [options]\n *   Configuration (optional).\n * @returns {string}\n *   Serialized `value`.\n */\nexport function toString(value, options) {\n  const settings = options || emptyOptions\n  const includeImageAlt =\n    typeof settings.includeImageAlt === 'boolean'\n      ? settings.includeImageAlt\n      : true\n  const includeHtml =\n    typeof settings.includeHtml === 'boolean' ? settings.includeHtml : true\n\n  return one(value, includeImageAlt, includeHtml)\n}\n\n/**\n * One node or several nodes.\n *\n * @param {unknown} value\n *   Thing to serialize.\n * @param {boolean} includeImageAlt\n *   Include image `alt`s.\n * @param {boolean} includeHtml\n *   Include HTML.\n * @returns {string}\n *   Serialized node.\n */\nfunction one(value, includeImageAlt, includeHtml) {\n  if (node(value)) {\n    if ('value' in value) {\n      return value.type === 'html' && !includeHtml ? '' : value.value\n    }\n\n    if (includeImageAlt && 'alt' in value && value.alt) {\n      return value.alt\n    }\n\n    if ('children' in value) {\n      return all(value.children, includeImageAlt, includeHtml)\n    }\n  }\n\n  if (Array.isArray(value)) {\n    return all(value, includeImageAlt, includeHtml)\n  }\n\n  return ''\n}\n\n/**\n * Serialize a list of nodes.\n *\n * @param {Array<unknown>} values\n *   Thing to serialize.\n * @param {boolean} includeImageAlt\n *   Include image `alt`s.\n * @param {boolean} includeHtml\n *   Include HTML.\n * @returns {string}\n *   Serialized nodes.\n */\nfunction all(values, includeImageAlt, includeHtml) {\n  /** @type {Array<string>} */\n  const result = []\n  let index = -1\n\n  while (++index < values.length) {\n    result[index] = one(values[index], includeImageAlt, includeHtml)\n  }\n\n  return result.join('')\n}\n\n/**\n * Check if `value` looks like a node.\n *\n * @param {unknown} value\n *   Thing.\n * @returns {value is Nodes}\n *   Whether `value` is a node.\n */\nfunction node(value) {\n  return Boolean(value && typeof value === 'object')\n}\n", "/**\n * Map of named character references.\n *\n * @type {Record<string, string>}\n */\nexport const characterEntities = {\n  AElig: '\u00C6',\n  AMP: '&',\n  Aacute: '\u00C1',\n  Abreve: '\u0102',\n  Acirc: '\u00C2',\n  Acy: '\u0410',\n  Afr: '\uD835\uDD04',\n  Agrave: '\u00C0',\n  Alpha: '\u0391',\n  Amacr: '\u0100',\n  And: '\u2A53',\n  Aogon: '\u0104',\n  Aopf: '\uD835\uDD38',\n  ApplyFunction: '\u2061',\n  Aring: '\u00C5',\n  Ascr: '\uD835\uDC9C',\n  Assign: '\u2254',\n  Atilde: '\u00C3',\n  Auml: '\u00C4',\n  Backslash: '\u2216',\n  Barv: '\u2AE7',\n  Barwed: '\u2306',\n  Bcy: '\u0411',\n  Because: '\u2235',\n  Bernoullis: '\u212C',\n  Beta: '\u0392',\n  Bfr: '\uD835\uDD05',\n  Bopf: '\uD835\uDD39',\n  Breve: '\u02D8',\n  Bscr: '\u212C',\n  Bumpeq: '\u224E',\n  CHcy: '\u0427',\n  COPY: '\u00A9',\n  Cacute: '\u0106',\n  Cap: '\u22D2',\n  CapitalDifferentialD: '\u2145',\n  Cayleys: '\u212D',\n  Ccaron: '\u010C',\n  Ccedil: '\u00C7',\n  Ccirc: '\u0108',\n  Cconint: '\u2230',\n  Cdot: '\u010A',\n  Cedilla: '\u00B8',\n  CenterDot: '\u00B7',\n  Cfr: '\u212D',\n  Chi: '\u03A7',\n  CircleDot: '\u2299',\n  CircleMinus: '\u2296',\n  CirclePlus: '\u2295',\n  CircleTimes: '\u2297',\n  ClockwiseContourIntegral: '\u2232',\n  CloseCurlyDoubleQuote: '\u201D',\n  CloseCurlyQuote: '\u2019',\n  Colon: '\u2237',\n  Colone: '\u2A74',\n  Congruent: '\u2261',\n  Conint: '\u222F',\n  ContourIntegral: '\u222E',\n  Copf: '\u2102',\n  Coproduct: '\u2210',\n  CounterClockwiseContourIntegral: '\u2233',\n  Cross: '\u2A2F',\n  Cscr: '\uD835\uDC9E',\n  Cup: '\u22D3',\n  CupCap: '\u224D',\n  DD: '\u2145',\n  DDotrahd: '\u2911',\n  DJcy: '\u0402',\n  DScy: '\u0405',\n  DZcy: '\u040F',\n  Dagger: '\u2021',\n  Darr: '\u21A1',\n  Dashv: '\u2AE4',\n  Dcaron: '\u010E',\n  Dcy: '\u0414',\n  Del: '\u2207',\n  Delta: '\u0394',\n  Dfr: '\uD835\uDD07',\n  DiacriticalAcute: '\u00B4',\n  DiacriticalDot: '\u02D9',\n  DiacriticalDoubleAcute: '\u02DD',\n  DiacriticalGrave: '`',\n  DiacriticalTilde: '\u02DC',\n  Diamond: '\u22C4',\n  DifferentialD: '\u2146',\n  Dopf: '\uD835\uDD3B',\n  Dot: '\u00A8',\n  DotDot: '\u20DC',\n  DotEqual: '\u2250',\n  DoubleContourIntegral: '\u222F',\n  DoubleDot: '\u00A8',\n  DoubleDownArrow: '\u21D3',\n  DoubleLeftArrow: '\u21D0',\n  DoubleLeftRightArrow: '\u21D4',\n  DoubleLeftTee: '\u2AE4',\n  DoubleLongLeftArrow: '\u27F8',\n  DoubleLongLeftRightArrow: '\u27FA',\n  DoubleLongRightArrow: '\u27F9',\n  DoubleRightArrow: '\u21D2',\n  DoubleRightTee: '\u22A8',\n  DoubleUpArrow: '\u21D1',\n  DoubleUpDownArrow: '\u21D5',\n  DoubleVerticalBar: '\u2225',\n  DownArrow: '\u2193',\n  DownArrowBar: '\u2913',\n  DownArrowUpArrow: '\u21F5',\n  DownBreve: '\u0311',\n  DownLeftRightVector: '\u2950',\n  DownLeftTeeVector: '\u295E',\n  DownLeftVector: '\u21BD',\n  DownLeftVectorBar: '\u2956',\n  DownRightTeeVector: '\u295F',\n  DownRightVector: '\u21C1',\n  DownRightVectorBar: '\u2957',\n  DownTee: '\u22A4',\n  DownTeeArrow: '\u21A7',\n  Downarrow: '\u21D3',\n  Dscr: '\uD835\uDC9F',\n  Dstrok: '\u0110',\n  ENG: '\u014A',\n  ETH: '\u00D0',\n  Eacute: '\u00C9',\n  Ecaron: '\u011A',\n  Ecirc: '\u00CA',\n  Ecy: '\u042D',\n  Edot: '\u0116',\n  Efr: '\uD835\uDD08',\n  Egrave: '\u00C8',\n  Element: '\u2208',\n  Emacr: '\u0112',\n  EmptySmallSquare: '\u25FB',\n  EmptyVerySmallSquare: '\u25AB',\n  Eogon: '\u0118',\n  Eopf: '\uD835\uDD3C',\n  Epsilon: '\u0395',\n  Equal: '\u2A75',\n  EqualTilde: '\u2242',\n  Equilibrium: '\u21CC',\n  Escr: '\u2130',\n  Esim: '\u2A73',\n  Eta: '\u0397',\n  Euml: '\u00CB',\n  Exists: '\u2203',\n  ExponentialE: '\u2147',\n  Fcy: '\u0424',\n  Ffr: '\uD835\uDD09',\n  FilledSmallSquare: '\u25FC',\n  FilledVerySmallSquare: '\u25AA',\n  Fopf: '\uD835\uDD3D',\n  ForAll: '\u2200',\n  Fouriertrf: '\u2131',\n  Fscr: '\u2131',\n  GJcy: '\u0403',\n  GT: '>',\n  Gamma: '\u0393',\n  Gammad: '\u03DC',\n  Gbreve: '\u011E',\n  Gcedil: '\u0122',\n  Gcirc: '\u011C',\n  Gcy: '\u0413',\n  Gdot: '\u0120',\n  Gfr: '\uD835\uDD0A',\n  Gg: '\u22D9',\n  Gopf: '\uD835\uDD3E',\n  GreaterEqual: '\u2265',\n  GreaterEqualLess: '\u22DB',\n  GreaterFullEqual: '\u2267',\n  GreaterGreater: '\u2AA2',\n  GreaterLess: '\u2277',\n  GreaterSlantEqual: '\u2A7E',\n  GreaterTilde: '\u2273',\n  Gscr: '\uD835\uDCA2',\n  Gt: '\u226B',\n  HARDcy: '\u042A',\n  Hacek: '\u02C7',\n  Hat: '^',\n  Hcirc: '\u0124',\n  Hfr: '\u210C',\n  HilbertSpace: '\u210B',\n  Hopf: '\u210D',\n  HorizontalLine: '\u2500',\n  Hscr: '\u210B',\n  Hstrok: '\u0126',\n  HumpDownHump: '\u224E',\n  HumpEqual: '\u224F',\n  IEcy: '\u0415',\n  IJlig: '\u0132',\n  IOcy: '\u0401',\n  Iacute: '\u00CD',\n  Icirc: '\u00CE',\n  Icy: '\u0418',\n  Idot: '\u0130',\n  Ifr: '\u2111',\n  Igrave: '\u00CC',\n  Im: '\u2111',\n  Imacr: '\u012A',\n  ImaginaryI: '\u2148',\n  Implies: '\u21D2',\n  Int: '\u222C',\n  Integral: '\u222B',\n  Intersection: '\u22C2',\n  InvisibleComma: '\u2063',\n  InvisibleTimes: '\u2062',\n  Iogon: '\u012E',\n  Iopf: '\uD835\uDD40',\n  Iota: '\u0399',\n  Iscr: '\u2110',\n  Itilde: '\u0128',\n  Iukcy: '\u0406',\n  Iuml: '\u00CF',\n  Jcirc: '\u0134',\n  Jcy: '\u0419',\n  Jfr: '\uD835\uDD0D',\n  Jopf: '\uD835\uDD41',\n  Jscr: '\uD835\uDCA5',\n  Jsercy: '\u0408',\n  Jukcy: '\u0404',\n  KHcy: '\u0425',\n  KJcy: '\u040C',\n  Kappa: '\u039A',\n  Kcedil: '\u0136',\n  Kcy: '\u041A',\n  Kfr: '\uD835\uDD0E',\n  Kopf: '\uD835\uDD42',\n  Kscr: '\uD835\uDCA6',\n  LJcy: '\u0409',\n  LT: '<',\n  Lacute: '\u0139',\n  Lambda: '\u039B',\n  Lang: '\u27EA',\n  Laplacetrf: '\u2112',\n  Larr: '\u219E',\n  Lcaron: '\u013D',\n  Lcedil: '\u013B',\n  Lcy: '\u041B',\n  LeftAngleBracket: '\u27E8',\n  LeftArrow: '\u2190',\n  LeftArrowBar: '\u21E4',\n  LeftArrowRightArrow: '\u21C6',\n  LeftCeiling: '\u2308',\n  LeftDoubleBracket: '\u27E6',\n  LeftDownTeeVector: '\u2961',\n  LeftDownVector: '\u21C3',\n  LeftDownVectorBar: '\u2959',\n  LeftFloor: '\u230A',\n  LeftRightArrow: '\u2194',\n  LeftRightVector: '\u294E',\n  LeftTee: '\u22A3',\n  LeftTeeArrow: '\u21A4',\n  LeftTeeVector: '\u295A',\n  LeftTriangle: '\u22B2',\n  LeftTriangleBar: '\u29CF',\n  LeftTriangleEqual: '\u22B4',\n  LeftUpDownVector: '\u2951',\n  LeftUpTeeVector: '\u2960',\n  LeftUpVector: '\u21BF',\n  LeftUpVectorBar: '\u2958',\n  LeftVector: '\u21BC',\n  LeftVectorBar: '\u2952',\n  Leftarrow: '\u21D0',\n  Leftrightarrow: '\u21D4',\n  LessEqualGreater: '\u22DA',\n  LessFullEqual: '\u2266',\n  LessGreater: '\u2276',\n  LessLess: '\u2AA1',\n  LessSlantEqual: '\u2A7D',\n  LessTilde: '\u2272',\n  Lfr: '\uD835\uDD0F',\n  Ll: '\u22D8',\n  Lleftarrow: '\u21DA',\n  Lmidot: '\u013F',\n  LongLeftArrow: '\u27F5',\n  LongLeftRightArrow: '\u27F7',\n  LongRightArrow: '\u27F6',\n  Longleftarrow: '\u27F8',\n  Longleftrightarrow: '\u27FA',\n  Longrightarrow: '\u27F9',\n  Lopf: '\uD835\uDD43',\n  LowerLeftArrow: '\u2199',\n  LowerRightArrow: '\u2198',\n  Lscr: '\u2112',\n  Lsh: '\u21B0',\n  Lstrok: '\u0141',\n  Lt: '\u226A',\n  Map: '\u2905',\n  Mcy: '\u041C',\n  MediumSpace: '\u205F',\n  Mellintrf: '\u2133',\n  Mfr: '\uD835\uDD10',\n  MinusPlus: '\u2213',\n  Mopf: '\uD835\uDD44',\n  Mscr: '\u2133',\n  Mu: '\u039C',\n  NJcy: '\u040A',\n  Nacute: '\u0143',\n  Ncaron: '\u0147',\n  Ncedil: '\u0145',\n  Ncy: '\u041D',\n  NegativeMediumSpace: '\u200B',\n  NegativeThickSpace: '\u200B',\n  NegativeThinSpace: '\u200B',\n  NegativeVeryThinSpace: '\u200B',\n  NestedGreaterGreater: '\u226B',\n  NestedLessLess: '\u226A',\n  NewLine: '\\n',\n  Nfr: '\uD835\uDD11',\n  NoBreak: '\u2060',\n  NonBreakingSpace: '\u00A0',\n  Nopf: '\u2115',\n  Not: '\u2AEC',\n  NotCongruent: '\u2262',\n  NotCupCap: '\u226D',\n  NotDoubleVerticalBar: '\u2226',\n  NotElement: '\u2209',\n  NotEqual: '\u2260',\n  NotEqualTilde: '\u2242\u0338',\n  NotExists: '\u2204',\n  NotGreater: '\u226F',\n  NotGreaterEqual: '\u2271',\n  NotGreaterFullEqual: '\u2267\u0338',\n  NotGreaterGreater: '\u226B\u0338',\n  NotGreaterLess: '\u2279',\n  NotGreaterSlantEqual: '\u2A7E\u0338',\n  NotGreaterTilde: '\u2275',\n  NotHumpDownHump: '\u224E\u0338',\n  NotHumpEqual: '\u224F\u0338',\n  NotLeftTriangle: '\u22EA',\n  NotLeftTriangleBar: '\u29CF\u0338',\n  NotLeftTriangleEqual: '\u22EC',\n  NotLess: '\u226E',\n  NotLessEqual: '\u2270',\n  NotLessGreater: '\u2278',\n  NotLessLess: '\u226A\u0338',\n  NotLessSlantEqual: '\u2A7D\u0338',\n  NotLessTilde: '\u2274',\n  NotNestedGreaterGreater: '\u2AA2\u0338',\n  NotNestedLessLess: '\u2AA1\u0338',\n  NotPrecedes: '\u2280',\n  NotPrecedesEqual: '\u2AAF\u0338',\n  NotPrecedesSlantEqual: '\u22E0',\n  NotReverseElement: '\u220C',\n  NotRightTriangle: '\u22EB',\n  NotRightTriangleBar: '\u29D0\u0338',\n  NotRightTriangleEqual: '\u22ED',\n  NotSquareSubset: '\u228F\u0338',\n  NotSquareSubsetEqual: '\u22E2',\n  NotSquareSuperset: '\u2290\u0338',\n  NotSquareSupersetEqual: '\u22E3',\n  NotSubset: '\u2282\u20D2',\n  NotSubsetEqual: '\u2288',\n  NotSucceeds: '\u2281',\n  NotSucceedsEqual: '\u2AB0\u0338',\n  NotSucceedsSlantEqual: '\u22E1',\n  NotSucceedsTilde: '\u227F\u0338',\n  NotSuperset: '\u2283\u20D2',\n  NotSupersetEqual: '\u2289',\n  NotTilde: '\u2241',\n  NotTildeEqual: '\u2244',\n  NotTildeFullEqual: '\u2247',\n  NotTildeTilde: '\u2249',\n  NotVerticalBar: '\u2224',\n  Nscr: '\uD835\uDCA9',\n  Ntilde: '\u00D1',\n  Nu: '\u039D',\n  OElig: '\u0152',\n  Oacute: '\u00D3',\n  Ocirc: '\u00D4',\n  Ocy: '\u041E',\n  Odblac: '\u0150',\n  Ofr: '\uD835\uDD12',\n  Ograve: '\u00D2',\n  Omacr: '\u014C',\n  Omega: '\u03A9',\n  Omicron: '\u039F',\n  Oopf: '\uD835\uDD46',\n  OpenCurlyDoubleQuote: '\u201C',\n  OpenCurlyQuote: '\u2018',\n  Or: '\u2A54',\n  Oscr: '\uD835\uDCAA',\n  Oslash: '\u00D8',\n  Otilde: '\u00D5',\n  Otimes: '\u2A37',\n  Ouml: '\u00D6',\n  OverBar: '\u203E',\n  OverBrace: '\u23DE',\n  OverBracket: '\u23B4',\n  OverParenthesis: '\u23DC',\n  PartialD: '\u2202',\n  Pcy: '\u041F',\n  Pfr: '\uD835\uDD13',\n  Phi: '\u03A6',\n  Pi: '\u03A0',\n  PlusMinus: '\u00B1',\n  Poincareplane: '\u210C',\n  Popf: '\u2119',\n  Pr: '\u2ABB',\n  Precedes: '\u227A',\n  PrecedesEqual: '\u2AAF',\n  PrecedesSlantEqual: '\u227C',\n  PrecedesTilde: '\u227E',\n  Prime: '\u2033',\n  Product: '\u220F',\n  Proportion: '\u2237',\n  Proportional: '\u221D',\n  Pscr: '\uD835\uDCAB',\n  Psi: '\u03A8',\n  QUOT: '\"',\n  Qfr: '\uD835\uDD14',\n  Qopf: '\u211A',\n  Qscr: '\uD835\uDCAC',\n  RBarr: '\u2910',\n  REG: '\u00AE',\n  Racute: '\u0154',\n  Rang: '\u27EB',\n  Rarr: '\u21A0',\n  Rarrtl: '\u2916',\n  Rcaron: '\u0158',\n  Rcedil: '\u0156',\n  Rcy: '\u0420',\n  Re: '\u211C',\n  ReverseElement: '\u220B',\n  ReverseEquilibrium: '\u21CB',\n  ReverseUpEquilibrium: '\u296F',\n  Rfr: '\u211C',\n  Rho: '\u03A1',\n  RightAngleBracket: '\u27E9',\n  RightArrow: '\u2192',\n  RightArrowBar: '\u21E5',\n  RightArrowLeftArrow: '\u21C4',\n  RightCeiling: '\u2309',\n  RightDoubleBracket: '\u27E7',\n  RightDownTeeVector: '\u295D',\n  RightDownVector: '\u21C2',\n  RightDownVectorBar: '\u2955',\n  RightFloor: '\u230B',\n  RightTee: '\u22A2',\n  RightTeeArrow: '\u21A6',\n  RightTeeVector: '\u295B',\n  RightTriangle: '\u22B3',\n  RightTriangleBar: '\u29D0',\n  RightTriangleEqual: '\u22B5',\n  RightUpDownVector: '\u294F',\n  RightUpTeeVector: '\u295C',\n  RightUpVector: '\u21BE',\n  RightUpVectorBar: '\u2954',\n  RightVector: '\u21C0',\n  RightVectorBar: '\u2953',\n  Rightarrow: '\u21D2',\n  Ropf: '\u211D',\n  RoundImplies: '\u2970',\n  Rrightarrow: '\u21DB',\n  Rscr: '\u211B',\n  Rsh: '\u21B1',\n  RuleDelayed: '\u29F4',\n  SHCHcy: '\u0429',\n  SHcy: '\u0428',\n  SOFTcy: '\u042C',\n  Sacute: '\u015A',\n  Sc: '\u2ABC',\n  Scaron: '\u0160',\n  Scedil: '\u015E',\n  Scirc: '\u015C',\n  Scy: '\u0421',\n  Sfr: '\uD835\uDD16',\n  ShortDownArrow: '\u2193',\n  ShortLeftArrow: '\u2190',\n  ShortRightArrow: '\u2192',\n  ShortUpArrow: '\u2191',\n  Sigma: '\u03A3',\n  SmallCircle: '\u2218',\n  Sopf: '\uD835\uDD4A',\n  Sqrt: '\u221A',\n  Square: '\u25A1',\n  SquareIntersection: '\u2293',\n  SquareSubset: '\u228F',\n  SquareSubsetEqual: '\u2291',\n  SquareSuperset: '\u2290',\n  SquareSupersetEqual: '\u2292',\n  SquareUnion: '\u2294',\n  Sscr: '\uD835\uDCAE',\n  Star: '\u22C6',\n  Sub: '\u22D0',\n  Subset: '\u22D0',\n  SubsetEqual: '\u2286',\n  Succeeds: '\u227B',\n  SucceedsEqual: '\u2AB0',\n  SucceedsSlantEqual: '\u227D',\n  SucceedsTilde: '\u227F',\n  SuchThat: '\u220B',\n  Sum: '\u2211',\n  Sup: '\u22D1',\n  Superset: '\u2283',\n  SupersetEqual: '\u2287',\n  Supset: '\u22D1',\n  THORN: '\u00DE',\n  TRADE: '\u2122',\n  TSHcy: '\u040B',\n  TScy: '\u0426',\n  Tab: '\\t',\n  Tau: '\u03A4',\n  Tcaron: '\u0164',\n  Tcedil: '\u0162',\n  Tcy: '\u0422',\n  Tfr: '\uD835\uDD17',\n  Therefore: '\u2234',\n  Theta: '\u0398',\n  ThickSpace: '\u205F\u200A',\n  ThinSpace: '\u2009',\n  Tilde: '\u223C',\n  TildeEqual: '\u2243',\n  TildeFullEqual: '\u2245',\n  TildeTilde: '\u2248',\n  Topf: '\uD835\uDD4B',\n  TripleDot: '\u20DB',\n  Tscr: '\uD835\uDCAF',\n  Tstrok: '\u0166',\n  Uacute: '\u00DA',\n  Uarr: '\u219F',\n  Uarrocir: '\u2949',\n  Ubrcy: '\u040E',\n  Ubreve: '\u016C',\n  Ucirc: '\u00DB',\n  Ucy: '\u0423',\n  Udblac: '\u0170',\n  Ufr: '\uD835\uDD18',\n  Ugrave: '\u00D9',\n  Umacr: '\u016A',\n  UnderBar: '_',\n  UnderBrace: '\u23DF',\n  UnderBracket: '\u23B5',\n  UnderParenthesis: '\u23DD',\n  Union: '\u22C3',\n  UnionPlus: '\u228E',\n  Uogon: '\u0172',\n  Uopf: '\uD835\uDD4C',\n  UpArrow: '\u2191',\n  UpArrowBar: '\u2912',\n  UpArrowDownArrow: '\u21C5',\n  UpDownArrow: '\u2195',\n  UpEquilibrium: '\u296E',\n  UpTee: '\u22A5',\n  UpTeeArrow: '\u21A5',\n  Uparrow: '\u21D1',\n  Updownarrow: '\u21D5',\n  UpperLeftArrow: '\u2196',\n  UpperRightArrow: '\u2197',\n  Upsi: '\u03D2',\n  Upsilon: '\u03A5',\n  Uring: '\u016E',\n  Uscr: '\uD835\uDCB0',\n  Utilde: '\u0168',\n  Uuml: '\u00DC',\n  VDash: '\u22AB',\n  Vbar: '\u2AEB',\n  Vcy: '\u0412',\n  Vdash: '\u22A9',\n  Vdashl: '\u2AE6',\n  Vee: '\u22C1',\n  Verbar: '\u2016',\n  Vert: '\u2016',\n  VerticalBar: '\u2223',\n  VerticalLine: '|',\n  VerticalSeparator: '\u2758',\n  VerticalTilde: '\u2240',\n  VeryThinSpace: '\u200A',\n  Vfr: '\uD835\uDD19',\n  Vopf: '\uD835\uDD4D',\n  Vscr: '\uD835\uDCB1',\n  Vvdash: '\u22AA',\n  Wcirc: '\u0174',\n  Wedge: '\u22C0',\n  Wfr: '\uD835\uDD1A',\n  Wopf: '\uD835\uDD4E',\n  Wscr: '\uD835\uDCB2',\n  Xfr: '\uD835\uDD1B',\n  Xi: '\u039E',\n  Xopf: '\uD835\uDD4F',\n  Xscr: '\uD835\uDCB3',\n  YAcy: '\u042F',\n  YIcy: '\u0407',\n  YUcy: '\u042E',\n  Yacute: '\u00DD',\n  Ycirc: '\u0176',\n  Ycy: '\u042B',\n  Yfr: '\uD835\uDD1C',\n  Yopf: '\uD835\uDD50',\n  Yscr: '\uD835\uDCB4',\n  Yuml: '\u0178',\n  ZHcy: '\u0416',\n  Zacute: '\u0179',\n  Zcaron: '\u017D',\n  Zcy: '\u0417',\n  Zdot: '\u017B',\n  ZeroWidthSpace: '\u200B',\n  Zeta: '\u0396',\n  Zfr: '\u2128',\n  Zopf: '\u2124',\n  Zscr: '\uD835\uDCB5',\n  aacute: '\u00E1',\n  abreve: '\u0103',\n  ac: '\u223E',\n  acE: '\u223E\u0333',\n  acd: '\u223F',\n  acirc: '\u00E2',\n  acute: '\u00B4',\n  acy: '\u0430',\n  aelig: '\u00E6',\n  af: '\u2061',\n  afr: '\uD835\uDD1E',\n  agrave: '\u00E0',\n  alefsym: '\u2135',\n  aleph: '\u2135',\n  alpha: '\u03B1',\n  amacr: '\u0101',\n  amalg: '\u2A3F',\n  amp: '&',\n  and: '\u2227',\n  andand: '\u2A55',\n  andd: '\u2A5C',\n  andslope: '\u2A58',\n  andv: '\u2A5A',\n  ang: '\u2220',\n  ange: '\u29A4',\n  angle: '\u2220',\n  angmsd: '\u2221',\n  angmsdaa: '\u29A8',\n  angmsdab: '\u29A9',\n  angmsdac: '\u29AA',\n  angmsdad: '\u29AB',\n  angmsdae: '\u29AC',\n  angmsdaf: '\u29AD',\n  angmsdag: '\u29AE',\n  angmsdah: '\u29AF',\n  angrt: '\u221F',\n  angrtvb: '\u22BE',\n  angrtvbd: '\u299D',\n  angsph: '\u2222',\n  angst: '\u00C5',\n  angzarr: '\u237C',\n  aogon: '\u0105',\n  aopf: '\uD835\uDD52',\n  ap: '\u2248',\n  apE: '\u2A70',\n  apacir: '\u2A6F',\n  ape: '\u224A',\n  apid: '\u224B',\n  apos: \"'\",\n  approx: '\u2248',\n  approxeq: '\u224A',\n  aring: '\u00E5',\n  ascr: '\uD835\uDCB6',\n  ast: '*',\n  asymp: '\u2248',\n  asympeq: '\u224D',\n  atilde: '\u00E3',\n  auml: '\u00E4',\n  awconint: '\u2233',\n  awint: '\u2A11',\n  bNot: '\u2AED',\n  backcong: '\u224C',\n  backepsilon: '\u03F6',\n  backprime: '\u2035',\n  backsim: '\u223D',\n  backsimeq: '\u22CD',\n  barvee: '\u22BD',\n  barwed: '\u2305',\n  barwedge: '\u2305',\n  bbrk: '\u23B5',\n  bbrktbrk: '\u23B6',\n  bcong: '\u224C',\n  bcy: '\u0431',\n  bdquo: '\u201E',\n  becaus: '\u2235',\n  because: '\u2235',\n  bemptyv: '\u29B0',\n  bepsi: '\u03F6',\n  bernou: '\u212C',\n  beta: '\u03B2',\n  beth: '\u2136',\n  between: '\u226C',\n  bfr: '\uD835\uDD1F',\n  bigcap: '\u22C2',\n  bigcirc: '\u25EF',\n  bigcup: '\u22C3',\n  bigodot: '\u2A00',\n  bigoplus: '\u2A01',\n  bigotimes: '\u2A02',\n  bigsqcup: '\u2A06',\n  bigstar: '\u2605',\n  bigtriangledown: '\u25BD',\n  bigtriangleup: '\u25B3',\n  biguplus: '\u2A04',\n  bigvee: '\u22C1',\n  bigwedge: '\u22C0',\n  bkarow: '\u290D',\n  blacklozenge: '\u29EB',\n  blacksquare: '\u25AA',\n  blacktriangle: '\u25B4',\n  blacktriangledown: '\u25BE',\n  blacktriangleleft: '\u25C2',\n  blacktriangleright: '\u25B8',\n  blank: '\u2423',\n  blk12: '\u2592',\n  blk14: '\u2591',\n  blk34: '\u2593',\n  block: '\u2588',\n  bne: '=\u20E5',\n  bnequiv: '\u2261\u20E5',\n  bnot: '\u2310',\n  bopf: '\uD835\uDD53',\n  bot: '\u22A5',\n  bottom: '\u22A5',\n  bowtie: '\u22C8',\n  boxDL: '\u2557',\n  boxDR: '\u2554',\n  boxDl: '\u2556',\n  boxDr: '\u2553',\n  boxH: '\u2550',\n  boxHD: '\u2566',\n  boxHU: '\u2569',\n  boxHd: '\u2564',\n  boxHu: '\u2567',\n  boxUL: '\u255D',\n  boxUR: '\u255A',\n  boxUl: '\u255C',\n  boxUr: '\u2559',\n  boxV: '\u2551',\n  boxVH: '\u256C',\n  boxVL: '\u2563',\n  boxVR: '\u2560',\n  boxVh: '\u256B',\n  boxVl: '\u2562',\n  boxVr: '\u255F',\n  boxbox: '\u29C9',\n  boxdL: '\u2555',\n  boxdR: '\u2552',\n  boxdl: '\u2510',\n  boxdr: '\u250C',\n  boxh: '\u2500',\n  boxhD: '\u2565',\n  boxhU: '\u2568',\n  boxhd: '\u252C',\n  boxhu: '\u2534',\n  boxminus: '\u229F',\n  boxplus: '\u229E',\n  boxtimes: '\u22A0',\n  boxuL: '\u255B',\n  boxuR: '\u2558',\n  boxul: '\u2518',\n  boxur: '\u2514',\n  boxv: '\u2502',\n  boxvH: '\u256A',\n  boxvL: '\u2561',\n  boxvR: '\u255E',\n  boxvh: '\u253C',\n  boxvl: '\u2524',\n  boxvr: '\u251C',\n  bprime: '\u2035',\n  breve: '\u02D8',\n  brvbar: '\u00A6',\n  bscr: '\uD835\uDCB7',\n  bsemi: '\u204F',\n  bsim: '\u223D',\n  bsime: '\u22CD',\n  bsol: '\\\\',\n  bsolb: '\u29C5',\n  bsolhsub: '\u27C8',\n  bull: '\u2022',\n  bullet: '\u2022',\n  bump: '\u224E',\n  bumpE: '\u2AAE',\n  bumpe: '\u224F',\n  bumpeq: '\u224F',\n  cacute: '\u0107',\n  cap: '\u2229',\n  capand: '\u2A44',\n  capbrcup: '\u2A49',\n  capcap: '\u2A4B',\n  capcup: '\u2A47',\n  capdot: '\u2A40',\n  caps: '\u2229\uFE00',\n  caret: '\u2041',\n  caron: '\u02C7',\n  ccaps: '\u2A4D',\n  ccaron: '\u010D',\n  ccedil: '\u00E7',\n  ccirc: '\u0109',\n  ccups: '\u2A4C',\n  ccupssm: '\u2A50',\n  cdot: '\u010B',\n  cedil: '\u00B8',\n  cemptyv: '\u29B2',\n  cent: '\u00A2',\n  centerdot: '\u00B7',\n  cfr: '\uD835\uDD20',\n  chcy: '\u0447',\n  check: '\u2713',\n  checkmark: '\u2713',\n  chi: '\u03C7',\n  cir: '\u25CB',\n  cirE: '\u29C3',\n  circ: '\u02C6',\n  circeq: '\u2257',\n  circlearrowleft: '\u21BA',\n  circlearrowright: '\u21BB',\n  circledR: '\u00AE',\n  circledS: '\u24C8',\n  circledast: '\u229B',\n  circledcirc: '\u229A',\n  circleddash: '\u229D',\n  cire: '\u2257',\n  cirfnint: '\u2A10',\n  cirmid: '\u2AEF',\n  cirscir: '\u29C2',\n  clubs: '\u2663',\n  clubsuit: '\u2663',\n  colon: ':',\n  colone: '\u2254',\n  coloneq: '\u2254',\n  comma: ',',\n  commat: '@',\n  comp: '\u2201',\n  compfn: '\u2218',\n  complement: '\u2201',\n  complexes: '\u2102',\n  cong: '\u2245',\n  congdot: '\u2A6D',\n  conint: '\u222E',\n  copf: '\uD835\uDD54',\n  coprod: '\u2210',\n  copy: '\u00A9',\n  copysr: '\u2117',\n  crarr: '\u21B5',\n  cross: '\u2717',\n  cscr: '\uD835\uDCB8',\n  csub: '\u2ACF',\n  csube: '\u2AD1',\n  csup: '\u2AD0',\n  csupe: '\u2AD2',\n  ctdot: '\u22EF',\n  cudarrl: '\u2938',\n  cudarrr: '\u2935',\n  cuepr: '\u22DE',\n  cuesc: '\u22DF',\n  cularr: '\u21B6',\n  cularrp: '\u293D',\n  cup: '\u222A',\n  cupbrcap: '\u2A48',\n  cupcap: '\u2A46',\n  cupcup: '\u2A4A',\n  cupdot: '\u228D',\n  cupor: '\u2A45',\n  cups: '\u222A\uFE00',\n  curarr: '\u21B7',\n  curarrm: '\u293C',\n  curlyeqprec: '\u22DE',\n  curlyeqsucc: '\u22DF',\n  curlyvee: '\u22CE',\n  curlywedge: '\u22CF',\n  curren: '\u00A4',\n  curvearrowleft: '\u21B6',\n  curvearrowright: '\u21B7',\n  cuvee: '\u22CE',\n  cuwed: '\u22CF',\n  cwconint: '\u2232',\n  cwint: '\u2231',\n  cylcty: '\u232D',\n  dArr: '\u21D3',\n  dHar: '\u2965',\n  dagger: '\u2020',\n  daleth: '\u2138',\n  darr: '\u2193',\n  dash: '\u2010',\n  dashv: '\u22A3',\n  dbkarow: '\u290F',\n  dblac: '\u02DD',\n  dcaron: '\u010F',\n  dcy: '\u0434',\n  dd: '\u2146',\n  ddagger: '\u2021',\n  ddarr: '\u21CA',\n  ddotseq: '\u2A77',\n  deg: '\u00B0',\n  delta: '\u03B4',\n  demptyv: '\u29B1',\n  dfisht: '\u297F',\n  dfr: '\uD835\uDD21',\n  dharl: '\u21C3',\n  dharr: '\u21C2',\n  diam: '\u22C4',\n  diamond: '\u22C4',\n  diamondsuit: '\u2666',\n  diams: '\u2666',\n  die: '\u00A8',\n  digamma: '\u03DD',\n  disin: '\u22F2',\n  div: '\u00F7',\n  divide: '\u00F7',\n  divideontimes: '\u22C7',\n  divonx: '\u22C7',\n  djcy: '\u0452',\n  dlcorn: '\u231E',\n  dlcrop: '\u230D',\n  dollar: '$',\n  dopf: '\uD835\uDD55',\n  dot: '\u02D9',\n  doteq: '\u2250',\n  doteqdot: '\u2251',\n  dotminus: '\u2238',\n  dotplus: '\u2214',\n  dotsquare: '\u22A1',\n  doublebarwedge: '\u2306',\n  downarrow: '\u2193',\n  downdownarrows: '\u21CA',\n  downharpoonleft: '\u21C3',\n  downharpoonright: '\u21C2',\n  drbkarow: '\u2910',\n  drcorn: '\u231F',\n  drcrop: '\u230C',\n  dscr: '\uD835\uDCB9',\n  dscy: '\u0455',\n  dsol: '\u29F6',\n  dstrok: '\u0111',\n  dtdot: '\u22F1',\n  dtri: '\u25BF',\n  dtrif: '\u25BE',\n  duarr: '\u21F5',\n  duhar: '\u296F',\n  dwangle: '\u29A6',\n  dzcy: '\u045F',\n  dzigrarr: '\u27FF',\n  eDDot: '\u2A77',\n  eDot: '\u2251',\n  eacute: '\u00E9',\n  easter: '\u2A6E',\n  ecaron: '\u011B',\n  ecir: '\u2256',\n  ecirc: '\u00EA',\n  ecolon: '\u2255',\n  ecy: '\u044D',\n  edot: '\u0117',\n  ee: '\u2147',\n  efDot: '\u2252',\n  efr: '\uD835\uDD22',\n  eg: '\u2A9A',\n  egrave: '\u00E8',\n  egs: '\u2A96',\n  egsdot: '\u2A98',\n  el: '\u2A99',\n  elinters: '\u23E7',\n  ell: '\u2113',\n  els: '\u2A95',\n  elsdot: '\u2A97',\n  emacr: '\u0113',\n  empty: '\u2205',\n  emptyset: '\u2205',\n  emptyv: '\u2205',\n  emsp13: '\u2004',\n  emsp14: '\u2005',\n  emsp: '\u2003',\n  eng: '\u014B',\n  ensp: '\u2002',\n  eogon: '\u0119',\n  eopf: '\uD835\uDD56',\n  epar: '\u22D5',\n  eparsl: '\u29E3',\n  eplus: '\u2A71',\n  epsi: '\u03B5',\n  epsilon: '\u03B5',\n  epsiv: '\u03F5',\n  eqcirc: '\u2256',\n  eqcolon: '\u2255',\n  eqsim: '\u2242',\n  eqslantgtr: '\u2A96',\n  eqslantless: '\u2A95',\n  equals: '=',\n  equest: '\u225F',\n  equiv: '\u2261',\n  equivDD: '\u2A78',\n  eqvparsl: '\u29E5',\n  erDot: '\u2253',\n  erarr: '\u2971',\n  escr: '\u212F',\n  esdot: '\u2250',\n  esim: '\u2242',\n  eta: '\u03B7',\n  eth: '\u00F0',\n  euml: '\u00EB',\n  euro: '\u20AC',\n  excl: '!',\n  exist: '\u2203',\n  expectation: '\u2130',\n  exponentiale: '\u2147',\n  fallingdotseq: '\u2252',\n  fcy: '\u0444',\n  female: '\u2640',\n  ffilig: '\uFB03',\n  fflig: '\uFB00',\n  ffllig: '\uFB04',\n  ffr: '\uD835\uDD23',\n  filig: '\uFB01',\n  fjlig: 'fj',\n  flat: '\u266D',\n  fllig: '\uFB02',\n  fltns: '\u25B1',\n  fnof: '\u0192',\n  fopf: '\uD835\uDD57',\n  forall: '\u2200',\n  fork: '\u22D4',\n  forkv: '\u2AD9',\n  fpartint: '\u2A0D',\n  frac12: '\u00BD',\n  frac13: '\u2153',\n  frac14: '\u00BC',\n  frac15: '\u2155',\n  frac16: '\u2159',\n  frac18: '\u215B',\n  frac23: '\u2154',\n  frac25: '\u2156',\n  frac34: '\u00BE',\n  frac35: '\u2157',\n  frac38: '\u215C',\n  frac45: '\u2158',\n  frac56: '\u215A',\n  frac58: '\u215D',\n  frac78: '\u215E',\n  frasl: '\u2044',\n  frown: '\u2322',\n  fscr: '\uD835\uDCBB',\n  gE: '\u2267',\n  gEl: '\u2A8C',\n  gacute: '\u01F5',\n  gamma: '\u03B3',\n  gammad: '\u03DD',\n  gap: '\u2A86',\n  gbreve: '\u011F',\n  gcirc: '\u011D',\n  gcy: '\u0433',\n  gdot: '\u0121',\n  ge: '\u2265',\n  gel: '\u22DB',\n  geq: '\u2265',\n  geqq: '\u2267',\n  geqslant: '\u2A7E',\n  ges: '\u2A7E',\n  gescc: '\u2AA9',\n  gesdot: '\u2A80',\n  gesdoto: '\u2A82',\n  gesdotol: '\u2A84',\n  gesl: '\u22DB\uFE00',\n  gesles: '\u2A94',\n  gfr: '\uD835\uDD24',\n  gg: '\u226B',\n  ggg: '\u22D9',\n  gimel: '\u2137',\n  gjcy: '\u0453',\n  gl: '\u2277',\n  glE: '\u2A92',\n  gla: '\u2AA5',\n  glj: '\u2AA4',\n  gnE: '\u2269',\n  gnap: '\u2A8A',\n  gnapprox: '\u2A8A',\n  gne: '\u2A88',\n  gneq: '\u2A88',\n  gneqq: '\u2269',\n  gnsim: '\u22E7',\n  gopf: '\uD835\uDD58',\n  grave: '`',\n  gscr: '\u210A',\n  gsim: '\u2273',\n  gsime: '\u2A8E',\n  gsiml: '\u2A90',\n  gt: '>',\n  gtcc: '\u2AA7',\n  gtcir: '\u2A7A',\n  gtdot: '\u22D7',\n  gtlPar: '\u2995',\n  gtquest: '\u2A7C',\n  gtrapprox: '\u2A86',\n  gtrarr: '\u2978',\n  gtrdot: '\u22D7',\n  gtreqless: '\u22DB',\n  gtreqqless: '\u2A8C',\n  gtrless: '\u2277',\n  gtrsim: '\u2273',\n  gvertneqq: '\u2269\uFE00',\n  gvnE: '\u2269\uFE00',\n  hArr: '\u21D4',\n  hairsp: '\u200A',\n  half: '\u00BD',\n  hamilt: '\u210B',\n  hardcy: '\u044A',\n  harr: '\u2194',\n  harrcir: '\u2948',\n  harrw: '\u21AD',\n  hbar: '\u210F',\n  hcirc: '\u0125',\n  hearts: '\u2665',\n  heartsuit: '\u2665',\n  hellip: '\u2026',\n  hercon: '\u22B9',\n  hfr: '\uD835\uDD25',\n  hksearow: '\u2925',\n  hkswarow: '\u2926',\n  hoarr: '\u21FF',\n  homtht: '\u223B',\n  hookleftarrow: '\u21A9',\n  hookrightarrow: '\u21AA',\n  hopf: '\uD835\uDD59',\n  horbar: '\u2015',\n  hscr: '\uD835\uDCBD',\n  hslash: '\u210F',\n  hstrok: '\u0127',\n  hybull: '\u2043',\n  hyphen: '\u2010',\n  iacute: '\u00ED',\n  ic: '\u2063',\n  icirc: '\u00EE',\n  icy: '\u0438',\n  iecy: '\u0435',\n  iexcl: '\u00A1',\n  iff: '\u21D4',\n  ifr: '\uD835\uDD26',\n  igrave: '\u00EC',\n  ii: '\u2148',\n  iiiint: '\u2A0C',\n  iiint: '\u222D',\n  iinfin: '\u29DC',\n  iiota: '\u2129',\n  ijlig: '\u0133',\n  imacr: '\u012B',\n  image: '\u2111',\n  imagline: '\u2110',\n  imagpart: '\u2111',\n  imath: '\u0131',\n  imof: '\u22B7',\n  imped: '\u01B5',\n  in: '\u2208',\n  incare: '\u2105',\n  infin: '\u221E',\n  infintie: '\u29DD',\n  inodot: '\u0131',\n  int: '\u222B',\n  intcal: '\u22BA',\n  integers: '\u2124',\n  intercal: '\u22BA',\n  intlarhk: '\u2A17',\n  intprod: '\u2A3C',\n  iocy: '\u0451',\n  iogon: '\u012F',\n  iopf: '\uD835\uDD5A',\n  iota: '\u03B9',\n  iprod: '\u2A3C',\n  iquest: '\u00BF',\n  iscr: '\uD835\uDCBE',\n  isin: '\u2208',\n  isinE: '\u22F9',\n  isindot: '\u22F5',\n  isins: '\u22F4',\n  isinsv: '\u22F3',\n  isinv: '\u2208',\n  it: '\u2062',\n  itilde: '\u0129',\n  iukcy: '\u0456',\n  iuml: '\u00EF',\n  jcirc: '\u0135',\n  jcy: '\u0439',\n  jfr: '\uD835\uDD27',\n  jmath: '\u0237',\n  jopf: '\uD835\uDD5B',\n  jscr: '\uD835\uDCBF',\n  jsercy: '\u0458',\n  jukcy: '\u0454',\n  kappa: '\u03BA',\n  kappav: '\u03F0',\n  kcedil: '\u0137',\n  kcy: '\u043A',\n  kfr: '\uD835\uDD28',\n  kgreen: '\u0138',\n  khcy: '\u0445',\n  kjcy: '\u045C',\n  kopf: '\uD835\uDD5C',\n  kscr: '\uD835\uDCC0',\n  lAarr: '\u21DA',\n  lArr: '\u21D0',\n  lAtail: '\u291B',\n  lBarr: '\u290E',\n  lE: '\u2266',\n  lEg: '\u2A8B',\n  lHar: '\u2962',\n  lacute: '\u013A',\n  laemptyv: '\u29B4',\n  lagran: '\u2112',\n  lambda: '\u03BB',\n  lang: '\u27E8',\n  langd: '\u2991',\n  langle: '\u27E8',\n  lap: '\u2A85',\n  laquo: '\u00AB',\n  larr: '\u2190',\n  larrb: '\u21E4',\n  larrbfs: '\u291F',\n  larrfs: '\u291D',\n  larrhk: '\u21A9',\n  larrlp: '\u21AB',\n  larrpl: '\u2939',\n  larrsim: '\u2973',\n  larrtl: '\u21A2',\n  lat: '\u2AAB',\n  latail: '\u2919',\n  late: '\u2AAD',\n  lates: '\u2AAD\uFE00',\n  lbarr: '\u290C',\n  lbbrk: '\u2772',\n  lbrace: '{',\n  lbrack: '[',\n  lbrke: '\u298B',\n  lbrksld: '\u298F',\n  lbrkslu: '\u298D',\n  lcaron: '\u013E',\n  lcedil: '\u013C',\n  lceil: '\u2308',\n  lcub: '{',\n  lcy: '\u043B',\n  ldca: '\u2936',\n  ldquo: '\u201C',\n  ldquor: '\u201E',\n  ldrdhar: '\u2967',\n  ldrushar: '\u294B',\n  ldsh: '\u21B2',\n  le: '\u2264',\n  leftarrow: '\u2190',\n  leftarrowtail: '\u21A2',\n  leftharpoondown: '\u21BD',\n  leftharpoonup: '\u21BC',\n  leftleftarrows: '\u21C7',\n  leftrightarrow: '\u2194',\n  leftrightarrows: '\u21C6',\n  leftrightharpoons: '\u21CB',\n  leftrightsquigarrow: '\u21AD',\n  leftthreetimes: '\u22CB',\n  leg: '\u22DA',\n  leq: '\u2264',\n  leqq: '\u2266',\n  leqslant: '\u2A7D',\n  les: '\u2A7D',\n  lescc: '\u2AA8',\n  lesdot: '\u2A7F',\n  lesdoto: '\u2A81',\n  lesdotor: '\u2A83',\n  lesg: '\u22DA\uFE00',\n  lesges: '\u2A93',\n  lessapprox: '\u2A85',\n  lessdot: '\u22D6',\n  lesseqgtr: '\u22DA',\n  lesseqqgtr: '\u2A8B',\n  lessgtr: '\u2276',\n  lesssim: '\u2272',\n  lfisht: '\u297C',\n  lfloor: '\u230A',\n  lfr: '\uD835\uDD29',\n  lg: '\u2276',\n  lgE: '\u2A91',\n  lhard: '\u21BD',\n  lharu: '\u21BC',\n  lharul: '\u296A',\n  lhblk: '\u2584',\n  ljcy: '\u0459',\n  ll: '\u226A',\n  llarr: '\u21C7',\n  llcorner: '\u231E',\n  llhard: '\u296B',\n  lltri: '\u25FA',\n  lmidot: '\u0140',\n  lmoust: '\u23B0',\n  lmoustache: '\u23B0',\n  lnE: '\u2268',\n  lnap: '\u2A89',\n  lnapprox: '\u2A89',\n  lne: '\u2A87',\n  lneq: '\u2A87',\n  lneqq: '\u2268',\n  lnsim: '\u22E6',\n  loang: '\u27EC',\n  loarr: '\u21FD',\n  lobrk: '\u27E6',\n  longleftarrow: '\u27F5',\n  longleftrightarrow: '\u27F7',\n  longmapsto: '\u27FC',\n  longrightarrow: '\u27F6',\n  looparrowleft: '\u21AB',\n  looparrowright: '\u21AC',\n  lopar: '\u2985',\n  lopf: '\uD835\uDD5D',\n  loplus: '\u2A2D',\n  lotimes: '\u2A34',\n  lowast: '\u2217',\n  lowbar: '_',\n  loz: '\u25CA',\n  lozenge: '\u25CA',\n  lozf: '\u29EB',\n  lpar: '(',\n  lparlt: '\u2993',\n  lrarr: '\u21C6',\n  lrcorner: '\u231F',\n  lrhar: '\u21CB',\n  lrhard: '\u296D',\n  lrm: '\u200E',\n  lrtri: '\u22BF',\n  lsaquo: '\u2039',\n  lscr: '\uD835\uDCC1',\n  lsh: '\u21B0',\n  lsim: '\u2272',\n  lsime: '\u2A8D',\n  lsimg: '\u2A8F',\n  lsqb: '[',\n  lsquo: '\u2018',\n  lsquor: '\u201A',\n  lstrok: '\u0142',\n  lt: '<',\n  ltcc: '\u2AA6',\n  ltcir: '\u2A79',\n  ltdot: '\u22D6',\n  lthree: '\u22CB',\n  ltimes: '\u22C9',\n  ltlarr: '\u2976',\n  ltquest: '\u2A7B',\n  ltrPar: '\u2996',\n  ltri: '\u25C3',\n  ltrie: '\u22B4',\n  ltrif: '\u25C2',\n  lurdshar: '\u294A',\n  luruhar: '\u2966',\n  lvertneqq: '\u2268\uFE00',\n  lvnE: '\u2268\uFE00',\n  mDDot: '\u223A',\n  macr: '\u00AF',\n  male: '\u2642',\n  malt: '\u2720',\n  maltese: '\u2720',\n  map: '\u21A6',\n  mapsto: '\u21A6',\n  mapstodown: '\u21A7',\n  mapstoleft: '\u21A4',\n  mapstoup: '\u21A5',\n  marker: '\u25AE',\n  mcomma: '\u2A29',\n  mcy: '\u043C',\n  mdash: '\u2014',\n  measuredangle: '\u2221',\n  mfr: '\uD835\uDD2A',\n  mho: '\u2127',\n  micro: '\u00B5',\n  mid: '\u2223',\n  midast: '*',\n  midcir: '\u2AF0',\n  middot: '\u00B7',\n  minus: '\u2212',\n  minusb: '\u229F',\n  minusd: '\u2238',\n  minusdu: '\u2A2A',\n  mlcp: '\u2ADB',\n  mldr: '\u2026',\n  mnplus: '\u2213',\n  models: '\u22A7',\n  mopf: '\uD835\uDD5E',\n  mp: '\u2213',\n  mscr: '\uD835\uDCC2',\n  mstpos: '\u223E',\n  mu: '\u03BC',\n  multimap: '\u22B8',\n  mumap: '\u22B8',\n  nGg: '\u22D9\u0338',\n  nGt: '\u226B\u20D2',\n  nGtv: '\u226B\u0338',\n  nLeftarrow: '\u21CD',\n  nLeftrightarrow: '\u21CE',\n  nLl: '\u22D8\u0338',\n  nLt: '\u226A\u20D2',\n  nLtv: '\u226A\u0338',\n  nRightarrow: '\u21CF',\n  nVDash: '\u22AF',\n  nVdash: '\u22AE',\n  nabla: '\u2207',\n  nacute: '\u0144',\n  nang: '\u2220\u20D2',\n  nap: '\u2249',\n  napE: '\u2A70\u0338',\n  napid: '\u224B\u0338',\n  napos: '\u0149',\n  napprox: '\u2249',\n  natur: '\u266E',\n  natural: '\u266E',\n  naturals: '\u2115',\n  nbsp: '\u00A0',\n  nbump: '\u224E\u0338',\n  nbumpe: '\u224F\u0338',\n  ncap: '\u2A43',\n  ncaron: '\u0148',\n  ncedil: '\u0146',\n  ncong: '\u2247',\n  ncongdot: '\u2A6D\u0338',\n  ncup: '\u2A42',\n  ncy: '\u043D',\n  ndash: '\u2013',\n  ne: '\u2260',\n  neArr: '\u21D7',\n  nearhk: '\u2924',\n  nearr: '\u2197',\n  nearrow: '\u2197',\n  nedot: '\u2250\u0338',\n  nequiv: '\u2262',\n  nesear: '\u2928',\n  nesim: '\u2242\u0338',\n  nexist: '\u2204',\n  nexists: '\u2204',\n  nfr: '\uD835\uDD2B',\n  ngE: '\u2267\u0338',\n  nge: '\u2271',\n  ngeq: '\u2271',\n  ngeqq: '\u2267\u0338',\n  ngeqslant: '\u2A7E\u0338',\n  nges: '\u2A7E\u0338',\n  ngsim: '\u2275',\n  ngt: '\u226F',\n  ngtr: '\u226F',\n  nhArr: '\u21CE',\n  nharr: '\u21AE',\n  nhpar: '\u2AF2',\n  ni: '\u220B',\n  nis: '\u22FC',\n  nisd: '\u22FA',\n  niv: '\u220B',\n  njcy: '\u045A',\n  nlArr: '\u21CD',\n  nlE: '\u2266\u0338',\n  nlarr: '\u219A',\n  nldr: '\u2025',\n  nle: '\u2270',\n  nleftarrow: '\u219A',\n  nleftrightarrow: '\u21AE',\n  nleq: '\u2270',\n  nleqq: '\u2266\u0338',\n  nleqslant: '\u2A7D\u0338',\n  nles: '\u2A7D\u0338',\n  nless: '\u226E',\n  nlsim: '\u2274',\n  nlt: '\u226E',\n  nltri: '\u22EA',\n  nltrie: '\u22EC',\n  nmid: '\u2224',\n  nopf: '\uD835\uDD5F',\n  not: '\u00AC',\n  notin: '\u2209',\n  notinE: '\u22F9\u0338',\n  notindot: '\u22F5\u0338',\n  notinva: '\u2209',\n  notinvb: '\u22F7',\n  notinvc: '\u22F6',\n  notni: '\u220C',\n  notniva: '\u220C',\n  notnivb: '\u22FE',\n  notnivc: '\u22FD',\n  npar: '\u2226',\n  nparallel: '\u2226',\n  nparsl: '\u2AFD\u20E5',\n  npart: '\u2202\u0338',\n  npolint: '\u2A14',\n  npr: '\u2280',\n  nprcue: '\u22E0',\n  npre: '\u2AAF\u0338',\n  nprec: '\u2280',\n  npreceq: '\u2AAF\u0338',\n  nrArr: '\u21CF',\n  nrarr: '\u219B',\n  nrarrc: '\u2933\u0338',\n  nrarrw: '\u219D\u0338',\n  nrightarrow: '\u219B',\n  nrtri: '\u22EB',\n  nrtrie: '\u22ED',\n  nsc: '\u2281',\n  nsccue: '\u22E1',\n  nsce: '\u2AB0\u0338',\n  nscr: '\uD835\uDCC3',\n  nshortmid: '\u2224',\n  nshortparallel: '\u2226',\n  nsim: '\u2241',\n  nsime: '\u2244',\n  nsimeq: '\u2244',\n  nsmid: '\u2224',\n  nspar: '\u2226',\n  nsqsube: '\u22E2',\n  nsqsupe: '\u22E3',\n  nsub: '\u2284',\n  nsubE: '\u2AC5\u0338',\n  nsube: '\u2288',\n  nsubset: '\u2282\u20D2',\n  nsubseteq: '\u2288',\n  nsubseteqq: '\u2AC5\u0338',\n  nsucc: '\u2281',\n  nsucceq: '\u2AB0\u0338',\n  nsup: '\u2285',\n  nsupE: '\u2AC6\u0338',\n  nsupe: '\u2289',\n  nsupset: '\u2283\u20D2',\n  nsupseteq: '\u2289',\n  nsupseteqq: '\u2AC6\u0338',\n  ntgl: '\u2279',\n  ntilde: '\u00F1',\n  ntlg: '\u2278',\n  ntriangleleft: '\u22EA',\n  ntrianglelefteq: '\u22EC',\n  ntriangleright: '\u22EB',\n  ntrianglerighteq: '\u22ED',\n  nu: '\u03BD',\n  num: '#',\n  numero: '\u2116',\n  numsp: '\u2007',\n  nvDash: '\u22AD',\n  nvHarr: '\u2904',\n  nvap: '\u224D\u20D2',\n  nvdash: '\u22AC',\n  nvge: '\u2265\u20D2',\n  nvgt: '>\u20D2',\n  nvinfin: '\u29DE',\n  nvlArr: '\u2902',\n  nvle: '\u2264\u20D2',\n  nvlt: '<\u20D2',\n  nvltrie: '\u22B4\u20D2',\n  nvrArr: '\u2903',\n  nvrtrie: '\u22B5\u20D2',\n  nvsim: '\u223C\u20D2',\n  nwArr: '\u21D6',\n  nwarhk: '\u2923',\n  nwarr: '\u2196',\n  nwarrow: '\u2196',\n  nwnear: '\u2927',\n  oS: '\u24C8',\n  oacute: '\u00F3',\n  oast: '\u229B',\n  ocir: '\u229A',\n  ocirc: '\u00F4',\n  ocy: '\u043E',\n  odash: '\u229D',\n  odblac: '\u0151',\n  odiv: '\u2A38',\n  odot: '\u2299',\n  odsold: '\u29BC',\n  oelig: '\u0153',\n  ofcir: '\u29BF',\n  ofr: '\uD835\uDD2C',\n  ogon: '\u02DB',\n  ograve: '\u00F2',\n  ogt: '\u29C1',\n  ohbar: '\u29B5',\n  ohm: '\u03A9',\n  oint: '\u222E',\n  olarr: '\u21BA',\n  olcir: '\u29BE',\n  olcross: '\u29BB',\n  oline: '\u203E',\n  olt: '\u29C0',\n  omacr: '\u014D',\n  omega: '\u03C9',\n  omicron: '\u03BF',\n  omid: '\u29B6',\n  ominus: '\u2296',\n  oopf: '\uD835\uDD60',\n  opar: '\u29B7',\n  operp: '\u29B9',\n  oplus: '\u2295',\n  or: '\u2228',\n  orarr: '\u21BB',\n  ord: '\u2A5D',\n  order: '\u2134',\n  orderof: '\u2134',\n  ordf: '\u00AA',\n  ordm: '\u00BA',\n  origof: '\u22B6',\n  oror: '\u2A56',\n  orslope: '\u2A57',\n  orv: '\u2A5B',\n  oscr: '\u2134',\n  oslash: '\u00F8',\n  osol: '\u2298',\n  otilde: '\u00F5',\n  otimes: '\u2297',\n  otimesas: '\u2A36',\n  ouml: '\u00F6',\n  ovbar: '\u233D',\n  par: '\u2225',\n  para: '\u00B6',\n  parallel: '\u2225',\n  parsim: '\u2AF3',\n  parsl: '\u2AFD',\n  part: '\u2202',\n  pcy: '\u043F',\n  percnt: '%',\n  period: '.',\n  permil: '\u2030',\n  perp: '\u22A5',\n  pertenk: '\u2031',\n  pfr: '\uD835\uDD2D',\n  phi: '\u03C6',\n  phiv: '\u03D5',\n  phmmat: '\u2133',\n  phone: '\u260E',\n  pi: '\u03C0',\n  pitchfork: '\u22D4',\n  piv: '\u03D6',\n  planck: '\u210F',\n  planckh: '\u210E',\n  plankv: '\u210F',\n  plus: '+',\n  plusacir: '\u2A23',\n  plusb: '\u229E',\n  pluscir: '\u2A22',\n  plusdo: '\u2214',\n  plusdu: '\u2A25',\n  pluse: '\u2A72',\n  plusmn: '\u00B1',\n  plussim: '\u2A26',\n  plustwo: '\u2A27',\n  pm: '\u00B1',\n  pointint: '\u2A15',\n  popf: '\uD835\uDD61',\n  pound: '\u00A3',\n  pr: '\u227A',\n  prE: '\u2AB3',\n  prap: '\u2AB7',\n  prcue: '\u227C',\n  pre: '\u2AAF',\n  prec: '\u227A',\n  precapprox: '\u2AB7',\n  preccurlyeq: '\u227C',\n  preceq: '\u2AAF',\n  precnapprox: '\u2AB9',\n  precneqq: '\u2AB5',\n  precnsim: '\u22E8',\n  precsim: '\u227E',\n  prime: '\u2032',\n  primes: '\u2119',\n  prnE: '\u2AB5',\n  prnap: '\u2AB9',\n  prnsim: '\u22E8',\n  prod: '\u220F',\n  profalar: '\u232E',\n  profline: '\u2312',\n  profsurf: '\u2313',\n  prop: '\u221D',\n  propto: '\u221D',\n  prsim: '\u227E',\n  prurel: '\u22B0',\n  pscr: '\uD835\uDCC5',\n  psi: '\u03C8',\n  puncsp: '\u2008',\n  qfr: '\uD835\uDD2E',\n  qint: '\u2A0C',\n  qopf: '\uD835\uDD62',\n  qprime: '\u2057',\n  qscr: '\uD835\uDCC6',\n  quaternions: '\u210D',\n  quatint: '\u2A16',\n  quest: '?',\n  questeq: '\u225F',\n  quot: '\"',\n  rAarr: '\u21DB',\n  rArr: '\u21D2',\n  rAtail: '\u291C',\n  rBarr: '\u290F',\n  rHar: '\u2964',\n  race: '\u223D\u0331',\n  racute: '\u0155',\n  radic: '\u221A',\n  raemptyv: '\u29B3',\n  rang: '\u27E9',\n  rangd: '\u2992',\n  range: '\u29A5',\n  rangle: '\u27E9',\n  raquo: '\u00BB',\n  rarr: '\u2192',\n  rarrap: '\u2975',\n  rarrb: '\u21E5',\n  rarrbfs: '\u2920',\n  rarrc: '\u2933',\n  rarrfs: '\u291E',\n  rarrhk: '\u21AA',\n  rarrlp: '\u21AC',\n  rarrpl: '\u2945',\n  rarrsim: '\u2974',\n  rarrtl: '\u21A3',\n  rarrw: '\u219D',\n  ratail: '\u291A',\n  ratio: '\u2236',\n  rationals: '\u211A',\n  rbarr: '\u290D',\n  rbbrk: '\u2773',\n  rbrace: '}',\n  rbrack: ']',\n  rbrke: '\u298C',\n  rbrksld: '\u298E',\n  rbrkslu: '\u2990',\n  rcaron: '\u0159',\n  rcedil: '\u0157',\n  rceil: '\u2309',\n  rcub: '}',\n  rcy: '\u0440',\n  rdca: '\u2937',\n  rdldhar: '\u2969',\n  rdquo: '\u201D',\n  rdquor: '\u201D',\n  rdsh: '\u21B3',\n  real: '\u211C',\n  realine: '\u211B',\n  realpart: '\u211C',\n  reals: '\u211D',\n  rect: '\u25AD',\n  reg: '\u00AE',\n  rfisht: '\u297D',\n  rfloor: '\u230B',\n  rfr: '\uD835\uDD2F',\n  rhard: '\u21C1',\n  rharu: '\u21C0',\n  rharul: '\u296C',\n  rho: '\u03C1',\n  rhov: '\u03F1',\n  rightarrow: '\u2192',\n  rightarrowtail: '\u21A3',\n  rightharpoondown: '\u21C1',\n  rightharpoonup: '\u21C0',\n  rightleftarrows: '\u21C4',\n  rightleftharpoons: '\u21CC',\n  rightrightarrows: '\u21C9',\n  rightsquigarrow: '\u219D',\n  rightthreetimes: '\u22CC',\n  ring: '\u02DA',\n  risingdotseq: '\u2253',\n  rlarr: '\u21C4',\n  rlhar: '\u21CC',\n  rlm: '\u200F',\n  rmoust: '\u23B1',\n  rmoustache: '\u23B1',\n  rnmid: '\u2AEE',\n  roang: '\u27ED',\n  roarr: '\u21FE',\n  robrk: '\u27E7',\n  ropar: '\u2986',\n  ropf: '\uD835\uDD63',\n  roplus: '\u2A2E',\n  rotimes: '\u2A35',\n  rpar: ')',\n  rpargt: '\u2994',\n  rppolint: '\u2A12',\n  rrarr: '\u21C9',\n  rsaquo: '\u203A',\n  rscr: '\uD835\uDCC7',\n  rsh: '\u21B1',\n  rsqb: ']',\n  rsquo: '\u2019',\n  rsquor: '\u2019',\n  rthree: '\u22CC',\n  rtimes: '\u22CA',\n  rtri: '\u25B9',\n  rtrie: '\u22B5',\n  rtrif: '\u25B8',\n  rtriltri: '\u29CE',\n  ruluhar: '\u2968',\n  rx: '\u211E',\n  sacute: '\u015B',\n  sbquo: '\u201A',\n  sc: '\u227B',\n  scE: '\u2AB4',\n  scap: '\u2AB8',\n  scaron: '\u0161',\n  sccue: '\u227D',\n  sce: '\u2AB0',\n  scedil: '\u015F',\n  scirc: '\u015D',\n  scnE: '\u2AB6',\n  scnap: '\u2ABA',\n  scnsim: '\u22E9',\n  scpolint: '\u2A13',\n  scsim: '\u227F',\n  scy: '\u0441',\n  sdot: '\u22C5',\n  sdotb: '\u22A1',\n  sdote: '\u2A66',\n  seArr: '\u21D8',\n  searhk: '\u2925',\n  searr: '\u2198',\n  searrow: '\u2198',\n  sect: '\u00A7',\n  semi: ';',\n  seswar: '\u2929',\n  setminus: '\u2216',\n  setmn: '\u2216',\n  sext: '\u2736',\n  sfr: '\uD835\uDD30',\n  sfrown: '\u2322',\n  sharp: '\u266F',\n  shchcy: '\u0449',\n  shcy: '\u0448',\n  shortmid: '\u2223',\n  shortparallel: '\u2225',\n  shy: '\u00AD',\n  sigma: '\u03C3',\n  sigmaf: '\u03C2',\n  sigmav: '\u03C2',\n  sim: '\u223C',\n  simdot: '\u2A6A',\n  sime: '\u2243',\n  simeq: '\u2243',\n  simg: '\u2A9E',\n  simgE: '\u2AA0',\n  siml: '\u2A9D',\n  simlE: '\u2A9F',\n  simne: '\u2246',\n  simplus: '\u2A24',\n  simrarr: '\u2972',\n  slarr: '\u2190',\n  smallsetminus: '\u2216',\n  smashp: '\u2A33',\n  smeparsl: '\u29E4',\n  smid: '\u2223',\n  smile: '\u2323',\n  smt: '\u2AAA',\n  smte: '\u2AAC',\n  smtes: '\u2AAC\uFE00',\n  softcy: '\u044C',\n  sol: '/',\n  solb: '\u29C4',\n  solbar: '\u233F',\n  sopf: '\uD835\uDD64',\n  spades: '\u2660',\n  spadesuit: '\u2660',\n  spar: '\u2225',\n  sqcap: '\u2293',\n  sqcaps: '\u2293\uFE00',\n  sqcup: '\u2294',\n  sqcups: '\u2294\uFE00',\n  sqsub: '\u228F',\n  sqsube: '\u2291',\n  sqsubset: '\u228F',\n  sqsubseteq: '\u2291',\n  sqsup: '\u2290',\n  sqsupe: '\u2292',\n  sqsupset: '\u2290',\n  sqsupseteq: '\u2292',\n  squ: '\u25A1',\n  square: '\u25A1',\n  squarf: '\u25AA',\n  squf: '\u25AA',\n  srarr: '\u2192',\n  sscr: '\uD835\uDCC8',\n  ssetmn: '\u2216',\n  ssmile: '\u2323',\n  sstarf: '\u22C6',\n  star: '\u2606',\n  starf: '\u2605',\n  straightepsilon: '\u03F5',\n  straightphi: '\u03D5',\n  strns: '\u00AF',\n  sub: '\u2282',\n  subE: '\u2AC5',\n  subdot: '\u2ABD',\n  sube: '\u2286',\n  subedot: '\u2AC3',\n  submult: '\u2AC1',\n  subnE: '\u2ACB',\n  subne: '\u228A',\n  subplus: '\u2ABF',\n  subrarr: '\u2979',\n  subset: '\u2282',\n  subseteq: '\u2286',\n  subseteqq: '\u2AC5',\n  subsetneq: '\u228A',\n  subsetneqq: '\u2ACB',\n  subsim: '\u2AC7',\n  subsub: '\u2AD5',\n  subsup: '\u2AD3',\n  succ: '\u227B',\n  succapprox: '\u2AB8',\n  succcurlyeq: '\u227D',\n  succeq: '\u2AB0',\n  succnapprox: '\u2ABA',\n  succneqq: '\u2AB6',\n  succnsim: '\u22E9',\n  succsim: '\u227F',\n  sum: '\u2211',\n  sung: '\u266A',\n  sup1: '\u00B9',\n  sup2: '\u00B2',\n  sup3: '\u00B3',\n  sup: '\u2283',\n  supE: '\u2AC6',\n  supdot: '\u2ABE',\n  supdsub: '\u2AD8',\n  supe: '\u2287',\n  supedot: '\u2AC4',\n  suphsol: '\u27C9',\n  suphsub: '\u2AD7',\n  suplarr: '\u297B',\n  supmult: '\u2AC2',\n  supnE: '\u2ACC',\n  supne: '\u228B',\n  supplus: '\u2AC0',\n  supset: '\u2283',\n  supseteq: '\u2287',\n  supseteqq: '\u2AC6',\n  supsetneq: '\u228B',\n  supsetneqq: '\u2ACC',\n  supsim: '\u2AC8',\n  supsub: '\u2AD4',\n  supsup: '\u2AD6',\n  swArr: '\u21D9',\n  swarhk: '\u2926',\n  swarr: '\u2199',\n  swarrow: '\u2199',\n  swnwar: '\u292A',\n  szlig: '\u00DF',\n  target: '\u2316',\n  tau: '\u03C4',\n  tbrk: '\u23B4',\n  tcaron: '\u0165',\n  tcedil: '\u0163',\n  tcy: '\u0442',\n  tdot: '\u20DB',\n  telrec: '\u2315',\n  tfr: '\uD835\uDD31',\n  there4: '\u2234',\n  therefore: '\u2234',\n  theta: '\u03B8',\n  thetasym: '\u03D1',\n  thetav: '\u03D1',\n  thickapprox: '\u2248',\n  thicksim: '\u223C',\n  thinsp: '\u2009',\n  thkap: '\u2248',\n  thksim: '\u223C',\n  thorn: '\u00FE',\n  tilde: '\u02DC',\n  times: '\u00D7',\n  timesb: '\u22A0',\n  timesbar: '\u2A31',\n  timesd: '\u2A30',\n  tint: '\u222D',\n  toea: '\u2928',\n  top: '\u22A4',\n  topbot: '\u2336',\n  topcir: '\u2AF1',\n  topf: '\uD835\uDD65',\n  topfork: '\u2ADA',\n  tosa: '\u2929',\n  tprime: '\u2034',\n  trade: '\u2122',\n  triangle: '\u25B5',\n  triangledown: '\u25BF',\n  triangleleft: '\u25C3',\n  trianglelefteq: '\u22B4',\n  triangleq: '\u225C',\n  triangleright: '\u25B9',\n  trianglerighteq: '\u22B5',\n  tridot: '\u25EC',\n  trie: '\u225C',\n  triminus: '\u2A3A',\n  triplus: '\u2A39',\n  trisb: '\u29CD',\n  tritime: '\u2A3B',\n  trpezium: '\u23E2',\n  tscr: '\uD835\uDCC9',\n  tscy: '\u0446',\n  tshcy: '\u045B',\n  tstrok: '\u0167',\n  twixt: '\u226C',\n  twoheadleftarrow: '\u219E',\n  twoheadrightarrow: '\u21A0',\n  uArr: '\u21D1',\n  uHar: '\u2963',\n  uacute: '\u00FA',\n  uarr: '\u2191',\n  ubrcy: '\u045E',\n  ubreve: '\u016D',\n  ucirc: '\u00FB',\n  ucy: '\u0443',\n  udarr: '\u21C5',\n  udblac: '\u0171',\n  udhar: '\u296E',\n  ufisht: '\u297E',\n  ufr: '\uD835\uDD32',\n  ugrave: '\u00F9',\n  uharl: '\u21BF',\n  uharr: '\u21BE',\n  uhblk: '\u2580',\n  ulcorn: '\u231C',\n  ulcorner: '\u231C',\n  ulcrop: '\u230F',\n  ultri: '\u25F8',\n  umacr: '\u016B',\n  uml: '\u00A8',\n  uogon: '\u0173',\n  uopf: '\uD835\uDD66',\n  uparrow: '\u2191',\n  updownarrow: '\u2195',\n  upharpoonleft: '\u21BF',\n  upharpoonright: '\u21BE',\n  uplus: '\u228E',\n  upsi: '\u03C5',\n  upsih: '\u03D2',\n  upsilon: '\u03C5',\n  upuparrows: '\u21C8',\n  urcorn: '\u231D',\n  urcorner: '\u231D',\n  urcrop: '\u230E',\n  uring: '\u016F',\n  urtri: '\u25F9',\n  uscr: '\uD835\uDCCA',\n  utdot: '\u22F0',\n  utilde: '\u0169',\n  utri: '\u25B5',\n  utrif: '\u25B4',\n  uuarr: '\u21C8',\n  uuml: '\u00FC',\n  uwangle: '\u29A7',\n  vArr: '\u21D5',\n  vBar: '\u2AE8',\n  vBarv: '\u2AE9',\n  vDash: '\u22A8',\n  vangrt: '\u299C',\n  varepsilon: '\u03F5',\n  varkappa: '\u03F0',\n  varnothing: '\u2205',\n  varphi: '\u03D5',\n  varpi: '\u03D6',\n  varpropto: '\u221D',\n  varr: '\u2195',\n  varrho: '\u03F1',\n  varsigma: '\u03C2',\n  varsubsetneq: '\u228A\uFE00',\n  varsubsetneqq: '\u2ACB\uFE00',\n  varsupsetneq: '\u228B\uFE00',\n  varsupsetneqq: '\u2ACC\uFE00',\n  vartheta: '\u03D1',\n  vartriangleleft: '\u22B2',\n  vartriangleright: '\u22B3',\n  vcy: '\u0432',\n  vdash: '\u22A2',\n  vee: '\u2228',\n  veebar: '\u22BB',\n  veeeq: '\u225A',\n  vellip: '\u22EE',\n  verbar: '|',\n  vert: '|',\n  vfr: '\uD835\uDD33',\n  vltri: '\u22B2',\n  vnsub: '\u2282\u20D2',\n  vnsup: '\u2283\u20D2',\n  vopf: '\uD835\uDD67',\n  vprop: '\u221D',\n  vrtri: '\u22B3',\n  vscr: '\uD835\uDCCB',\n  vsubnE: '\u2ACB\uFE00',\n  vsubne: '\u228A\uFE00',\n  vsupnE: '\u2ACC\uFE00',\n  vsupne: '\u228B\uFE00',\n  vzigzag: '\u299A',\n  wcirc: '\u0175',\n  wedbar: '\u2A5F',\n  wedge: '\u2227',\n  wedgeq: '\u2259',\n  weierp: '\u2118',\n  wfr: '\uD835\uDD34',\n  wopf: '\uD835\uDD68',\n  wp: '\u2118',\n  wr: '\u2240',\n  wreath: '\u2240',\n  wscr: '\uD835\uDCCC',\n  xcap: '\u22C2',\n  xcirc: '\u25EF',\n  xcup: '\u22C3',\n  xdtri: '\u25BD',\n  xfr: '\uD835\uDD35',\n  xhArr: '\u27FA',\n  xharr: '\u27F7',\n  xi: '\u03BE',\n  xlArr: '\u27F8',\n  xlarr: '\u27F5',\n  xmap: '\u27FC',\n  xnis: '\u22FB',\n  xodot: '\u2A00',\n  xopf: '\uD835\uDD69',\n  xoplus: '\u2A01',\n  xotime: '\u2A02',\n  xrArr: '\u27F9',\n  xrarr: '\u27F6',\n  xscr: '\uD835\uDCCD',\n  xsqcup: '\u2A06',\n  xuplus: '\u2A04',\n  xutri: '\u25B3',\n  xvee: '\u22C1',\n  xwedge: '\u22C0',\n  yacute: '\u00FD',\n  yacy: '\u044F',\n  ycirc: '\u0177',\n  ycy: '\u044B',\n  yen: '\u00A5',\n  yfr: '\uD835\uDD36',\n  yicy: '\u0457',\n  yopf: '\uD835\uDD6A',\n  yscr: '\uD835\uDCCE',\n  yucy: '\u044E',\n  yuml: '\u00FF',\n  zacute: '\u017A',\n  zcaron: '\u017E',\n  zcy: '\u0437',\n  zdot: '\u017C',\n  zeetrf: '\u2128',\n  zeta: '\u03B6',\n  zfr: '\uD835\uDD37',\n  zhcy: '\u0436',\n  zigrarr: '\u21DD',\n  zopf: '\uD835\uDD6B',\n  zscr: '\uD835\uDCCF',\n  zwj: '\u200D',\n  zwnj: '\u200C'\n}\n", "import {characterEntities} from 'character-entities'\n\nconst own = {}.hasOwnProperty\n\n/**\n * Decode a single character reference (without the `&` or `;`).\n * You probably only need this when you\u2019re building parsers yourself that follow\n * different rules compared to HTML.\n * This is optimized to be tiny in browsers.\n *\n * @param {string} value\n *   `notin` (named), `#123` (deci), `#x123` (hexa).\n * @returns {string|false}\n *   Decoded reference.\n */\nexport function decodeNamedCharacterReference(value) {\n  return own.call(characterEntities, value) ? characterEntities[value] : false\n}\n", "/**\n * Like `Array#splice`, but smarter for giant arrays.\n *\n * `Array#splice` takes all items to be inserted as individual argument which\n * causes a stack overflow in V8 when trying to insert 100k items for instance.\n *\n * Otherwise, this does not return the removed items, and takes `items` as an\n * array instead of rest parameters.\n *\n * @template {unknown} T\n *   Item type.\n * @param {Array<T>} list\n *   List to operate on.\n * @param {number} start\n *   Index to remove/insert at (can be negative).\n * @param {number} remove\n *   Number of items to remove.\n * @param {Array<T>} items\n *   Items to inject into `list`.\n * @returns {undefined}\n *   Nothing.\n */\nexport function splice(list, start, remove, items) {\n  const end = list.length;\n  let chunkStart = 0;\n  /** @type {Array<unknown>} */\n  let parameters;\n\n  // Make start between zero and `end` (included).\n  if (start < 0) {\n    start = -start > end ? 0 : end + start;\n  } else {\n    start = start > end ? end : start;\n  }\n  remove = remove > 0 ? remove : 0;\n\n  // No need to chunk the items if there\u2019s only a couple (10k) items.\n  if (items.length < 10000) {\n    parameters = Array.from(items);\n    parameters.unshift(start, remove);\n    // @ts-expect-error Hush, it\u2019s fine.\n    list.splice(...parameters);\n  } else {\n    // Delete `remove` items starting from `start`\n    if (remove) list.splice(start, remove);\n\n    // Insert the items in chunks to not cause stack overflows.\n    while (chunkStart < items.length) {\n      parameters = items.slice(chunkStart, chunkStart + 10000);\n      parameters.unshift(start, 0);\n      // @ts-expect-error Hush, it\u2019s fine.\n      list.splice(...parameters);\n      chunkStart += 10000;\n      start += 10000;\n    }\n  }\n}\n\n/**\n * Append `items` (an array) at the end of `list` (another array).\n * When `list` was empty, returns `items` instead.\n *\n * This prevents a potentially expensive operation when `list` is empty,\n * and adds items in batches to prevent V8 from hanging.\n *\n * @template {unknown} T\n *   Item type.\n * @param {Array<T>} list\n *   List to operate on.\n * @param {Array<T>} items\n *   Items to add to `list`.\n * @returns {Array<T>}\n *   Either `list` or `items`.\n */\nexport function push(list, items) {\n  if (list.length > 0) {\n    splice(list, list.length, 0, items);\n    return list;\n  }\n  return items;\n}", "/**\n * @import {\n *   Extension,\n *   Handles,\n *   HtmlExtension,\n *   NormalizedExtension\n * } from 'micromark-util-types'\n */\n\nimport {splice} from 'micromark-util-chunked'\n\nconst hasOwnProperty = {}.hasOwnProperty\n\n/**\n * Combine multiple syntax extensions into one.\n *\n * @param {ReadonlyArray<Extension>} extensions\n *   List of syntax extensions.\n * @returns {NormalizedExtension}\n *   A single combined extension.\n */\nexport function combineExtensions(extensions) {\n  /** @type {NormalizedExtension} */\n  const all = {}\n  let index = -1\n\n  while (++index < extensions.length) {\n    syntaxExtension(all, extensions[index])\n  }\n\n  return all\n}\n\n/**\n * Merge `extension` into `all`.\n *\n * @param {NormalizedExtension} all\n *   Extension to merge into.\n * @param {Extension} extension\n *   Extension to merge.\n * @returns {undefined}\n *   Nothing.\n */\nfunction syntaxExtension(all, extension) {\n  /** @type {keyof Extension} */\n  let hook\n\n  for (hook in extension) {\n    const maybe = hasOwnProperty.call(all, hook) ? all[hook] : undefined\n    /** @type {Record<string, unknown>} */\n    const left = maybe || (all[hook] = {})\n    /** @type {Record<string, unknown> | undefined} */\n    const right = extension[hook]\n    /** @type {string} */\n    let code\n\n    if (right) {\n      for (code in right) {\n        if (!hasOwnProperty.call(left, code)) left[code] = []\n        const value = right[code]\n        constructs(\n          // @ts-expect-error Looks like a list.\n          left[code],\n          Array.isArray(value) ? value : value ? [value] : []\n        )\n      }\n    }\n  }\n}\n\n/**\n * Merge `list` into `existing` (both lists of constructs).\n * Mutates `existing`.\n *\n * @param {Array<unknown>} existing\n *   List of constructs to merge into.\n * @param {Array<unknown>} list\n *   List of constructs to merge.\n * @returns {undefined}\n *   Nothing.\n */\nfunction constructs(existing, list) {\n  let index = -1\n  /** @type {Array<unknown>} */\n  const before = []\n\n  while (++index < list.length) {\n    // @ts-expect-error Looks like an object.\n    ;(list[index].add === 'after' ? existing : before).push(list[index])\n  }\n\n  splice(existing, 0, 0, before)\n}\n\n/**\n * Combine multiple HTML extensions into one.\n *\n * @param {ReadonlyArray<HtmlExtension>} htmlExtensions\n *   List of HTML extensions.\n * @returns {HtmlExtension}\n *   Single combined HTML extension.\n */\nexport function combineHtmlExtensions(htmlExtensions) {\n  /** @type {HtmlExtension} */\n  const handlers = {}\n  let index = -1\n\n  while (++index < htmlExtensions.length) {\n    htmlExtension(handlers, htmlExtensions[index])\n  }\n\n  return handlers\n}\n\n/**\n * Merge `extension` into `all`.\n *\n * @param {HtmlExtension} all\n *   Extension to merge into.\n * @param {HtmlExtension} extension\n *   Extension to merge.\n * @returns {undefined}\n *   Nothing.\n */\nfunction htmlExtension(all, extension) {\n  /** @type {keyof HtmlExtension} */\n  let hook\n\n  for (hook in extension) {\n    const maybe = hasOwnProperty.call(all, hook) ? all[hook] : undefined\n    const left = maybe || (all[hook] = {})\n    const right = extension[hook]\n    /** @type {keyof Handles} */\n    let type\n\n    if (right) {\n      for (type in right) {\n        // @ts-expect-error assume document vs regular handler are managed correctly.\n        left[type] = right[type]\n      }\n    }\n  }\n}\n", "/**\n * Turn the number (in string form as either hexa- or plain decimal) coming from\n * a numeric character reference into a character.\n *\n * Sort of like `String.fromCodePoint(Number.parseInt(value, base))`, but makes\n * non-characters and control characters safe.\n *\n * @param {string} value\n *   Value to decode.\n * @param {number} base\n *   Numeric base.\n * @returns {string}\n *   Character.\n */\nexport function decodeNumericCharacterReference(value, base) {\n  const code = Number.parseInt(value, base);\n  if (\n  // C0 except for HT, LF, FF, CR, space.\n  code < 9 || code === 11 || code > 13 && code < 32 ||\n  // Control character (DEL) of C0, and C1 controls.\n  code > 126 && code < 160 ||\n  // Lone high surrogates and low surrogates.\n  code > 55_295 && code < 57_344 ||\n  // Noncharacters.\n  code > 64_975 && code < 65_008 || /* eslint-disable no-bitwise */\n  (code & 65_535) === 65_535 || (code & 65_535) === 65_534 || /* eslint-enable no-bitwise */\n  // Out of range\n  code > 1_114_111) {\n    return \"\\uFFFD\";\n  }\n  return String.fromCodePoint(code);\n}", "/**\n * Normalize an identifier (as found in references, definitions).\n *\n * Collapses markdown whitespace, trim, and then lower- and uppercase.\n *\n * Some characters are considered \u201Cuppercase\u201D, such as U+03F4 (`\u03F4`), but if their\n * lowercase counterpart (U+03B8 (`\u03B8`)) is uppercased will result in a different\n * uppercase character (U+0398 (`\u0398`)).\n * So, to get a canonical form, we perform both lower- and uppercase.\n *\n * Using uppercase last makes sure keys will never interact with default\n * prototypal values (such as `constructor`): nothing in the prototype of\n * `Object` is uppercase.\n *\n * @param {string} value\n *   Identifier to normalize.\n * @returns {string}\n *   Normalized identifier.\n */\nexport function normalizeIdentifier(value) {\n  return value\n  // Collapse markdown whitespace.\n  .replace(/[\\t\\n\\r ]+/g, \" \")\n  // Trim.\n  .replace(/^ | $/g, '')\n  // Some characters are considered \u201Cuppercase\u201D, but if their lowercase\n  // counterpart is uppercased will result in a different uppercase\n  // character.\n  // Hence, to get that form, we perform both lower- and uppercase.\n  // Upper case makes sure keys will not interact with default prototypal\n  // methods: no method is uppercase.\n  .toLowerCase().toUpperCase();\n}", "/**\n * @import {Code} from 'micromark-util-types'\n */\n\n/**\n * Check whether the character code represents an ASCII alpha (`a` through `z`,\n * case insensitive).\n *\n * An **ASCII alpha** is an ASCII upper alpha or ASCII lower alpha.\n *\n * An **ASCII upper alpha** is a character in the inclusive range U+0041 (`A`)\n * to U+005A (`Z`).\n *\n * An **ASCII lower alpha** is a character in the inclusive range U+0061 (`a`)\n * to U+007A (`z`).\n *\n * @param code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport const asciiAlpha = regexCheck(/[A-Za-z]/);\n\n/**\n * Check whether the character code represents an ASCII alphanumeric (`a`\n * through `z`, case insensitive, or `0` through `9`).\n *\n * An **ASCII alphanumeric** is an ASCII digit (see `asciiDigit`) or ASCII alpha\n * (see `asciiAlpha`).\n *\n * @param code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport const asciiAlphanumeric = regexCheck(/[\\dA-Za-z]/);\n\n/**\n * Check whether the character code represents an ASCII atext.\n *\n * atext is an ASCII alphanumeric (see `asciiAlphanumeric`), or a character in\n * the inclusive ranges U+0023 NUMBER SIGN (`#`) to U+0027 APOSTROPHE (`'`),\n * U+002A ASTERISK (`*`), U+002B PLUS SIGN (`+`), U+002D DASH (`-`), U+002F\n * SLASH (`/`), U+003D EQUALS TO (`=`), U+003F QUESTION MARK (`?`), U+005E\n * CARET (`^`) to U+0060 GRAVE ACCENT (`` ` ``), or U+007B LEFT CURLY BRACE\n * (`{`) to U+007E TILDE (`~`).\n *\n * See:\n * **\\[RFC5322]**:\n * [Internet Message Format](https://tools.ietf.org/html/rfc5322).\n * P. Resnick.\n * IETF.\n *\n * @param code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport const asciiAtext = regexCheck(/[#-'*+\\--9=?A-Z^-~]/);\n\n/**\n * Check whether a character code is an ASCII control character.\n *\n * An **ASCII control** is a character in the inclusive range U+0000 NULL (NUL)\n * to U+001F (US), or U+007F (DEL).\n *\n * @param {Code} code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport function asciiControl(code) {\n  return (\n    // Special whitespace codes (which have negative values), C0 and Control\n    // character DEL\n    code !== null && (code < 32 || code === 127)\n  );\n}\n\n/**\n * Check whether the character code represents an ASCII digit (`0` through `9`).\n *\n * An **ASCII digit** is a character in the inclusive range U+0030 (`0`) to\n * U+0039 (`9`).\n *\n * @param code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport const asciiDigit = regexCheck(/\\d/);\n\n/**\n * Check whether the character code represents an ASCII hex digit (`a` through\n * `f`, case insensitive, or `0` through `9`).\n *\n * An **ASCII hex digit** is an ASCII digit (see `asciiDigit`), ASCII upper hex\n * digit, or an ASCII lower hex digit.\n *\n * An **ASCII upper hex digit** is a character in the inclusive range U+0041\n * (`A`) to U+0046 (`F`).\n *\n * An **ASCII lower hex digit** is a character in the inclusive range U+0061\n * (`a`) to U+0066 (`f`).\n *\n * @param code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport const asciiHexDigit = regexCheck(/[\\dA-Fa-f]/);\n\n/**\n * Check whether the character code represents ASCII punctuation.\n *\n * An **ASCII punctuation** is a character in the inclusive ranges U+0021\n * EXCLAMATION MARK (`!`) to U+002F SLASH (`/`), U+003A COLON (`:`) to U+0040 AT\n * SIGN (`@`), U+005B LEFT SQUARE BRACKET (`[`) to U+0060 GRAVE ACCENT\n * (`` ` ``), or U+007B LEFT CURLY BRACE (`{`) to U+007E TILDE (`~`).\n *\n * @param code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport const asciiPunctuation = regexCheck(/[!-/:-@[-`{-~]/);\n\n/**\n * Check whether a character code is a markdown line ending.\n *\n * A **markdown line ending** is the virtual characters M-0003 CARRIAGE RETURN\n * LINE FEED (CRLF), M-0004 LINE FEED (LF) and M-0005 CARRIAGE RETURN (CR).\n *\n * In micromark, the actual character U+000A LINE FEED (LF) and U+000D CARRIAGE\n * RETURN (CR) are replaced by these virtual characters depending on whether\n * they occurred together.\n *\n * @param {Code} code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport function markdownLineEnding(code) {\n  return code !== null && code < -2;\n}\n\n/**\n * Check whether a character code is a markdown line ending (see\n * `markdownLineEnding`) or markdown space (see `markdownSpace`).\n *\n * @param {Code} code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport function markdownLineEndingOrSpace(code) {\n  return code !== null && (code < 0 || code === 32);\n}\n\n/**\n * Check whether a character code is a markdown space.\n *\n * A **markdown space** is the concrete character U+0020 SPACE (SP) and the\n * virtual characters M-0001 VIRTUAL SPACE (VS) and M-0002 HORIZONTAL TAB (HT).\n *\n * In micromark, the actual character U+0009 CHARACTER TABULATION (HT) is\n * replaced by one M-0002 HORIZONTAL TAB (HT) and between 0 and 3 M-0001 VIRTUAL\n * SPACE (VS) characters, depending on the column at which the tab occurred.\n *\n * @param {Code} code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport function markdownSpace(code) {\n  return code === -2 || code === -1 || code === 32;\n}\n\n// Size note: removing ASCII from the regex and using `asciiPunctuation` here\n// In fact adds to the bundle size.\n/**\n * Check whether the character code represents Unicode punctuation.\n *\n * A **Unicode punctuation** is a character in the Unicode `Pc` (Punctuation,\n * Connector), `Pd` (Punctuation, Dash), `Pe` (Punctuation, Close), `Pf`\n * (Punctuation, Final quote), `Pi` (Punctuation, Initial quote), `Po`\n * (Punctuation, Other), or `Ps` (Punctuation, Open) categories, or an ASCII\n * punctuation (see `asciiPunctuation`).\n *\n * See:\n * **\\[UNICODE]**:\n * [The Unicode Standard](https://www.unicode.org/versions/).\n * Unicode Consortium.\n *\n * @param code\n *   Code.\n * @returns\n *   Whether it matches.\n */\nexport const unicodePunctuation = regexCheck(/\\p{P}|\\p{S}/u);\n\n/**\n * Check whether the character code represents Unicode whitespace.\n *\n * Note that this does handle micromark specific markdown whitespace characters.\n * See `markdownLineEndingOrSpace` to check that.\n *\n * A **Unicode whitespace** is a character in the Unicode `Zs` (Separator,\n * Space) category, or U+0009 CHARACTER TABULATION (HT), U+000A LINE FEED (LF),\n * U+000C (FF), or U+000D CARRIAGE RETURN (CR) (**\\[UNICODE]**).\n *\n * See:\n * **\\[UNICODE]**:\n * [The Unicode Standard](https://www.unicode.org/versions/).\n * Unicode Consortium.\n *\n * @param code\n *   Code.\n * @returns\n *   Whether it matches.\n */\nexport const unicodeWhitespace = regexCheck(/\\s/);\n\n/**\n * Create a code check from a regex.\n *\n * @param {RegExp} regex\n *   Expression.\n * @returns {(code: Code) => boolean}\n *   Check.\n */\nfunction regexCheck(regex) {\n  return check;\n\n  /**\n   * Check whether a code matches the bound regex.\n   *\n   * @param {Code} code\n   *   Character code.\n   * @returns {boolean}\n   *   Whether the character code matches the bound regex.\n   */\n  function check(code) {\n    return code !== null && code > -1 && regex.test(String.fromCharCode(code));\n  }\n}", "import { asciiAlphanumeric } from 'micromark-util-character';\nimport { encode } from 'micromark-util-encode';\n/**\n * Make a value safe for injection as a URL.\n *\n * This encodes unsafe characters with percent-encoding and skips already\n * encoded sequences (see `normalizeUri`).\n * Further unsafe characters are encoded as character references (see\n * `micromark-util-encode`).\n *\n * A regex of allowed protocols can be given, in which case the URL is\n * sanitized.\n * For example, `/^(https?|ircs?|mailto|xmpp)$/i` can be used for `a[href]`, or\n * `/^https?$/i` for `img[src]` (this is what `github.com` allows).\n * If the URL includes an unknown protocol (one not matched by `protocol`, such\n * as a dangerous example, `javascript:`), the value is ignored.\n *\n * @param {string | null | undefined} url\n *   URI to sanitize.\n * @param {RegExp | null | undefined} [protocol]\n *   Allowed protocols.\n * @returns {string}\n *   Sanitized URI.\n */\nexport function sanitizeUri(url, protocol) {\n  const value = encode(normalizeUri(url || ''));\n  if (!protocol) {\n    return value;\n  }\n  const colon = value.indexOf(':');\n  const questionMark = value.indexOf('?');\n  const numberSign = value.indexOf('#');\n  const slash = value.indexOf('/');\n  if (\n  // If there is no protocol, it\u2019s relative.\n  colon < 0 ||\n  // If the first colon is after a `?`, `#`, or `/`, it\u2019s not a protocol.\n  slash > -1 && colon > slash || questionMark > -1 && colon > questionMark || numberSign > -1 && colon > numberSign ||\n  // It is a protocol, it should be allowed.\n  protocol.test(value.slice(0, colon))) {\n    return value;\n  }\n  return '';\n}\n\n/**\n * Normalize a URL.\n *\n * Encode unsafe characters with percent-encoding, skipping already encoded\n * sequences.\n *\n * @param {string} value\n *   URI to normalize.\n * @returns {string}\n *   Normalized URI.\n */\nexport function normalizeUri(value) {\n  /** @type {Array<string>} */\n  const result = [];\n  let index = -1;\n  let start = 0;\n  let skip = 0;\n  while (++index < value.length) {\n    const code = value.charCodeAt(index);\n    /** @type {string} */\n    let replace = '';\n\n    // A correct percent encoded value.\n    if (code === 37 && asciiAlphanumeric(value.charCodeAt(index + 1)) && asciiAlphanumeric(value.charCodeAt(index + 2))) {\n      skip = 2;\n    }\n    // ASCII.\n    else if (code < 128) {\n      if (!/[!#$&-;=?-Z_a-z~]/.test(String.fromCharCode(code))) {\n        replace = String.fromCharCode(code);\n      }\n    }\n    // Astral.\n    else if (code > 55_295 && code < 57_344) {\n      const next = value.charCodeAt(index + 1);\n\n      // A correct surrogate pair.\n      if (code < 56_320 && next > 56_319 && next < 57_344) {\n        replace = String.fromCharCode(code, next);\n        skip = 1;\n      }\n      // Lone surrogate.\n      else {\n        replace = \"\\uFFFD\";\n      }\n    }\n    // Unicode.\n    else {\n      replace = String.fromCharCode(code);\n    }\n    if (replace) {\n      result.push(value.slice(start, index), encodeURIComponent(replace));\n      start = index + skip + 1;\n      replace = '';\n    }\n    if (skip) {\n      index += skip;\n      skip = 0;\n    }\n  }\n  return result.join('') + value.slice(start);\n}", "/**\n * @import {Effects, State, TokenType} from 'micromark-util-types'\n */\n\nimport { markdownSpace } from 'micromark-util-character';\n\n// To do: implement `spaceOrTab`, `spaceOrTabMinMax`, `spaceOrTabWithOptions`.\n\n/**\n * Parse spaces and tabs.\n *\n * There is no `nok` parameter:\n *\n * *   spaces in markdown are often optional, in which case this factory can be\n *     used and `ok` will be switched to whether spaces were found or not\n * *   one line ending or space can be detected with `markdownSpace(code)` right\n *     before using `factorySpace`\n *\n * ###### Examples\n *\n * Where `\u2409` represents a tab (plus how much it expands) and `\u2420` represents a\n * single space.\n *\n * ```markdown\n * \u2409\n * \u2420\u2420\u2420\u2420\n * \u2409\u2420\n * ```\n *\n * @param {Effects} effects\n *   Context.\n * @param {State} ok\n *   State switched to when successful.\n * @param {TokenType} type\n *   Type (`' \\t'`).\n * @param {number | undefined} [max=Infinity]\n *   Max (exclusive).\n * @returns {State}\n *   Start state.\n */\nexport function factorySpace(effects, ok, type, max) {\n  const limit = max ? max - 1 : Number.POSITIVE_INFINITY;\n  let size = 0;\n  return start;\n\n  /** @type {State} */\n  function start(code) {\n    if (markdownSpace(code)) {\n      effects.enter(type);\n      return prefix(code);\n    }\n    return ok(code);\n  }\n\n  /** @type {State} */\n  function prefix(code) {\n    if (markdownSpace(code) && size++ < limit) {\n      effects.consume(code);\n      return prefix;\n    }\n    effects.exit(type);\n    return ok(code);\n  }\n}", "/**\n * @import {\n *   InitialConstruct,\n *   Initializer,\n *   State,\n *   TokenizeContext,\n *   Token\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding } from 'micromark-util-character';\n/** @type {InitialConstruct} */\nexport const content = {\n  tokenize: initializeContent\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Initializer}\n *   Content.\n */\nfunction initializeContent(effects) {\n  const contentStart = effects.attempt(this.parser.constructs.contentInitial, afterContentStartConstruct, paragraphInitial);\n  /** @type {Token} */\n  let previous;\n  return contentStart;\n\n  /** @type {State} */\n  function afterContentStartConstruct(code) {\n    if (code === null) {\n      effects.consume(code);\n      return;\n    }\n    effects.enter(\"lineEnding\");\n    effects.consume(code);\n    effects.exit(\"lineEnding\");\n    return factorySpace(effects, contentStart, \"linePrefix\");\n  }\n\n  /** @type {State} */\n  function paragraphInitial(code) {\n    effects.enter(\"paragraph\");\n    return lineStart(code);\n  }\n\n  /** @type {State} */\n  function lineStart(code) {\n    const token = effects.enter(\"chunkText\", {\n      contentType: \"text\",\n      previous\n    });\n    if (previous) {\n      previous.next = token;\n    }\n    previous = token;\n    return data(code);\n  }\n\n  /** @type {State} */\n  function data(code) {\n    if (code === null) {\n      effects.exit(\"chunkText\");\n      effects.exit(\"paragraph\");\n      effects.consume(code);\n      return;\n    }\n    if (markdownLineEnding(code)) {\n      effects.consume(code);\n      effects.exit(\"chunkText\");\n      return lineStart;\n    }\n\n    // Data.\n    effects.consume(code);\n    return data;\n  }\n}", "/**\n * @import {\n *   Construct,\n *   ContainerState,\n *   InitialConstruct,\n *   Initializer,\n *   Point,\n *   State,\n *   TokenizeContext,\n *   Tokenizer,\n *   Token\n * } from 'micromark-util-types'\n */\n\n/**\n * @typedef {[Construct, ContainerState]} StackItem\n *   Construct and its state.\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding } from 'micromark-util-character';\nimport { splice } from 'micromark-util-chunked';\n/** @type {InitialConstruct} */\nexport const document = {\n  tokenize: initializeDocument\n};\n\n/** @type {Construct} */\nconst containerConstruct = {\n  tokenize: tokenizeContainer\n};\n\n/**\n * @this {TokenizeContext}\n *   Self.\n * @type {Initializer}\n *   Initializer.\n */\nfunction initializeDocument(effects) {\n  const self = this;\n  /** @type {Array<StackItem>} */\n  const stack = [];\n  let continued = 0;\n  /** @type {TokenizeContext | undefined} */\n  let childFlow;\n  /** @type {Token | undefined} */\n  let childToken;\n  /** @type {number} */\n  let lineStartOffset;\n  return start;\n\n  /** @type {State} */\n  function start(code) {\n    // First we iterate through the open blocks, starting with the root\n    // document, and descending through last children down to the last open\n    // block.\n    // Each block imposes a condition that the line must satisfy if the block is\n    // to remain open.\n    // For example, a block quote requires a `>` character.\n    // A paragraph requires a non-blank line.\n    // In this phase we may match all or just some of the open blocks.\n    // But we cannot close unmatched blocks yet, because we may have a lazy\n    // continuation line.\n    if (continued < stack.length) {\n      const item = stack[continued];\n      self.containerState = item[1];\n      return effects.attempt(item[0].continuation, documentContinue, checkNewContainers)(code);\n    }\n\n    // Done.\n    return checkNewContainers(code);\n  }\n\n  /** @type {State} */\n  function documentContinue(code) {\n    continued++;\n\n    // Note: this field is called `_closeFlow` but it also closes containers.\n    // Perhaps a good idea to rename it but it\u2019s already used in the wild by\n    // extensions.\n    if (self.containerState._closeFlow) {\n      self.containerState._closeFlow = undefined;\n      if (childFlow) {\n        closeFlow();\n      }\n\n      // Note: this algorithm for moving events around is similar to the\n      // algorithm when dealing with lazy lines in `writeToChild`.\n      const indexBeforeExits = self.events.length;\n      let indexBeforeFlow = indexBeforeExits;\n      /** @type {Point | undefined} */\n      let point;\n\n      // Find the flow chunk.\n      while (indexBeforeFlow--) {\n        if (self.events[indexBeforeFlow][0] === 'exit' && self.events[indexBeforeFlow][1].type === \"chunkFlow\") {\n          point = self.events[indexBeforeFlow][1].end;\n          break;\n        }\n      }\n      exitContainers(continued);\n\n      // Fix positions.\n      let index = indexBeforeExits;\n      while (index < self.events.length) {\n        self.events[index][1].end = {\n          ...point\n        };\n        index++;\n      }\n\n      // Inject the exits earlier (they\u2019re still also at the end).\n      splice(self.events, indexBeforeFlow + 1, 0, self.events.slice(indexBeforeExits));\n\n      // Discard the duplicate exits.\n      self.events.length = index;\n      return checkNewContainers(code);\n    }\n    return start(code);\n  }\n\n  /** @type {State} */\n  function checkNewContainers(code) {\n    // Next, after consuming the continuation markers for existing blocks, we\n    // look for new block starts (e.g. `>` for a block quote).\n    // If we encounter a new block start, we close any blocks unmatched in\n    // step 1 before creating the new block as a child of the last matched\n    // block.\n    if (continued === stack.length) {\n      // No need to `check` whether there\u2019s a container, of `exitContainers`\n      // would be moot.\n      // We can instead immediately `attempt` to parse one.\n      if (!childFlow) {\n        return documentContinued(code);\n      }\n\n      // If we have concrete content, such as block HTML or fenced code,\n      // we can\u2019t have containers \u201Cpierce\u201D into them, so we can immediately\n      // start.\n      if (childFlow.currentConstruct && childFlow.currentConstruct.concrete) {\n        return flowStart(code);\n      }\n\n      // If we do have flow, it could still be a blank line,\n      // but we\u2019d be interrupting it w/ a new container if there\u2019s a current\n      // construct.\n      // To do: next major: remove `_gfmTableDynamicInterruptHack` (no longer\n      // needed in micromark-extension-gfm-table@1.0.6).\n      self.interrupt = Boolean(childFlow.currentConstruct && !childFlow._gfmTableDynamicInterruptHack);\n    }\n\n    // Check if there is a new container.\n    self.containerState = {};\n    return effects.check(containerConstruct, thereIsANewContainer, thereIsNoNewContainer)(code);\n  }\n\n  /** @type {State} */\n  function thereIsANewContainer(code) {\n    if (childFlow) closeFlow();\n    exitContainers(continued);\n    return documentContinued(code);\n  }\n\n  /** @type {State} */\n  function thereIsNoNewContainer(code) {\n    self.parser.lazy[self.now().line] = continued !== stack.length;\n    lineStartOffset = self.now().offset;\n    return flowStart(code);\n  }\n\n  /** @type {State} */\n  function documentContinued(code) {\n    // Try new containers.\n    self.containerState = {};\n    return effects.attempt(containerConstruct, containerContinue, flowStart)(code);\n  }\n\n  /** @type {State} */\n  function containerContinue(code) {\n    continued++;\n    stack.push([self.currentConstruct, self.containerState]);\n    // Try another.\n    return documentContinued(code);\n  }\n\n  /** @type {State} */\n  function flowStart(code) {\n    if (code === null) {\n      if (childFlow) closeFlow();\n      exitContainers(0);\n      effects.consume(code);\n      return;\n    }\n    childFlow = childFlow || self.parser.flow(self.now());\n    effects.enter(\"chunkFlow\", {\n      _tokenizer: childFlow,\n      contentType: \"flow\",\n      previous: childToken\n    });\n    return flowContinue(code);\n  }\n\n  /** @type {State} */\n  function flowContinue(code) {\n    if (code === null) {\n      writeToChild(effects.exit(\"chunkFlow\"), true);\n      exitContainers(0);\n      effects.consume(code);\n      return;\n    }\n    if (markdownLineEnding(code)) {\n      effects.consume(code);\n      writeToChild(effects.exit(\"chunkFlow\"));\n      // Get ready for the next line.\n      continued = 0;\n      self.interrupt = undefined;\n      return start;\n    }\n    effects.consume(code);\n    return flowContinue;\n  }\n\n  /**\n   * @param {Token} token\n   *   Token.\n   * @param {boolean | undefined} [endOfFile]\n   *   Whether the token is at the end of the file (default: `false`).\n   * @returns {undefined}\n   *   Nothing.\n   */\n  function writeToChild(token, endOfFile) {\n    const stream = self.sliceStream(token);\n    if (endOfFile) stream.push(null);\n    token.previous = childToken;\n    if (childToken) childToken.next = token;\n    childToken = token;\n    childFlow.defineSkip(token.start);\n    childFlow.write(stream);\n\n    // Alright, so we just added a lazy line:\n    //\n    // ```markdown\n    // > a\n    // b.\n    //\n    // Or:\n    //\n    // > ~~~c\n    // d\n    //\n    // Or:\n    //\n    // > | e |\n    // f\n    // ```\n    //\n    // The construct in the second example (fenced code) does not accept lazy\n    // lines, so it marked itself as done at the end of its first line, and\n    // then the content construct parses `d`.\n    // Most constructs in markdown match on the first line: if the first line\n    // forms a construct, a non-lazy line can\u2019t \u201Cunmake\u201D it.\n    //\n    // The construct in the third example is potentially a GFM table, and\n    // those are *weird*.\n    // It *could* be a table, from the first line, if the following line\n    // matches a condition.\n    // In this case, that second line is lazy, which \u201Cunmakes\u201D the first line\n    // and turns the whole into one content block.\n    //\n    // We\u2019ve now parsed the non-lazy and the lazy line, and can figure out\n    // whether the lazy line started a new flow block.\n    // If it did, we exit the current containers between the two flow blocks.\n    if (self.parser.lazy[token.start.line]) {\n      let index = childFlow.events.length;\n      while (index--) {\n        if (\n        // The token starts before the line ending\u2026\n        childFlow.events[index][1].start.offset < lineStartOffset && (\n        // \u2026and either is not ended yet\u2026\n        !childFlow.events[index][1].end ||\n        // \u2026or ends after it.\n        childFlow.events[index][1].end.offset > lineStartOffset)) {\n          // Exit: there\u2019s still something open, which means it\u2019s a lazy line\n          // part of something.\n          return;\n        }\n      }\n\n      // Note: this algorithm for moving events around is similar to the\n      // algorithm when closing flow in `documentContinue`.\n      const indexBeforeExits = self.events.length;\n      let indexBeforeFlow = indexBeforeExits;\n      /** @type {boolean | undefined} */\n      let seen;\n      /** @type {Point | undefined} */\n      let point;\n\n      // Find the previous chunk (the one before the lazy line).\n      while (indexBeforeFlow--) {\n        if (self.events[indexBeforeFlow][0] === 'exit' && self.events[indexBeforeFlow][1].type === \"chunkFlow\") {\n          if (seen) {\n            point = self.events[indexBeforeFlow][1].end;\n            break;\n          }\n          seen = true;\n        }\n      }\n      exitContainers(continued);\n\n      // Fix positions.\n      index = indexBeforeExits;\n      while (index < self.events.length) {\n        self.events[index][1].end = {\n          ...point\n        };\n        index++;\n      }\n\n      // Inject the exits earlier (they\u2019re still also at the end).\n      splice(self.events, indexBeforeFlow + 1, 0, self.events.slice(indexBeforeExits));\n\n      // Discard the duplicate exits.\n      self.events.length = index;\n    }\n  }\n\n  /**\n   * @param {number} size\n   *   Size.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  function exitContainers(size) {\n    let index = stack.length;\n\n    // Exit open containers.\n    while (index-- > size) {\n      const entry = stack[index];\n      self.containerState = entry[1];\n      entry[0].exit.call(self, effects);\n    }\n    stack.length = size;\n  }\n  function closeFlow() {\n    childFlow.write([null]);\n    childToken = undefined;\n    childFlow = undefined;\n    self.containerState._closeFlow = undefined;\n  }\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n *   Tokenizer.\n */\nfunction tokenizeContainer(effects, ok, nok) {\n  // Always populated by defaults.\n\n  return factorySpace(effects, effects.attempt(this.parser.constructs.document, ok, nok), \"linePrefix\", this.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4);\n}", "/**\n * @import {Code} from 'micromark-util-types'\n */\n\nimport { markdownLineEndingOrSpace, unicodePunctuation, unicodeWhitespace } from 'micromark-util-character';\n/**\n * Classify whether a code represents whitespace, punctuation, or something\n * else.\n *\n * Used for attention (emphasis, strong), whose sequences can open or close\n * based on the class of surrounding characters.\n *\n * > \uD83D\uDC49 **Note**: eof (`null`) is seen as whitespace.\n *\n * @param {Code} code\n *   Code.\n * @returns {typeof constants.characterGroupWhitespace | typeof constants.characterGroupPunctuation | undefined}\n *   Group.\n */\nexport function classifyCharacter(code) {\n  if (code === null || markdownLineEndingOrSpace(code) || unicodeWhitespace(code)) {\n    return 1;\n  }\n  if (unicodePunctuation(code)) {\n    return 2;\n  }\n}", "/**\n * @import {Event, Resolver, TokenizeContext} from 'micromark-util-types'\n */\n\n/**\n * Call all `resolveAll`s.\n *\n * @param {ReadonlyArray<{resolveAll?: Resolver | undefined}>} constructs\n *   List of constructs, optionally with `resolveAll`s.\n * @param {Array<Event>} events\n *   List of events.\n * @param {TokenizeContext} context\n *   Context used by `tokenize`.\n * @returns {Array<Event>}\n *   Changed events.\n */\nexport function resolveAll(constructs, events, context) {\n  /** @type {Array<Resolver>} */\n  const called = []\n  let index = -1\n\n  while (++index < constructs.length) {\n    const resolve = constructs[index].resolveAll\n\n    if (resolve && !called.includes(resolve)) {\n      events = resolve(events, context)\n      called.push(resolve)\n    }\n  }\n\n  return events\n}\n", "/**\n * @import {\n *   Code,\n *   Construct,\n *   Event,\n *   Point,\n *   Resolver,\n *   State,\n *   TokenizeContext,\n *   Tokenizer,\n *   Token\n * } from 'micromark-util-types'\n */\n\nimport { push, splice } from 'micromark-util-chunked';\nimport { classifyCharacter } from 'micromark-util-classify-character';\nimport { resolveAll } from 'micromark-util-resolve-all';\n/** @type {Construct} */\nexport const attention = {\n  name: 'attention',\n  resolveAll: resolveAllAttention,\n  tokenize: tokenizeAttention\n};\n\n/**\n * Take all events and resolve attention to emphasis or strong.\n *\n * @type {Resolver}\n */\n// eslint-disable-next-line complexity\nfunction resolveAllAttention(events, context) {\n  let index = -1;\n  /** @type {number} */\n  let open;\n  /** @type {Token} */\n  let group;\n  /** @type {Token} */\n  let text;\n  /** @type {Token} */\n  let openingSequence;\n  /** @type {Token} */\n  let closingSequence;\n  /** @type {number} */\n  let use;\n  /** @type {Array<Event>} */\n  let nextEvents;\n  /** @type {number} */\n  let offset;\n\n  // Walk through all events.\n  //\n  // Note: performance of this is fine on an mb of normal markdown, but it\u2019s\n  // a bottleneck for malicious stuff.\n  while (++index < events.length) {\n    // Find a token that can close.\n    if (events[index][0] === 'enter' && events[index][1].type === 'attentionSequence' && events[index][1]._close) {\n      open = index;\n\n      // Now walk back to find an opener.\n      while (open--) {\n        // Find a token that can open the closer.\n        if (events[open][0] === 'exit' && events[open][1].type === 'attentionSequence' && events[open][1]._open &&\n        // If the markers are the same:\n        context.sliceSerialize(events[open][1]).charCodeAt(0) === context.sliceSerialize(events[index][1]).charCodeAt(0)) {\n          // If the opening can close or the closing can open,\n          // and the close size *is not* a multiple of three,\n          // but the sum of the opening and closing size *is* multiple of three,\n          // then don\u2019t match.\n          if ((events[open][1]._close || events[index][1]._open) && (events[index][1].end.offset - events[index][1].start.offset) % 3 && !((events[open][1].end.offset - events[open][1].start.offset + events[index][1].end.offset - events[index][1].start.offset) % 3)) {\n            continue;\n          }\n\n          // Number of markers to use from the sequence.\n          use = events[open][1].end.offset - events[open][1].start.offset > 1 && events[index][1].end.offset - events[index][1].start.offset > 1 ? 2 : 1;\n          const start = {\n            ...events[open][1].end\n          };\n          const end = {\n            ...events[index][1].start\n          };\n          movePoint(start, -use);\n          movePoint(end, use);\n          openingSequence = {\n            type: use > 1 ? \"strongSequence\" : \"emphasisSequence\",\n            start,\n            end: {\n              ...events[open][1].end\n            }\n          };\n          closingSequence = {\n            type: use > 1 ? \"strongSequence\" : \"emphasisSequence\",\n            start: {\n              ...events[index][1].start\n            },\n            end\n          };\n          text = {\n            type: use > 1 ? \"strongText\" : \"emphasisText\",\n            start: {\n              ...events[open][1].end\n            },\n            end: {\n              ...events[index][1].start\n            }\n          };\n          group = {\n            type: use > 1 ? \"strong\" : \"emphasis\",\n            start: {\n              ...openingSequence.start\n            },\n            end: {\n              ...closingSequence.end\n            }\n          };\n          events[open][1].end = {\n            ...openingSequence.start\n          };\n          events[index][1].start = {\n            ...closingSequence.end\n          };\n          nextEvents = [];\n\n          // If there are more markers in the opening, add them before.\n          if (events[open][1].end.offset - events[open][1].start.offset) {\n            nextEvents = push(nextEvents, [['enter', events[open][1], context], ['exit', events[open][1], context]]);\n          }\n\n          // Opening.\n          nextEvents = push(nextEvents, [['enter', group, context], ['enter', openingSequence, context], ['exit', openingSequence, context], ['enter', text, context]]);\n\n          // Always populated by defaults.\n\n          // Between.\n          nextEvents = push(nextEvents, resolveAll(context.parser.constructs.insideSpan.null, events.slice(open + 1, index), context));\n\n          // Closing.\n          nextEvents = push(nextEvents, [['exit', text, context], ['enter', closingSequence, context], ['exit', closingSequence, context], ['exit', group, context]]);\n\n          // If there are more markers in the closing, add them after.\n          if (events[index][1].end.offset - events[index][1].start.offset) {\n            offset = 2;\n            nextEvents = push(nextEvents, [['enter', events[index][1], context], ['exit', events[index][1], context]]);\n          } else {\n            offset = 0;\n          }\n          splice(events, open - 1, index - open + 3, nextEvents);\n          index = open + nextEvents.length - offset - 2;\n          break;\n        }\n      }\n    }\n  }\n\n  // Remove remaining sequences.\n  index = -1;\n  while (++index < events.length) {\n    if (events[index][1].type === 'attentionSequence') {\n      events[index][1].type = 'data';\n    }\n  }\n  return events;\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeAttention(effects, ok) {\n  const attentionMarkers = this.parser.constructs.attentionMarkers.null;\n  const previous = this.previous;\n  const before = classifyCharacter(previous);\n\n  /** @type {NonNullable<Code>} */\n  let marker;\n  return start;\n\n  /**\n   * Before a sequence.\n   *\n   * ```markdown\n   * > | **\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    marker = code;\n    effects.enter('attentionSequence');\n    return inside(code);\n  }\n\n  /**\n   * In a sequence.\n   *\n   * ```markdown\n   * > | **\n   *     ^^\n   * ```\n   *\n   * @type {State}\n   */\n  function inside(code) {\n    if (code === marker) {\n      effects.consume(code);\n      return inside;\n    }\n    const token = effects.exit('attentionSequence');\n\n    // To do: next major: move this to resolver, just like `markdown-rs`.\n    const after = classifyCharacter(code);\n\n    // Always populated by defaults.\n\n    const open = !after || after === 2 && before || attentionMarkers.includes(code);\n    const close = !before || before === 2 && after || attentionMarkers.includes(previous);\n    token._open = Boolean(marker === 42 ? open : open && (before || !close));\n    token._close = Boolean(marker === 42 ? close : close && (after || !open));\n    return ok(code);\n  }\n}\n\n/**\n * Move a point a bit.\n *\n * Note: `move` only works inside lines! It\u2019s not possible to move past other\n * chunks (replacement characters, tabs, or line endings).\n *\n * @param {Point} point\n *   Point.\n * @param {number} offset\n *   Amount to move.\n * @returns {undefined}\n *   Nothing.\n */\nfunction movePoint(point, offset) {\n  point.column += offset;\n  point.offset += offset;\n  point._bufferIndex += offset;\n}", "/**\n * @import {\n *   Construct,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { asciiAlphanumeric, asciiAlpha, asciiAtext, asciiControl } from 'micromark-util-character';\n/** @type {Construct} */\nexport const autolink = {\n  name: 'autolink',\n  tokenize: tokenizeAutolink\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeAutolink(effects, ok, nok) {\n  let size = 0;\n  return start;\n\n  /**\n   * Start of an autolink.\n   *\n   * ```markdown\n   * > | a<https://example.com>b\n   *      ^\n   * > | a<user@example.com>b\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter(\"autolink\");\n    effects.enter(\"autolinkMarker\");\n    effects.consume(code);\n    effects.exit(\"autolinkMarker\");\n    effects.enter(\"autolinkProtocol\");\n    return open;\n  }\n\n  /**\n   * After `<`, at protocol or atext.\n   *\n   * ```markdown\n   * > | a<https://example.com>b\n   *       ^\n   * > | a<user@example.com>b\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function open(code) {\n    if (asciiAlpha(code)) {\n      effects.consume(code);\n      return schemeOrEmailAtext;\n    }\n    if (code === 64) {\n      return nok(code);\n    }\n    return emailAtext(code);\n  }\n\n  /**\n   * At second byte of protocol or atext.\n   *\n   * ```markdown\n   * > | a<https://example.com>b\n   *        ^\n   * > | a<user@example.com>b\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function schemeOrEmailAtext(code) {\n    // ASCII alphanumeric and `+`, `-`, and `.`.\n    if (code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) {\n      // Count the previous alphabetical from `open` too.\n      size = 1;\n      return schemeInsideOrEmailAtext(code);\n    }\n    return emailAtext(code);\n  }\n\n  /**\n   * In ambiguous protocol or atext.\n   *\n   * ```markdown\n   * > | a<https://example.com>b\n   *        ^\n   * > | a<user@example.com>b\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function schemeInsideOrEmailAtext(code) {\n    if (code === 58) {\n      effects.consume(code);\n      size = 0;\n      return urlInside;\n    }\n\n    // ASCII alphanumeric and `+`, `-`, and `.`.\n    if ((code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) && size++ < 32) {\n      effects.consume(code);\n      return schemeInsideOrEmailAtext;\n    }\n    size = 0;\n    return emailAtext(code);\n  }\n\n  /**\n   * After protocol, in URL.\n   *\n   * ```markdown\n   * > | a<https://example.com>b\n   *             ^\n   * ```\n   *\n   * @type {State}\n   */\n  function urlInside(code) {\n    if (code === 62) {\n      effects.exit(\"autolinkProtocol\");\n      effects.enter(\"autolinkMarker\");\n      effects.consume(code);\n      effects.exit(\"autolinkMarker\");\n      effects.exit(\"autolink\");\n      return ok;\n    }\n\n    // ASCII control, space, or `<`.\n    if (code === null || code === 32 || code === 60 || asciiControl(code)) {\n      return nok(code);\n    }\n    effects.consume(code);\n    return urlInside;\n  }\n\n  /**\n   * In email atext.\n   *\n   * ```markdown\n   * > | a<user.name@example.com>b\n   *              ^\n   * ```\n   *\n   * @type {State}\n   */\n  function emailAtext(code) {\n    if (code === 64) {\n      effects.consume(code);\n      return emailAtSignOrDot;\n    }\n    if (asciiAtext(code)) {\n      effects.consume(code);\n      return emailAtext;\n    }\n    return nok(code);\n  }\n\n  /**\n   * In label, after at-sign or dot.\n   *\n   * ```markdown\n   * > | a<user.name@example.com>b\n   *                 ^       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function emailAtSignOrDot(code) {\n    return asciiAlphanumeric(code) ? emailLabel(code) : nok(code);\n  }\n\n  /**\n   * In label, where `.` and `>` are allowed.\n   *\n   * ```markdown\n   * > | a<user.name@example.com>b\n   *                   ^\n   * ```\n   *\n   * @type {State}\n   */\n  function emailLabel(code) {\n    if (code === 46) {\n      effects.consume(code);\n      size = 0;\n      return emailAtSignOrDot;\n    }\n    if (code === 62) {\n      // Exit, then change the token type.\n      effects.exit(\"autolinkProtocol\").type = \"autolinkEmail\";\n      effects.enter(\"autolinkMarker\");\n      effects.consume(code);\n      effects.exit(\"autolinkMarker\");\n      effects.exit(\"autolink\");\n      return ok;\n    }\n    return emailValue(code);\n  }\n\n  /**\n   * In label, where `.` and `>` are *not* allowed.\n   *\n   * Though, this is also used in `emailLabel` to parse other values.\n   *\n   * ```markdown\n   * > | a<user.name@ex-ample.com>b\n   *                    ^\n   * ```\n   *\n   * @type {State}\n   */\n  function emailValue(code) {\n    // ASCII alphanumeric or `-`.\n    if ((code === 45 || asciiAlphanumeric(code)) && size++ < 63) {\n      const next = code === 45 ? emailValue : emailLabel;\n      effects.consume(code);\n      return next;\n    }\n    return nok(code);\n  }\n}", "/**\n * @import {\n *   Construct,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\nexport const blankLine = {\n  partial: true,\n  tokenize: tokenizeBlankLine\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeBlankLine(effects, ok, nok) {\n  return start;\n\n  /**\n   * Start of blank line.\n   *\n   * > \uD83D\uDC49 **Note**: `\u2420` represents a space character.\n   *\n   * ```markdown\n   * > | \u2420\u2420\u240A\n   *     ^\n   * > | \u240A\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    return markdownSpace(code) ? factorySpace(effects, after, \"linePrefix\")(code) : after(code);\n  }\n\n  /**\n   * At eof/eol, after optional whitespace.\n   *\n   * > \uD83D\uDC49 **Note**: `\u2420` represents a space character.\n   *\n   * ```markdown\n   * > | \u2420\u2420\u240A\n   *       ^\n   * > | \u240A\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    return code === null || markdownLineEnding(code) ? ok(code) : nok(code);\n  }\n}", "/**\n * @import {\n *   Construct,\n *   Exiter,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\nexport const blockQuote = {\n  continuation: {\n    tokenize: tokenizeBlockQuoteContinuation\n  },\n  exit,\n  name: 'blockQuote',\n  tokenize: tokenizeBlockQuoteStart\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeBlockQuoteStart(effects, ok, nok) {\n  const self = this;\n  return start;\n\n  /**\n   * Start of block quote.\n   *\n   * ```markdown\n   * > | > a\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    if (code === 62) {\n      const state = self.containerState;\n      if (!state.open) {\n        effects.enter(\"blockQuote\", {\n          _container: true\n        });\n        state.open = true;\n      }\n      effects.enter(\"blockQuotePrefix\");\n      effects.enter(\"blockQuoteMarker\");\n      effects.consume(code);\n      effects.exit(\"blockQuoteMarker\");\n      return after;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After `>`, before optional whitespace.\n   *\n   * ```markdown\n   * > | > a\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    if (markdownSpace(code)) {\n      effects.enter(\"blockQuotePrefixWhitespace\");\n      effects.consume(code);\n      effects.exit(\"blockQuotePrefixWhitespace\");\n      effects.exit(\"blockQuotePrefix\");\n      return ok;\n    }\n    effects.exit(\"blockQuotePrefix\");\n    return ok(code);\n  }\n}\n\n/**\n * Start of block quote continuation.\n *\n * ```markdown\n *   | > a\n * > | > b\n *     ^\n * ```\n *\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeBlockQuoteContinuation(effects, ok, nok) {\n  const self = this;\n  return contStart;\n\n  /**\n   * Start of block quote continuation.\n   *\n   * Also used to parse the first block quote opening.\n   *\n   * ```markdown\n   *   | > a\n   * > | > b\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function contStart(code) {\n    if (markdownSpace(code)) {\n      // Always populated by defaults.\n\n      return factorySpace(effects, contBefore, \"linePrefix\", self.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4)(code);\n    }\n    return contBefore(code);\n  }\n\n  /**\n   * At `>`, after optional whitespace.\n   *\n   * Also used to parse the first block quote opening.\n   *\n   * ```markdown\n   *   | > a\n   * > | > b\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function contBefore(code) {\n    return effects.attempt(blockQuote, ok, nok)(code);\n  }\n}\n\n/** @type {Exiter} */\nfunction exit(effects) {\n  effects.exit(\"blockQuote\");\n}", "/**\n * @import {\n *   Construct,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { asciiPunctuation } from 'micromark-util-character';\n/** @type {Construct} */\nexport const characterEscape = {\n  name: 'characterEscape',\n  tokenize: tokenizeCharacterEscape\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeCharacterEscape(effects, ok, nok) {\n  return start;\n\n  /**\n   * Start of character escape.\n   *\n   * ```markdown\n   * > | a\\*b\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter(\"characterEscape\");\n    effects.enter(\"escapeMarker\");\n    effects.consume(code);\n    effects.exit(\"escapeMarker\");\n    return inside;\n  }\n\n  /**\n   * After `\\`, at punctuation.\n   *\n   * ```markdown\n   * > | a\\*b\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function inside(code) {\n    // ASCII punctuation.\n    if (asciiPunctuation(code)) {\n      effects.enter(\"characterEscapeValue\");\n      effects.consume(code);\n      effects.exit(\"characterEscapeValue\");\n      effects.exit(\"characterEscape\");\n      return ok;\n    }\n    return nok(code);\n  }\n}", "/**\n * @import {\n *   Code,\n *   Construct,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { decodeNamedCharacterReference } from 'decode-named-character-reference';\nimport { asciiAlphanumeric, asciiDigit, asciiHexDigit } from 'micromark-util-character';\n/** @type {Construct} */\nexport const characterReference = {\n  name: 'characterReference',\n  tokenize: tokenizeCharacterReference\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeCharacterReference(effects, ok, nok) {\n  const self = this;\n  let size = 0;\n  /** @type {number} */\n  let max;\n  /** @type {(code: Code) => boolean} */\n  let test;\n  return start;\n\n  /**\n   * Start of character reference.\n   *\n   * ```markdown\n   * > | a&amp;b\n   *      ^\n   * > | a&#123;b\n   *      ^\n   * > | a&#x9;b\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter(\"characterReference\");\n    effects.enter(\"characterReferenceMarker\");\n    effects.consume(code);\n    effects.exit(\"characterReferenceMarker\");\n    return open;\n  }\n\n  /**\n   * After `&`, at `#` for numeric references or alphanumeric for named\n   * references.\n   *\n   * ```markdown\n   * > | a&amp;b\n   *       ^\n   * > | a&#123;b\n   *       ^\n   * > | a&#x9;b\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function open(code) {\n    if (code === 35) {\n      effects.enter(\"characterReferenceMarkerNumeric\");\n      effects.consume(code);\n      effects.exit(\"characterReferenceMarkerNumeric\");\n      return numeric;\n    }\n    effects.enter(\"characterReferenceValue\");\n    max = 31;\n    test = asciiAlphanumeric;\n    return value(code);\n  }\n\n  /**\n   * After `#`, at `x` for hexadecimals or digit for decimals.\n   *\n   * ```markdown\n   * > | a&#123;b\n   *        ^\n   * > | a&#x9;b\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function numeric(code) {\n    if (code === 88 || code === 120) {\n      effects.enter(\"characterReferenceMarkerHexadecimal\");\n      effects.consume(code);\n      effects.exit(\"characterReferenceMarkerHexadecimal\");\n      effects.enter(\"characterReferenceValue\");\n      max = 6;\n      test = asciiHexDigit;\n      return value;\n    }\n    effects.enter(\"characterReferenceValue\");\n    max = 7;\n    test = asciiDigit;\n    return value(code);\n  }\n\n  /**\n   * After markers (`&#x`, `&#`, or `&`), in value, before `;`.\n   *\n   * The character reference kind defines what and how many characters are\n   * allowed.\n   *\n   * ```markdown\n   * > | a&amp;b\n   *       ^^^\n   * > | a&#123;b\n   *        ^^^\n   * > | a&#x9;b\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function value(code) {\n    if (code === 59 && size) {\n      const token = effects.exit(\"characterReferenceValue\");\n      if (test === asciiAlphanumeric && !decodeNamedCharacterReference(self.sliceSerialize(token))) {\n        return nok(code);\n      }\n\n      // To do: `markdown-rs` uses a different name:\n      // `CharacterReferenceMarkerSemi`.\n      effects.enter(\"characterReferenceMarker\");\n      effects.consume(code);\n      effects.exit(\"characterReferenceMarker\");\n      effects.exit(\"characterReference\");\n      return ok;\n    }\n    if (test(code) && size++ < max) {\n      effects.consume(code);\n      return value;\n    }\n    return nok(code);\n  }\n}", "/**\n * @import {\n *   Code,\n *   Construct,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\nconst nonLazyContinuation = {\n  partial: true,\n  tokenize: tokenizeNonLazyContinuation\n};\n\n/** @type {Construct} */\nexport const codeFenced = {\n  concrete: true,\n  name: 'codeFenced',\n  tokenize: tokenizeCodeFenced\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeCodeFenced(effects, ok, nok) {\n  const self = this;\n  /** @type {Construct} */\n  const closeStart = {\n    partial: true,\n    tokenize: tokenizeCloseStart\n  };\n  let initialPrefix = 0;\n  let sizeOpen = 0;\n  /** @type {NonNullable<Code>} */\n  let marker;\n  return start;\n\n  /**\n   * Start of code.\n   *\n   * ```markdown\n   * > | ~~~js\n   *     ^\n   *   | alert(1)\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    // To do: parse whitespace like `markdown-rs`.\n    return beforeSequenceOpen(code);\n  }\n\n  /**\n   * In opening fence, after prefix, at sequence.\n   *\n   * ```markdown\n   * > | ~~~js\n   *     ^\n   *   | alert(1)\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function beforeSequenceOpen(code) {\n    const tail = self.events[self.events.length - 1];\n    initialPrefix = tail && tail[1].type === \"linePrefix\" ? tail[2].sliceSerialize(tail[1], true).length : 0;\n    marker = code;\n    effects.enter(\"codeFenced\");\n    effects.enter(\"codeFencedFence\");\n    effects.enter(\"codeFencedFenceSequence\");\n    return sequenceOpen(code);\n  }\n\n  /**\n   * In opening fence sequence.\n   *\n   * ```markdown\n   * > | ~~~js\n   *      ^\n   *   | alert(1)\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function sequenceOpen(code) {\n    if (code === marker) {\n      sizeOpen++;\n      effects.consume(code);\n      return sequenceOpen;\n    }\n    if (sizeOpen < 3) {\n      return nok(code);\n    }\n    effects.exit(\"codeFencedFenceSequence\");\n    return markdownSpace(code) ? factorySpace(effects, infoBefore, \"whitespace\")(code) : infoBefore(code);\n  }\n\n  /**\n   * In opening fence, after the sequence (and optional whitespace), before info.\n   *\n   * ```markdown\n   * > | ~~~js\n   *        ^\n   *   | alert(1)\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function infoBefore(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit(\"codeFencedFence\");\n      return self.interrupt ? ok(code) : effects.check(nonLazyContinuation, atNonLazyBreak, after)(code);\n    }\n    effects.enter(\"codeFencedFenceInfo\");\n    effects.enter(\"chunkString\", {\n      contentType: \"string\"\n    });\n    return info(code);\n  }\n\n  /**\n   * In info.\n   *\n   * ```markdown\n   * > | ~~~js\n   *        ^\n   *   | alert(1)\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function info(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit(\"chunkString\");\n      effects.exit(\"codeFencedFenceInfo\");\n      return infoBefore(code);\n    }\n    if (markdownSpace(code)) {\n      effects.exit(\"chunkString\");\n      effects.exit(\"codeFencedFenceInfo\");\n      return factorySpace(effects, metaBefore, \"whitespace\")(code);\n    }\n    if (code === 96 && code === marker) {\n      return nok(code);\n    }\n    effects.consume(code);\n    return info;\n  }\n\n  /**\n   * In opening fence, after info and whitespace, before meta.\n   *\n   * ```markdown\n   * > | ~~~js eval\n   *           ^\n   *   | alert(1)\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function metaBefore(code) {\n    if (code === null || markdownLineEnding(code)) {\n      return infoBefore(code);\n    }\n    effects.enter(\"codeFencedFenceMeta\");\n    effects.enter(\"chunkString\", {\n      contentType: \"string\"\n    });\n    return meta(code);\n  }\n\n  /**\n   * In meta.\n   *\n   * ```markdown\n   * > | ~~~js eval\n   *           ^\n   *   | alert(1)\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function meta(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit(\"chunkString\");\n      effects.exit(\"codeFencedFenceMeta\");\n      return infoBefore(code);\n    }\n    if (code === 96 && code === marker) {\n      return nok(code);\n    }\n    effects.consume(code);\n    return meta;\n  }\n\n  /**\n   * At eol/eof in code, before a non-lazy closing fence or content.\n   *\n   * ```markdown\n   * > | ~~~js\n   *          ^\n   * > | alert(1)\n   *             ^\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function atNonLazyBreak(code) {\n    return effects.attempt(closeStart, after, contentBefore)(code);\n  }\n\n  /**\n   * Before code content, not a closing fence, at eol.\n   *\n   * ```markdown\n   *   | ~~~js\n   * > | alert(1)\n   *             ^\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function contentBefore(code) {\n    effects.enter(\"lineEnding\");\n    effects.consume(code);\n    effects.exit(\"lineEnding\");\n    return contentStart;\n  }\n\n  /**\n   * Before code content, not a closing fence.\n   *\n   * ```markdown\n   *   | ~~~js\n   * > | alert(1)\n   *     ^\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function contentStart(code) {\n    return initialPrefix > 0 && markdownSpace(code) ? factorySpace(effects, beforeContentChunk, \"linePrefix\", initialPrefix + 1)(code) : beforeContentChunk(code);\n  }\n\n  /**\n   * Before code content, after optional prefix.\n   *\n   * ```markdown\n   *   | ~~~js\n   * > | alert(1)\n   *     ^\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function beforeContentChunk(code) {\n    if (code === null || markdownLineEnding(code)) {\n      return effects.check(nonLazyContinuation, atNonLazyBreak, after)(code);\n    }\n    effects.enter(\"codeFlowValue\");\n    return contentChunk(code);\n  }\n\n  /**\n   * In code content.\n   *\n   * ```markdown\n   *   | ~~~js\n   * > | alert(1)\n   *     ^^^^^^^^\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function contentChunk(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit(\"codeFlowValue\");\n      return beforeContentChunk(code);\n    }\n    effects.consume(code);\n    return contentChunk;\n  }\n\n  /**\n   * After code.\n   *\n   * ```markdown\n   *   | ~~~js\n   *   | alert(1)\n   * > | ~~~\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    effects.exit(\"codeFenced\");\n    return ok(code);\n  }\n\n  /**\n   * @this {TokenizeContext}\n   *   Context.\n   * @type {Tokenizer}\n   */\n  function tokenizeCloseStart(effects, ok, nok) {\n    let size = 0;\n    return startBefore;\n\n    /**\n     *\n     *\n     * @type {State}\n     */\n    function startBefore(code) {\n      effects.enter(\"lineEnding\");\n      effects.consume(code);\n      effects.exit(\"lineEnding\");\n      return start;\n    }\n\n    /**\n     * Before closing fence, at optional whitespace.\n     *\n     * ```markdown\n     *   | ~~~js\n     *   | alert(1)\n     * > | ~~~\n     *     ^\n     * ```\n     *\n     * @type {State}\n     */\n    function start(code) {\n      // Always populated by defaults.\n\n      // To do: `enter` here or in next state?\n      effects.enter(\"codeFencedFence\");\n      return markdownSpace(code) ? factorySpace(effects, beforeSequenceClose, \"linePrefix\", self.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4)(code) : beforeSequenceClose(code);\n    }\n\n    /**\n     * In closing fence, after optional whitespace, at sequence.\n     *\n     * ```markdown\n     *   | ~~~js\n     *   | alert(1)\n     * > | ~~~\n     *     ^\n     * ```\n     *\n     * @type {State}\n     */\n    function beforeSequenceClose(code) {\n      if (code === marker) {\n        effects.enter(\"codeFencedFenceSequence\");\n        return sequenceClose(code);\n      }\n      return nok(code);\n    }\n\n    /**\n     * In closing fence sequence.\n     *\n     * ```markdown\n     *   | ~~~js\n     *   | alert(1)\n     * > | ~~~\n     *     ^\n     * ```\n     *\n     * @type {State}\n     */\n    function sequenceClose(code) {\n      if (code === marker) {\n        size++;\n        effects.consume(code);\n        return sequenceClose;\n      }\n      if (size >= sizeOpen) {\n        effects.exit(\"codeFencedFenceSequence\");\n        return markdownSpace(code) ? factorySpace(effects, sequenceCloseAfter, \"whitespace\")(code) : sequenceCloseAfter(code);\n      }\n      return nok(code);\n    }\n\n    /**\n     * After closing fence sequence, after optional whitespace.\n     *\n     * ```markdown\n     *   | ~~~js\n     *   | alert(1)\n     * > | ~~~\n     *        ^\n     * ```\n     *\n     * @type {State}\n     */\n    function sequenceCloseAfter(code) {\n      if (code === null || markdownLineEnding(code)) {\n        effects.exit(\"codeFencedFence\");\n        return ok(code);\n      }\n      return nok(code);\n    }\n  }\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeNonLazyContinuation(effects, ok, nok) {\n  const self = this;\n  return start;\n\n  /**\n   *\n   *\n   * @type {State}\n   */\n  function start(code) {\n    if (code === null) {\n      return nok(code);\n    }\n    effects.enter(\"lineEnding\");\n    effects.consume(code);\n    effects.exit(\"lineEnding\");\n    return lineStart;\n  }\n\n  /**\n   *\n   *\n   * @type {State}\n   */\n  function lineStart(code) {\n    return self.parser.lazy[self.now().line] ? nok(code) : ok(code);\n  }\n}", "/**\n * @import {\n *   Construct,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\nexport const codeIndented = {\n  name: 'codeIndented',\n  tokenize: tokenizeCodeIndented\n};\n\n/** @type {Construct} */\nconst furtherStart = {\n  partial: true,\n  tokenize: tokenizeFurtherStart\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeCodeIndented(effects, ok, nok) {\n  const self = this;\n  return start;\n\n  /**\n   * Start of code (indented).\n   *\n   * > **Parsing note**: it is not needed to check if this first line is a\n   * > filled line (that it has a non-whitespace character), because blank lines\n   * > are parsed already, so we never run into that.\n   *\n   * ```markdown\n   * > |     aaa\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    // To do: manually check if interrupting like `markdown-rs`.\n\n    effects.enter(\"codeIndented\");\n    // To do: use an improved `space_or_tab` function like `markdown-rs`,\n    // so that we can drop the next state.\n    return factorySpace(effects, afterPrefix, \"linePrefix\", 4 + 1)(code);\n  }\n\n  /**\n   * At start, after 1 or 4 spaces.\n   *\n   * ```markdown\n   * > |     aaa\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function afterPrefix(code) {\n    const tail = self.events[self.events.length - 1];\n    return tail && tail[1].type === \"linePrefix\" && tail[2].sliceSerialize(tail[1], true).length >= 4 ? atBreak(code) : nok(code);\n  }\n\n  /**\n   * At a break.\n   *\n   * ```markdown\n   * > |     aaa\n   *         ^  ^\n   * ```\n   *\n   * @type {State}\n   */\n  function atBreak(code) {\n    if (code === null) {\n      return after(code);\n    }\n    if (markdownLineEnding(code)) {\n      return effects.attempt(furtherStart, atBreak, after)(code);\n    }\n    effects.enter(\"codeFlowValue\");\n    return inside(code);\n  }\n\n  /**\n   * In code content.\n   *\n   * ```markdown\n   * > |     aaa\n   *         ^^^^\n   * ```\n   *\n   * @type {State}\n   */\n  function inside(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit(\"codeFlowValue\");\n      return atBreak(code);\n    }\n    effects.consume(code);\n    return inside;\n  }\n\n  /** @type {State} */\n  function after(code) {\n    effects.exit(\"codeIndented\");\n    // To do: allow interrupting like `markdown-rs`.\n    // Feel free to interrupt.\n    // tokenizer.interrupt = false\n    return ok(code);\n  }\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeFurtherStart(effects, ok, nok) {\n  const self = this;\n  return furtherStart;\n\n  /**\n   * At eol, trying to parse another indent.\n   *\n   * ```markdown\n   * > |     aaa\n   *            ^\n   *   |     bbb\n   * ```\n   *\n   * @type {State}\n   */\n  function furtherStart(code) {\n    // To do: improve `lazy` / `pierce` handling.\n    // If this is a lazy line, it can\u2019t be code.\n    if (self.parser.lazy[self.now().line]) {\n      return nok(code);\n    }\n    if (markdownLineEnding(code)) {\n      effects.enter(\"lineEnding\");\n      effects.consume(code);\n      effects.exit(\"lineEnding\");\n      return furtherStart;\n    }\n\n    // To do: the code here in `micromark-js` is a bit different from\n    // `markdown-rs` because there it can attempt spaces.\n    // We can\u2019t yet.\n    //\n    // To do: use an improved `space_or_tab` function like `markdown-rs`,\n    // so that we can drop the next state.\n    return factorySpace(effects, afterPrefix, \"linePrefix\", 4 + 1)(code);\n  }\n\n  /**\n   * At start, after 1 or 4 spaces.\n   *\n   * ```markdown\n   * > |     aaa\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function afterPrefix(code) {\n    const tail = self.events[self.events.length - 1];\n    return tail && tail[1].type === \"linePrefix\" && tail[2].sliceSerialize(tail[1], true).length >= 4 ? ok(code) : markdownLineEnding(code) ? furtherStart(code) : nok(code);\n  }\n}", "/**\n * @import {\n *   Construct,\n *   Previous,\n *   Resolver,\n *   State,\n *   TokenizeContext,\n *   Tokenizer,\n *   Token\n * } from 'micromark-util-types'\n */\n\nimport { markdownLineEnding } from 'micromark-util-character';\n/** @type {Construct} */\nexport const codeText = {\n  name: 'codeText',\n  previous,\n  resolve: resolveCodeText,\n  tokenize: tokenizeCodeText\n};\n\n// To do: next major: don\u2019t resolve, like `markdown-rs`.\n/** @type {Resolver} */\nfunction resolveCodeText(events) {\n  let tailExitIndex = events.length - 4;\n  let headEnterIndex = 3;\n  /** @type {number} */\n  let index;\n  /** @type {number | undefined} */\n  let enter;\n\n  // If we start and end with an EOL or a space.\n  if ((events[headEnterIndex][1].type === \"lineEnding\" || events[headEnterIndex][1].type === 'space') && (events[tailExitIndex][1].type === \"lineEnding\" || events[tailExitIndex][1].type === 'space')) {\n    index = headEnterIndex;\n\n    // And we have data.\n    while (++index < tailExitIndex) {\n      if (events[index][1].type === \"codeTextData\") {\n        // Then we have padding.\n        events[headEnterIndex][1].type = \"codeTextPadding\";\n        events[tailExitIndex][1].type = \"codeTextPadding\";\n        headEnterIndex += 2;\n        tailExitIndex -= 2;\n        break;\n      }\n    }\n  }\n\n  // Merge adjacent spaces and data.\n  index = headEnterIndex - 1;\n  tailExitIndex++;\n  while (++index <= tailExitIndex) {\n    if (enter === undefined) {\n      if (index !== tailExitIndex && events[index][1].type !== \"lineEnding\") {\n        enter = index;\n      }\n    } else if (index === tailExitIndex || events[index][1].type === \"lineEnding\") {\n      events[enter][1].type = \"codeTextData\";\n      if (index !== enter + 2) {\n        events[enter][1].end = events[index - 1][1].end;\n        events.splice(enter + 2, index - enter - 2);\n        tailExitIndex -= index - enter - 2;\n        index = enter + 2;\n      }\n      enter = undefined;\n    }\n  }\n  return events;\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Previous}\n */\nfunction previous(code) {\n  // If there is a previous code, there will always be a tail.\n  return code !== 96 || this.events[this.events.length - 1][1].type === \"characterEscape\";\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeCodeText(effects, ok, nok) {\n  const self = this;\n  let sizeOpen = 0;\n  /** @type {number} */\n  let size;\n  /** @type {Token} */\n  let token;\n  return start;\n\n  /**\n   * Start of code (text).\n   *\n   * ```markdown\n   * > | `a`\n   *     ^\n   * > | \\`a`\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter(\"codeText\");\n    effects.enter(\"codeTextSequence\");\n    return sequenceOpen(code);\n  }\n\n  /**\n   * In opening sequence.\n   *\n   * ```markdown\n   * > | `a`\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function sequenceOpen(code) {\n    if (code === 96) {\n      effects.consume(code);\n      sizeOpen++;\n      return sequenceOpen;\n    }\n    effects.exit(\"codeTextSequence\");\n    return between(code);\n  }\n\n  /**\n   * Between something and something else.\n   *\n   * ```markdown\n   * > | `a`\n   *      ^^\n   * ```\n   *\n   * @type {State}\n   */\n  function between(code) {\n    // EOF.\n    if (code === null) {\n      return nok(code);\n    }\n\n    // To do: next major: don\u2019t do spaces in resolve, but when compiling,\n    // like `markdown-rs`.\n    // Tabs don\u2019t work, and virtual spaces don\u2019t make sense.\n    if (code === 32) {\n      effects.enter('space');\n      effects.consume(code);\n      effects.exit('space');\n      return between;\n    }\n\n    // Closing fence? Could also be data.\n    if (code === 96) {\n      token = effects.enter(\"codeTextSequence\");\n      size = 0;\n      return sequenceClose(code);\n    }\n    if (markdownLineEnding(code)) {\n      effects.enter(\"lineEnding\");\n      effects.consume(code);\n      effects.exit(\"lineEnding\");\n      return between;\n    }\n\n    // Data.\n    effects.enter(\"codeTextData\");\n    return data(code);\n  }\n\n  /**\n   * In data.\n   *\n   * ```markdown\n   * > | `a`\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function data(code) {\n    if (code === null || code === 32 || code === 96 || markdownLineEnding(code)) {\n      effects.exit(\"codeTextData\");\n      return between(code);\n    }\n    effects.consume(code);\n    return data;\n  }\n\n  /**\n   * In closing sequence.\n   *\n   * ```markdown\n   * > | `a`\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function sequenceClose(code) {\n    // More.\n    if (code === 96) {\n      effects.consume(code);\n      size++;\n      return sequenceClose;\n    }\n\n    // Done!\n    if (size === sizeOpen) {\n      effects.exit(\"codeTextSequence\");\n      effects.exit(\"codeText\");\n      return ok(code);\n    }\n\n    // More or less accents: mark as data.\n    token.type = \"codeTextData\";\n    return data(code);\n  }\n}", "/**\n * Some of the internal operations of micromark do lots of editing\n * operations on very large arrays. This runs into problems with two\n * properties of most circa-2020 JavaScript interpreters:\n *\n *  - Array-length modifications at the high end of an array (push/pop) are\n *    expected to be common and are implemented in (amortized) time\n *    proportional to the number of elements added or removed, whereas\n *    other operations (shift/unshift and splice) are much less efficient.\n *  - Function arguments are passed on the stack, so adding tens of thousands\n *    of elements to an array with `arr.push(...newElements)` will frequently\n *    cause stack overflows. (see <https://stackoverflow.com/questions/22123769/rangeerror-maximum-call-stack-size-exceeded-why>)\n *\n * SpliceBuffers are an implementation of gap buffers, which are a\n * generalization of the \"queue made of two stacks\" idea. The splice buffer\n * maintains a cursor, and moving the cursor has cost proportional to the\n * distance the cursor moves, but inserting, deleting, or splicing in\n * new information at the cursor is as efficient as the push/pop operation.\n * This allows for an efficient sequence of splices (or pushes, pops, shifts,\n * or unshifts) as long such edits happen at the same part of the array or\n * generally sweep through the array from the beginning to the end.\n *\n * The interface for splice buffers also supports large numbers of inputs by\n * passing a single array argument rather passing multiple arguments on the\n * function call stack.\n *\n * @template T\n *   Item type.\n */\nexport class SpliceBuffer {\n  /**\n   * @param {ReadonlyArray<T> | null | undefined} [initial]\n   *   Initial items (optional).\n   * @returns\n   *   Splice buffer.\n   */\n  constructor(initial) {\n    /** @type {Array<T>} */\n    this.left = initial ? [...initial] : [];\n    /** @type {Array<T>} */\n    this.right = [];\n  }\n\n  /**\n   * Array access;\n   * does not move the cursor.\n   *\n   * @param {number} index\n   *   Index.\n   * @return {T}\n   *   Item.\n   */\n  get(index) {\n    if (index < 0 || index >= this.left.length + this.right.length) {\n      throw new RangeError('Cannot access index `' + index + '` in a splice buffer of size `' + (this.left.length + this.right.length) + '`');\n    }\n    if (index < this.left.length) return this.left[index];\n    return this.right[this.right.length - index + this.left.length - 1];\n  }\n\n  /**\n   * The length of the splice buffer, one greater than the largest index in the\n   * array.\n   */\n  get length() {\n    return this.left.length + this.right.length;\n  }\n\n  /**\n   * Remove and return `list[0]`;\n   * moves the cursor to `0`.\n   *\n   * @returns {T | undefined}\n   *   Item, optional.\n   */\n  shift() {\n    this.setCursor(0);\n    return this.right.pop();\n  }\n\n  /**\n   * Slice the buffer to get an array;\n   * does not move the cursor.\n   *\n   * @param {number} start\n   *   Start.\n   * @param {number | null | undefined} [end]\n   *   End (optional).\n   * @returns {Array<T>}\n   *   Array of items.\n   */\n  slice(start, end) {\n    /** @type {number} */\n    const stop = end === null || end === undefined ? Number.POSITIVE_INFINITY : end;\n    if (stop < this.left.length) {\n      return this.left.slice(start, stop);\n    }\n    if (start > this.left.length) {\n      return this.right.slice(this.right.length - stop + this.left.length, this.right.length - start + this.left.length).reverse();\n    }\n    return this.left.slice(start).concat(this.right.slice(this.right.length - stop + this.left.length).reverse());\n  }\n\n  /**\n   * Mimics the behavior of Array.prototype.splice() except for the change of\n   * interface necessary to avoid segfaults when patching in very large arrays.\n   *\n   * This operation moves cursor is moved to `start` and results in the cursor\n   * placed after any inserted items.\n   *\n   * @param {number} start\n   *   Start;\n   *   zero-based index at which to start changing the array;\n   *   negative numbers count backwards from the end of the array and values\n   *   that are out-of bounds are clamped to the appropriate end of the array.\n   * @param {number | null | undefined} [deleteCount=0]\n   *   Delete count (default: `0`);\n   *   maximum number of elements to delete, starting from start.\n   * @param {Array<T> | null | undefined} [items=[]]\n   *   Items to include in place of the deleted items (default: `[]`).\n   * @return {Array<T>}\n   *   Any removed items.\n   */\n  splice(start, deleteCount, items) {\n    /** @type {number} */\n    const count = deleteCount || 0;\n    this.setCursor(Math.trunc(start));\n    const removed = this.right.splice(this.right.length - count, Number.POSITIVE_INFINITY);\n    if (items) chunkedPush(this.left, items);\n    return removed.reverse();\n  }\n\n  /**\n   * Remove and return the highest-numbered item in the array, so\n   * `list[list.length - 1]`;\n   * Moves the cursor to `length`.\n   *\n   * @returns {T | undefined}\n   *   Item, optional.\n   */\n  pop() {\n    this.setCursor(Number.POSITIVE_INFINITY);\n    return this.left.pop();\n  }\n\n  /**\n   * Inserts a single item to the high-numbered side of the array;\n   * moves the cursor to `length`.\n   *\n   * @param {T} item\n   *   Item.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  push(item) {\n    this.setCursor(Number.POSITIVE_INFINITY);\n    this.left.push(item);\n  }\n\n  /**\n   * Inserts many items to the high-numbered side of the array.\n   * Moves the cursor to `length`.\n   *\n   * @param {Array<T>} items\n   *   Items.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  pushMany(items) {\n    this.setCursor(Number.POSITIVE_INFINITY);\n    chunkedPush(this.left, items);\n  }\n\n  /**\n   * Inserts a single item to the low-numbered side of the array;\n   * Moves the cursor to `0`.\n   *\n   * @param {T} item\n   *   Item.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  unshift(item) {\n    this.setCursor(0);\n    this.right.push(item);\n  }\n\n  /**\n   * Inserts many items to the low-numbered side of the array;\n   * moves the cursor to `0`.\n   *\n   * @param {Array<T>} items\n   *   Items.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  unshiftMany(items) {\n    this.setCursor(0);\n    chunkedPush(this.right, items.reverse());\n  }\n\n  /**\n   * Move the cursor to a specific position in the array. Requires\n   * time proportional to the distance moved.\n   *\n   * If `n < 0`, the cursor will end up at the beginning.\n   * If `n > length`, the cursor will end up at the end.\n   *\n   * @param {number} n\n   *   Position.\n   * @return {undefined}\n   *   Nothing.\n   */\n  setCursor(n) {\n    if (n === this.left.length || n > this.left.length && this.right.length === 0 || n < 0 && this.left.length === 0) return;\n    if (n < this.left.length) {\n      // Move cursor to the this.left\n      const removed = this.left.splice(n, Number.POSITIVE_INFINITY);\n      chunkedPush(this.right, removed.reverse());\n    } else {\n      // Move cursor to the this.right\n      const removed = this.right.splice(this.left.length + this.right.length - n, Number.POSITIVE_INFINITY);\n      chunkedPush(this.left, removed.reverse());\n    }\n  }\n}\n\n/**\n * Avoid stack overflow by pushing items onto the stack in segments\n *\n * @template T\n *   Item type.\n * @param {Array<T>} list\n *   List to inject into.\n * @param {ReadonlyArray<T>} right\n *   Items to inject.\n * @return {undefined}\n *   Nothing.\n */\nfunction chunkedPush(list, right) {\n  /** @type {number} */\n  let chunkStart = 0;\n  if (right.length < 10000) {\n    list.push(...right);\n  } else {\n    while (chunkStart < right.length) {\n      list.push(...right.slice(chunkStart, chunkStart + 10000));\n      chunkStart += 10000;\n    }\n  }\n}", "/**\n * @import {Chunk, Event, Token} from 'micromark-util-types'\n */\n\nimport { splice } from 'micromark-util-chunked';\nimport { SpliceBuffer } from './lib/splice-buffer.js';\n\n// Hidden API exposed for testing.\nexport { SpliceBuffer } from './lib/splice-buffer.js';\n\n/**\n * Tokenize subcontent.\n *\n * @param {Array<Event>} eventsArray\n *   List of events.\n * @returns {boolean}\n *   Whether subtokens were found.\n */\n// eslint-disable-next-line complexity\nexport function subtokenize(eventsArray) {\n  /** @type {Record<string, number>} */\n  const jumps = {};\n  let index = -1;\n  /** @type {Event} */\n  let event;\n  /** @type {number | undefined} */\n  let lineIndex;\n  /** @type {number} */\n  let otherIndex;\n  /** @type {Event} */\n  let otherEvent;\n  /** @type {Array<Event>} */\n  let parameters;\n  /** @type {Array<Event>} */\n  let subevents;\n  /** @type {boolean | undefined} */\n  let more;\n  const events = new SpliceBuffer(eventsArray);\n  while (++index < events.length) {\n    while (index in jumps) {\n      index = jumps[index];\n    }\n    event = events.get(index);\n\n    // Add a hook for the GFM tasklist extension, which needs to know if text\n    // is in the first content of a list item.\n    if (index && event[1].type === \"chunkFlow\" && events.get(index - 1)[1].type === \"listItemPrefix\") {\n      subevents = event[1]._tokenizer.events;\n      otherIndex = 0;\n      if (otherIndex < subevents.length && subevents[otherIndex][1].type === \"lineEndingBlank\") {\n        otherIndex += 2;\n      }\n      if (otherIndex < subevents.length && subevents[otherIndex][1].type === \"content\") {\n        while (++otherIndex < subevents.length) {\n          if (subevents[otherIndex][1].type === \"content\") {\n            break;\n          }\n          if (subevents[otherIndex][1].type === \"chunkText\") {\n            subevents[otherIndex][1]._isInFirstContentOfListItem = true;\n            otherIndex++;\n          }\n        }\n      }\n    }\n\n    // Enter.\n    if (event[0] === 'enter') {\n      if (event[1].contentType) {\n        Object.assign(jumps, subcontent(events, index));\n        index = jumps[index];\n        more = true;\n      }\n    }\n    // Exit.\n    else if (event[1]._container) {\n      otherIndex = index;\n      lineIndex = undefined;\n      while (otherIndex--) {\n        otherEvent = events.get(otherIndex);\n        if (otherEvent[1].type === \"lineEnding\" || otherEvent[1].type === \"lineEndingBlank\") {\n          if (otherEvent[0] === 'enter') {\n            if (lineIndex) {\n              events.get(lineIndex)[1].type = \"lineEndingBlank\";\n            }\n            otherEvent[1].type = \"lineEnding\";\n            lineIndex = otherIndex;\n          }\n        } else if (otherEvent[1].type === \"linePrefix\") {\n          // Move past.\n        } else {\n          break;\n        }\n      }\n      if (lineIndex) {\n        // Fix position.\n        event[1].end = {\n          ...events.get(lineIndex)[1].start\n        };\n\n        // Switch container exit w/ line endings.\n        parameters = events.slice(lineIndex, index);\n        parameters.unshift(event);\n        events.splice(lineIndex, index - lineIndex + 1, parameters);\n      }\n    }\n  }\n\n  // The changes to the `events` buffer must be copied back into the eventsArray\n  splice(eventsArray, 0, Number.POSITIVE_INFINITY, events.slice(0));\n  return !more;\n}\n\n/**\n * Tokenize embedded tokens.\n *\n * @param {SpliceBuffer<Event>} events\n *   Events.\n * @param {number} eventIndex\n *   Index.\n * @returns {Record<string, number>}\n *   Gaps.\n */\nfunction subcontent(events, eventIndex) {\n  const token = events.get(eventIndex)[1];\n  const context = events.get(eventIndex)[2];\n  let startPosition = eventIndex - 1;\n  /** @type {Array<number>} */\n  const startPositions = [];\n  const tokenizer = token._tokenizer || context.parser[token.contentType](token.start);\n  const childEvents = tokenizer.events;\n  /** @type {Array<[number, number]>} */\n  const jumps = [];\n  /** @type {Record<string, number>} */\n  const gaps = {};\n  /** @type {Array<Chunk>} */\n  let stream;\n  /** @type {Token | undefined} */\n  let previous;\n  let index = -1;\n  /** @type {Token | undefined} */\n  let current = token;\n  let adjust = 0;\n  let start = 0;\n  const breaks = [start];\n\n  // Loop forward through the linked tokens to pass them in order to the\n  // subtokenizer.\n  while (current) {\n    // Find the position of the event for this token.\n    while (events.get(++startPosition)[1] !== current) {\n      // Empty.\n    }\n    startPositions.push(startPosition);\n    if (!current._tokenizer) {\n      stream = context.sliceStream(current);\n      if (!current.next) {\n        stream.push(null);\n      }\n      if (previous) {\n        tokenizer.defineSkip(current.start);\n      }\n      if (current._isInFirstContentOfListItem) {\n        tokenizer._gfmTasklistFirstContentOfListItem = true;\n      }\n      tokenizer.write(stream);\n      if (current._isInFirstContentOfListItem) {\n        tokenizer._gfmTasklistFirstContentOfListItem = undefined;\n      }\n    }\n\n    // Unravel the next token.\n    previous = current;\n    current = current.next;\n  }\n\n  // Now, loop back through all events (and linked tokens), to figure out which\n  // parts belong where.\n  current = token;\n  while (++index < childEvents.length) {\n    if (\n    // Find a void token that includes a break.\n    childEvents[index][0] === 'exit' && childEvents[index - 1][0] === 'enter' && childEvents[index][1].type === childEvents[index - 1][1].type && childEvents[index][1].start.line !== childEvents[index][1].end.line) {\n      start = index + 1;\n      breaks.push(start);\n      // Help GC.\n      current._tokenizer = undefined;\n      current.previous = undefined;\n      current = current.next;\n    }\n  }\n\n  // Help GC.\n  tokenizer.events = [];\n\n  // If there\u2019s one more token (which is the cases for lines that end in an\n  // EOF), that\u2019s perfect: the last point we found starts it.\n  // If there isn\u2019t then make sure any remaining content is added to it.\n  if (current) {\n    // Help GC.\n    current._tokenizer = undefined;\n    current.previous = undefined;\n  } else {\n    breaks.pop();\n  }\n\n  // Now splice the events from the subtokenizer into the current events,\n  // moving back to front so that splice indices aren\u2019t affected.\n  index = breaks.length;\n  while (index--) {\n    const slice = childEvents.slice(breaks[index], breaks[index + 1]);\n    const start = startPositions.pop();\n    jumps.push([start, start + slice.length - 1]);\n    events.splice(start, 2, slice);\n  }\n  jumps.reverse();\n  index = -1;\n  while (++index < jumps.length) {\n    gaps[adjust + jumps[index][0]] = adjust + jumps[index][1];\n    adjust += jumps[index][1] - jumps[index][0] - 1;\n  }\n  return gaps;\n}", "/**\n * @import {\n *   Construct,\n *   Resolver,\n *   State,\n *   TokenizeContext,\n *   Tokenizer,\n *   Token\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding } from 'micromark-util-character';\nimport { subtokenize } from 'micromark-util-subtokenize';\n/**\n * No name because it must not be turned off.\n * @type {Construct}\n */\nexport const content = {\n  resolve: resolveContent,\n  tokenize: tokenizeContent\n};\n\n/** @type {Construct} */\nconst continuationConstruct = {\n  partial: true,\n  tokenize: tokenizeContinuation\n};\n\n/**\n * Content is transparent: it\u2019s parsed right now. That way, definitions are also\n * parsed right now: before text in paragraphs (specifically, media) are parsed.\n *\n * @type {Resolver}\n */\nfunction resolveContent(events) {\n  subtokenize(events);\n  return events;\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeContent(effects, ok) {\n  /** @type {Token | undefined} */\n  let previous;\n  return chunkStart;\n\n  /**\n   * Before a content chunk.\n   *\n   * ```markdown\n   * > | abc\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function chunkStart(code) {\n    effects.enter(\"content\");\n    previous = effects.enter(\"chunkContent\", {\n      contentType: \"content\"\n    });\n    return chunkInside(code);\n  }\n\n  /**\n   * In a content chunk.\n   *\n   * ```markdown\n   * > | abc\n   *     ^^^\n   * ```\n   *\n   * @type {State}\n   */\n  function chunkInside(code) {\n    if (code === null) {\n      return contentEnd(code);\n    }\n\n    // To do: in `markdown-rs`, each line is parsed on its own, and everything\n    // is stitched together resolving.\n    if (markdownLineEnding(code)) {\n      return effects.check(continuationConstruct, contentContinue, contentEnd)(code);\n    }\n\n    // Data.\n    effects.consume(code);\n    return chunkInside;\n  }\n\n  /**\n   *\n   *\n   * @type {State}\n   */\n  function contentEnd(code) {\n    effects.exit(\"chunkContent\");\n    effects.exit(\"content\");\n    return ok(code);\n  }\n\n  /**\n   *\n   *\n   * @type {State}\n   */\n  function contentContinue(code) {\n    effects.consume(code);\n    effects.exit(\"chunkContent\");\n    previous.next = effects.enter(\"chunkContent\", {\n      contentType: \"content\",\n      previous\n    });\n    previous = previous.next;\n    return chunkInside;\n  }\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeContinuation(effects, ok, nok) {\n  const self = this;\n  return startLookahead;\n\n  /**\n   *\n   *\n   * @type {State}\n   */\n  function startLookahead(code) {\n    effects.exit(\"chunkContent\");\n    effects.enter(\"lineEnding\");\n    effects.consume(code);\n    effects.exit(\"lineEnding\");\n    return factorySpace(effects, prefixed, \"linePrefix\");\n  }\n\n  /**\n   *\n   *\n   * @type {State}\n   */\n  function prefixed(code) {\n    if (code === null || markdownLineEnding(code)) {\n      return nok(code);\n    }\n\n    // Always populated by defaults.\n\n    const tail = self.events[self.events.length - 1];\n    if (!self.parser.constructs.disable.null.includes('codeIndented') && tail && tail[1].type === \"linePrefix\" && tail[2].sliceSerialize(tail[1], true).length >= 4) {\n      return ok(code);\n    }\n    return effects.interrupt(self.parser.constructs.flow, nok, ok)(code);\n  }\n}", "/**\n * @import {Effects, State, TokenType} from 'micromark-util-types'\n */\n\nimport { asciiControl, markdownLineEndingOrSpace, markdownLineEnding } from 'micromark-util-character';\n/**\n * Parse destinations.\n *\n * ###### Examples\n *\n * ```markdown\n * <a>\n * <a\\>b>\n * <a b>\n * <a)>\n * a\n * a\\)b\n * a(b)c\n * a(b)\n * ```\n *\n * @param {Effects} effects\n *   Context.\n * @param {State} ok\n *   State switched to when successful.\n * @param {State} nok\n *   State switched to when unsuccessful.\n * @param {TokenType} type\n *   Type for whole (`<a>` or `b`).\n * @param {TokenType} literalType\n *   Type when enclosed (`<a>`).\n * @param {TokenType} literalMarkerType\n *   Type for enclosing (`<` and `>`).\n * @param {TokenType} rawType\n *   Type when not enclosed (`b`).\n * @param {TokenType} stringType\n *   Type for the value (`a` or `b`).\n * @param {number | undefined} [max=Infinity]\n *   Depth of nested parens (inclusive).\n * @returns {State}\n *   Start state.\n */\nexport function factoryDestination(effects, ok, nok, type, literalType, literalMarkerType, rawType, stringType, max) {\n  const limit = max || Number.POSITIVE_INFINITY;\n  let balance = 0;\n  return start;\n\n  /**\n   * Start of destination.\n   *\n   * ```markdown\n   * > | <aa>\n   *     ^\n   * > | aa\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    if (code === 60) {\n      effects.enter(type);\n      effects.enter(literalType);\n      effects.enter(literalMarkerType);\n      effects.consume(code);\n      effects.exit(literalMarkerType);\n      return enclosedBefore;\n    }\n\n    // ASCII control, space, closing paren.\n    if (code === null || code === 32 || code === 41 || asciiControl(code)) {\n      return nok(code);\n    }\n    effects.enter(type);\n    effects.enter(rawType);\n    effects.enter(stringType);\n    effects.enter(\"chunkString\", {\n      contentType: \"string\"\n    });\n    return raw(code);\n  }\n\n  /**\n   * After `<`, at an enclosed destination.\n   *\n   * ```markdown\n   * > | <aa>\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function enclosedBefore(code) {\n    if (code === 62) {\n      effects.enter(literalMarkerType);\n      effects.consume(code);\n      effects.exit(literalMarkerType);\n      effects.exit(literalType);\n      effects.exit(type);\n      return ok;\n    }\n    effects.enter(stringType);\n    effects.enter(\"chunkString\", {\n      contentType: \"string\"\n    });\n    return enclosed(code);\n  }\n\n  /**\n   * In enclosed destination.\n   *\n   * ```markdown\n   * > | <aa>\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function enclosed(code) {\n    if (code === 62) {\n      effects.exit(\"chunkString\");\n      effects.exit(stringType);\n      return enclosedBefore(code);\n    }\n    if (code === null || code === 60 || markdownLineEnding(code)) {\n      return nok(code);\n    }\n    effects.consume(code);\n    return code === 92 ? enclosedEscape : enclosed;\n  }\n\n  /**\n   * After `\\`, at a special character.\n   *\n   * ```markdown\n   * > | <a\\*a>\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function enclosedEscape(code) {\n    if (code === 60 || code === 62 || code === 92) {\n      effects.consume(code);\n      return enclosed;\n    }\n    return enclosed(code);\n  }\n\n  /**\n   * In raw destination.\n   *\n   * ```markdown\n   * > | aa\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function raw(code) {\n    if (!balance && (code === null || code === 41 || markdownLineEndingOrSpace(code))) {\n      effects.exit(\"chunkString\");\n      effects.exit(stringType);\n      effects.exit(rawType);\n      effects.exit(type);\n      return ok(code);\n    }\n    if (balance < limit && code === 40) {\n      effects.consume(code);\n      balance++;\n      return raw;\n    }\n    if (code === 41) {\n      effects.consume(code);\n      balance--;\n      return raw;\n    }\n\n    // ASCII control (but *not* `\\0`) and space and `(`.\n    // Note: in `markdown-rs`, `\\0` exists in codes, in `micromark-js` it\n    // doesn\u2019t.\n    if (code === null || code === 32 || code === 40 || asciiControl(code)) {\n      return nok(code);\n    }\n    effects.consume(code);\n    return code === 92 ? rawEscape : raw;\n  }\n\n  /**\n   * After `\\`, at special character.\n   *\n   * ```markdown\n   * > | a\\*a\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function rawEscape(code) {\n    if (code === 40 || code === 41 || code === 92) {\n      effects.consume(code);\n      return raw;\n    }\n    return raw(code);\n  }\n}", "/**\n * @import {\n *   Effects,\n *   State,\n *   TokenizeContext,\n *   TokenType\n * } from 'micromark-util-types'\n */\n\nimport { markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/**\n * Parse labels.\n *\n * > \uD83D\uDC49 **Note**: labels in markdown are capped at 999 characters in the string.\n *\n * ###### Examples\n *\n * ```markdown\n * [a]\n * [a\n * b]\n * [a\\]b]\n * ```\n *\n * @this {TokenizeContext}\n *   Tokenize context.\n * @param {Effects} effects\n *   Context.\n * @param {State} ok\n *   State switched to when successful.\n * @param {State} nok\n *   State switched to when unsuccessful.\n * @param {TokenType} type\n *   Type of the whole label (`[a]`).\n * @param {TokenType} markerType\n *   Type for the markers (`[` and `]`).\n * @param {TokenType} stringType\n *   Type for the identifier (`a`).\n * @returns {State}\n *   Start state.\n */\nexport function factoryLabel(effects, ok, nok, type, markerType, stringType) {\n  const self = this;\n  let size = 0;\n  /** @type {boolean} */\n  let seen;\n  return start;\n\n  /**\n   * Start of label.\n   *\n   * ```markdown\n   * > | [a]\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter(type);\n    effects.enter(markerType);\n    effects.consume(code);\n    effects.exit(markerType);\n    effects.enter(stringType);\n    return atBreak;\n  }\n\n  /**\n   * In label, at something, before something else.\n   *\n   * ```markdown\n   * > | [a]\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function atBreak(code) {\n    if (size > 999 || code === null || code === 91 || code === 93 && !seen ||\n    // To do: remove in the future once we\u2019ve switched from\n    // `micromark-extension-footnote` to `micromark-extension-gfm-footnote`,\n    // which doesn\u2019t need this.\n    // Hidden footnotes hook.\n    /* c8 ignore next 3 */\n    code === 94 && !size && '_hiddenFootnoteSupport' in self.parser.constructs) {\n      return nok(code);\n    }\n    if (code === 93) {\n      effects.exit(stringType);\n      effects.enter(markerType);\n      effects.consume(code);\n      effects.exit(markerType);\n      effects.exit(type);\n      return ok;\n    }\n\n    // To do: indent? Link chunks and EOLs together?\n    if (markdownLineEnding(code)) {\n      effects.enter(\"lineEnding\");\n      effects.consume(code);\n      effects.exit(\"lineEnding\");\n      return atBreak;\n    }\n    effects.enter(\"chunkString\", {\n      contentType: \"string\"\n    });\n    return labelInside(code);\n  }\n\n  /**\n   * In label, in text.\n   *\n   * ```markdown\n   * > | [a]\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function labelInside(code) {\n    if (code === null || code === 91 || code === 93 || markdownLineEnding(code) || size++ > 999) {\n      effects.exit(\"chunkString\");\n      return atBreak(code);\n    }\n    effects.consume(code);\n    if (!seen) seen = !markdownSpace(code);\n    return code === 92 ? labelEscape : labelInside;\n  }\n\n  /**\n   * After `\\`, at a special character.\n   *\n   * ```markdown\n   * > | [a\\*a]\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function labelEscape(code) {\n    if (code === 91 || code === 92 || code === 93) {\n      effects.consume(code);\n      size++;\n      return labelInside;\n    }\n    return labelInside(code);\n  }\n}", "/**\n * @import {\n *   Code,\n *   Effects,\n *   State,\n *   TokenType\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding } from 'micromark-util-character';\n/**\n * Parse titles.\n *\n * ###### Examples\n *\n * ```markdown\n * \"a\"\n * 'b'\n * (c)\n * \"a\n * b\"\n * 'a\n *     b'\n * (a\\)b)\n * ```\n *\n * @param {Effects} effects\n *   Context.\n * @param {State} ok\n *   State switched to when successful.\n * @param {State} nok\n *   State switched to when unsuccessful.\n * @param {TokenType} type\n *   Type of the whole title (`\"a\"`, `'b'`, `(c)`).\n * @param {TokenType} markerType\n *   Type for the markers (`\"`, `'`, `(`, and `)`).\n * @param {TokenType} stringType\n *   Type for the value (`a`).\n * @returns {State}\n *   Start state.\n */\nexport function factoryTitle(effects, ok, nok, type, markerType, stringType) {\n  /** @type {NonNullable<Code>} */\n  let marker;\n  return start;\n\n  /**\n   * Start of title.\n   *\n   * ```markdown\n   * > | \"a\"\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    if (code === 34 || code === 39 || code === 40) {\n      effects.enter(type);\n      effects.enter(markerType);\n      effects.consume(code);\n      effects.exit(markerType);\n      marker = code === 40 ? 41 : code;\n      return begin;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After opening marker.\n   *\n   * This is also used at the closing marker.\n   *\n   * ```markdown\n   * > | \"a\"\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function begin(code) {\n    if (code === marker) {\n      effects.enter(markerType);\n      effects.consume(code);\n      effects.exit(markerType);\n      effects.exit(type);\n      return ok;\n    }\n    effects.enter(stringType);\n    return atBreak(code);\n  }\n\n  /**\n   * At something, before something else.\n   *\n   * ```markdown\n   * > | \"a\"\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function atBreak(code) {\n    if (code === marker) {\n      effects.exit(stringType);\n      return begin(marker);\n    }\n    if (code === null) {\n      return nok(code);\n    }\n\n    // Note: blank lines can\u2019t exist in content.\n    if (markdownLineEnding(code)) {\n      // To do: use `space_or_tab_eol_with_options`, connect.\n      effects.enter(\"lineEnding\");\n      effects.consume(code);\n      effects.exit(\"lineEnding\");\n      return factorySpace(effects, atBreak, \"linePrefix\");\n    }\n    effects.enter(\"chunkString\", {\n      contentType: \"string\"\n    });\n    return inside(code);\n  }\n\n  /**\n   *\n   *\n   * @type {State}\n   */\n  function inside(code) {\n    if (code === marker || code === null || markdownLineEnding(code)) {\n      effects.exit(\"chunkString\");\n      return atBreak(code);\n    }\n    effects.consume(code);\n    return code === 92 ? escape : inside;\n  }\n\n  /**\n   * After `\\`, at a special character.\n   *\n   * ```markdown\n   * > | \"a\\*b\"\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function escape(code) {\n    if (code === marker || code === 92) {\n      effects.consume(code);\n      return inside;\n    }\n    return inside(code);\n  }\n}", "/**\n * @import {Effects, State} from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/**\n * Parse spaces and tabs.\n *\n * There is no `nok` parameter:\n *\n * *   line endings or spaces in markdown are often optional, in which case this\n *     factory can be used and `ok` will be switched to whether spaces were found\n *     or not\n * *   one line ending or space can be detected with\n *     `markdownLineEndingOrSpace(code)` right before using `factoryWhitespace`\n *\n * @param {Effects} effects\n *   Context.\n * @param {State} ok\n *   State switched to when successful.\n * @returns {State}\n *   Start state.\n */\nexport function factoryWhitespace(effects, ok) {\n  /** @type {boolean} */\n  let seen;\n  return start;\n\n  /** @type {State} */\n  function start(code) {\n    if (markdownLineEnding(code)) {\n      effects.enter(\"lineEnding\");\n      effects.consume(code);\n      effects.exit(\"lineEnding\");\n      seen = true;\n      return start;\n    }\n    if (markdownSpace(code)) {\n      return factorySpace(effects, start, seen ? \"linePrefix\" : \"lineSuffix\")(code);\n    }\n    return ok(code);\n  }\n}", "/**\n * @import {\n *   Construct,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factoryDestination } from 'micromark-factory-destination';\nimport { factoryLabel } from 'micromark-factory-label';\nimport { factorySpace } from 'micromark-factory-space';\nimport { factoryTitle } from 'micromark-factory-title';\nimport { factoryWhitespace } from 'micromark-factory-whitespace';\nimport { markdownLineEndingOrSpace, markdownLineEnding, markdownSpace } from 'micromark-util-character';\nimport { normalizeIdentifier } from 'micromark-util-normalize-identifier';\n/** @type {Construct} */\nexport const definition = {\n  name: 'definition',\n  tokenize: tokenizeDefinition\n};\n\n/** @type {Construct} */\nconst titleBefore = {\n  partial: true,\n  tokenize: tokenizeTitleBefore\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeDefinition(effects, ok, nok) {\n  const self = this;\n  /** @type {string} */\n  let identifier;\n  return start;\n\n  /**\n   * At start of a definition.\n   *\n   * ```markdown\n   * > | [a]: b \"c\"\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    // Do not interrupt paragraphs (but do follow definitions).\n    // To do: do `interrupt` the way `markdown-rs` does.\n    // To do: parse whitespace the way `markdown-rs` does.\n    effects.enter(\"definition\");\n    return before(code);\n  }\n\n  /**\n   * After optional whitespace, at `[`.\n   *\n   * ```markdown\n   * > | [a]: b \"c\"\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function before(code) {\n    // To do: parse whitespace the way `markdown-rs` does.\n\n    return factoryLabel.call(self, effects, labelAfter,\n    // Note: we don\u2019t need to reset the way `markdown-rs` does.\n    nok, \"definitionLabel\", \"definitionLabelMarker\", \"definitionLabelString\")(code);\n  }\n\n  /**\n   * After label.\n   *\n   * ```markdown\n   * > | [a]: b \"c\"\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function labelAfter(code) {\n    identifier = normalizeIdentifier(self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1));\n    if (code === 58) {\n      effects.enter(\"definitionMarker\");\n      effects.consume(code);\n      effects.exit(\"definitionMarker\");\n      return markerAfter;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After marker.\n   *\n   * ```markdown\n   * > | [a]: b \"c\"\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function markerAfter(code) {\n    // Note: whitespace is optional.\n    return markdownLineEndingOrSpace(code) ? factoryWhitespace(effects, destinationBefore)(code) : destinationBefore(code);\n  }\n\n  /**\n   * Before destination.\n   *\n   * ```markdown\n   * > | [a]: b \"c\"\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function destinationBefore(code) {\n    return factoryDestination(effects, destinationAfter,\n    // Note: we don\u2019t need to reset the way `markdown-rs` does.\n    nok, \"definitionDestination\", \"definitionDestinationLiteral\", \"definitionDestinationLiteralMarker\", \"definitionDestinationRaw\", \"definitionDestinationString\")(code);\n  }\n\n  /**\n   * After destination.\n   *\n   * ```markdown\n   * > | [a]: b \"c\"\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function destinationAfter(code) {\n    return effects.attempt(titleBefore, after, after)(code);\n  }\n\n  /**\n   * After definition.\n   *\n   * ```markdown\n   * > | [a]: b\n   *           ^\n   * > | [a]: b \"c\"\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    return markdownSpace(code) ? factorySpace(effects, afterWhitespace, \"whitespace\")(code) : afterWhitespace(code);\n  }\n\n  /**\n   * After definition, after optional whitespace.\n   *\n   * ```markdown\n   * > | [a]: b\n   *           ^\n   * > | [a]: b \"c\"\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function afterWhitespace(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit(\"definition\");\n\n      // Note: we don\u2019t care about uniqueness.\n      // It\u2019s likely that that doesn\u2019t happen very frequently.\n      // It is more likely that it wastes precious time.\n      self.parser.defined.push(identifier);\n\n      // To do: `markdown-rs` interrupt.\n      // // You\u2019d be interrupting.\n      // tokenizer.interrupt = true\n      return ok(code);\n    }\n    return nok(code);\n  }\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeTitleBefore(effects, ok, nok) {\n  return titleBefore;\n\n  /**\n   * After destination, at whitespace.\n   *\n   * ```markdown\n   * > | [a]: b\n   *           ^\n   * > | [a]: b \"c\"\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function titleBefore(code) {\n    return markdownLineEndingOrSpace(code) ? factoryWhitespace(effects, beforeMarker)(code) : nok(code);\n  }\n\n  /**\n   * At title.\n   *\n   * ```markdown\n   *   | [a]: b\n   * > | \"c\"\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function beforeMarker(code) {\n    return factoryTitle(effects, titleAfter, nok, \"definitionTitle\", \"definitionTitleMarker\", \"definitionTitleString\")(code);\n  }\n\n  /**\n   * After title.\n   *\n   * ```markdown\n   * > | [a]: b \"c\"\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function titleAfter(code) {\n    return markdownSpace(code) ? factorySpace(effects, titleAfterOptionalWhitespace, \"whitespace\")(code) : titleAfterOptionalWhitespace(code);\n  }\n\n  /**\n   * After title, after optional whitespace.\n   *\n   * ```markdown\n   * > | [a]: b \"c\"\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function titleAfterOptionalWhitespace(code) {\n    return code === null || markdownLineEnding(code) ? ok(code) : nok(code);\n  }\n}", "/**\n * @import {\n *   Construct,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { markdownLineEnding } from 'micromark-util-character';\n/** @type {Construct} */\nexport const hardBreakEscape = {\n  name: 'hardBreakEscape',\n  tokenize: tokenizeHardBreakEscape\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeHardBreakEscape(effects, ok, nok) {\n  return start;\n\n  /**\n   * Start of a hard break (escape).\n   *\n   * ```markdown\n   * > | a\\\n   *      ^\n   *   | b\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter(\"hardBreakEscape\");\n    effects.consume(code);\n    return after;\n  }\n\n  /**\n   * After `\\`, at eol.\n   *\n   * ```markdown\n   * > | a\\\n   *       ^\n   *   | b\n   * ```\n   *\n   *  @type {State}\n   */\n  function after(code) {\n    if (markdownLineEnding(code)) {\n      effects.exit(\"hardBreakEscape\");\n      return ok(code);\n    }\n    return nok(code);\n  }\n}", "/**\n * @import {\n *   Construct,\n *   Resolver,\n *   State,\n *   TokenizeContext,\n *   Tokenizer,\n *   Token\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEndingOrSpace, markdownLineEnding, markdownSpace } from 'micromark-util-character';\nimport { splice } from 'micromark-util-chunked';\n/** @type {Construct} */\nexport const headingAtx = {\n  name: 'headingAtx',\n  resolve: resolveHeadingAtx,\n  tokenize: tokenizeHeadingAtx\n};\n\n/** @type {Resolver} */\nfunction resolveHeadingAtx(events, context) {\n  let contentEnd = events.length - 2;\n  let contentStart = 3;\n  /** @type {Token} */\n  let content;\n  /** @type {Token} */\n  let text;\n\n  // Prefix whitespace, part of the opening.\n  if (events[contentStart][1].type === \"whitespace\") {\n    contentStart += 2;\n  }\n\n  // Suffix whitespace, part of the closing.\n  if (contentEnd - 2 > contentStart && events[contentEnd][1].type === \"whitespace\") {\n    contentEnd -= 2;\n  }\n  if (events[contentEnd][1].type === \"atxHeadingSequence\" && (contentStart === contentEnd - 1 || contentEnd - 4 > contentStart && events[contentEnd - 2][1].type === \"whitespace\")) {\n    contentEnd -= contentStart + 1 === contentEnd ? 2 : 4;\n  }\n  if (contentEnd > contentStart) {\n    content = {\n      type: \"atxHeadingText\",\n      start: events[contentStart][1].start,\n      end: events[contentEnd][1].end\n    };\n    text = {\n      type: \"chunkText\",\n      start: events[contentStart][1].start,\n      end: events[contentEnd][1].end,\n      contentType: \"text\"\n    };\n    splice(events, contentStart, contentEnd - contentStart + 1, [['enter', content, context], ['enter', text, context], ['exit', text, context], ['exit', content, context]]);\n  }\n  return events;\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeHeadingAtx(effects, ok, nok) {\n  let size = 0;\n  return start;\n\n  /**\n   * Start of a heading (atx).\n   *\n   * ```markdown\n   * > | ## aa\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    // To do: parse indent like `markdown-rs`.\n    effects.enter(\"atxHeading\");\n    return before(code);\n  }\n\n  /**\n   * After optional whitespace, at `#`.\n   *\n   * ```markdown\n   * > | ## aa\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function before(code) {\n    effects.enter(\"atxHeadingSequence\");\n    return sequenceOpen(code);\n  }\n\n  /**\n   * In opening sequence.\n   *\n   * ```markdown\n   * > | ## aa\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function sequenceOpen(code) {\n    if (code === 35 && size++ < 6) {\n      effects.consume(code);\n      return sequenceOpen;\n    }\n\n    // Always at least one `#`.\n    if (code === null || markdownLineEndingOrSpace(code)) {\n      effects.exit(\"atxHeadingSequence\");\n      return atBreak(code);\n    }\n    return nok(code);\n  }\n\n  /**\n   * After something, before something else.\n   *\n   * ```markdown\n   * > | ## aa\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function atBreak(code) {\n    if (code === 35) {\n      effects.enter(\"atxHeadingSequence\");\n      return sequenceFurther(code);\n    }\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit(\"atxHeading\");\n      // To do: interrupt like `markdown-rs`.\n      // // Feel free to interrupt.\n      // tokenizer.interrupt = false\n      return ok(code);\n    }\n    if (markdownSpace(code)) {\n      return factorySpace(effects, atBreak, \"whitespace\")(code);\n    }\n\n    // To do: generate `data` tokens, add the `text` token later.\n    // Needs edit map, see: `markdown.rs`.\n    effects.enter(\"atxHeadingText\");\n    return data(code);\n  }\n\n  /**\n   * In further sequence (after whitespace).\n   *\n   * Could be normal \u201Cvisible\u201D hashes in the heading or a final sequence.\n   *\n   * ```markdown\n   * > | ## aa ##\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function sequenceFurther(code) {\n    if (code === 35) {\n      effects.consume(code);\n      return sequenceFurther;\n    }\n    effects.exit(\"atxHeadingSequence\");\n    return atBreak(code);\n  }\n\n  /**\n   * In text.\n   *\n   * ```markdown\n   * > | ## aa\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function data(code) {\n    if (code === null || code === 35 || markdownLineEndingOrSpace(code)) {\n      effects.exit(\"atxHeadingText\");\n      return atBreak(code);\n    }\n    effects.consume(code);\n    return data;\n  }\n}", "/**\n * List of lowercase HTML \u201Cblock\u201D tag names.\n *\n * The list, when parsing HTML (flow), results in more relaxed rules (condition\n * 6).\n * Because they are known blocks, the HTML-like syntax doesn\u2019t have to be\n * strictly parsed.\n * For tag names not in this list, a more strict algorithm (condition 7) is used\n * to detect whether the HTML-like syntax is seen as HTML (flow) or not.\n *\n * This is copied from:\n * <https://spec.commonmark.org/0.30/#html-blocks>.\n *\n * > \uD83D\uDC49 **Note**: `search` was added in `CommonMark@0.31`.\n */\nexport const htmlBlockNames = [\n  'address',\n  'article',\n  'aside',\n  'base',\n  'basefont',\n  'blockquote',\n  'body',\n  'caption',\n  'center',\n  'col',\n  'colgroup',\n  'dd',\n  'details',\n  'dialog',\n  'dir',\n  'div',\n  'dl',\n  'dt',\n  'fieldset',\n  'figcaption',\n  'figure',\n  'footer',\n  'form',\n  'frame',\n  'frameset',\n  'h1',\n  'h2',\n  'h3',\n  'h4',\n  'h5',\n  'h6',\n  'head',\n  'header',\n  'hr',\n  'html',\n  'iframe',\n  'legend',\n  'li',\n  'link',\n  'main',\n  'menu',\n  'menuitem',\n  'nav',\n  'noframes',\n  'ol',\n  'optgroup',\n  'option',\n  'p',\n  'param',\n  'search',\n  'section',\n  'summary',\n  'table',\n  'tbody',\n  'td',\n  'tfoot',\n  'th',\n  'thead',\n  'title',\n  'tr',\n  'track',\n  'ul'\n]\n\n/**\n * List of lowercase HTML \u201Craw\u201D tag names.\n *\n * The list, when parsing HTML (flow), results in HTML that can include lines\n * without exiting, until a closing tag also in this list is found (condition\n * 1).\n *\n * This module is copied from:\n * <https://spec.commonmark.org/0.30/#html-blocks>.\n *\n * > \uD83D\uDC49 **Note**: `textarea` was added in `CommonMark@0.30`.\n */\nexport const htmlRawNames = ['pre', 'script', 'style', 'textarea']\n", "/**\n * @import {\n *   Code,\n *   Construct,\n *   Resolver,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { asciiAlphanumeric, asciiAlpha, markdownLineEndingOrSpace, markdownLineEnding, markdownSpace } from 'micromark-util-character';\nimport { htmlBlockNames, htmlRawNames } from 'micromark-util-html-tag-name';\nimport { blankLine } from './blank-line.js';\n\n/** @type {Construct} */\nexport const htmlFlow = {\n  concrete: true,\n  name: 'htmlFlow',\n  resolveTo: resolveToHtmlFlow,\n  tokenize: tokenizeHtmlFlow\n};\n\n/** @type {Construct} */\nconst blankLineBefore = {\n  partial: true,\n  tokenize: tokenizeBlankLineBefore\n};\nconst nonLazyContinuationStart = {\n  partial: true,\n  tokenize: tokenizeNonLazyContinuationStart\n};\n\n/** @type {Resolver} */\nfunction resolveToHtmlFlow(events) {\n  let index = events.length;\n  while (index--) {\n    if (events[index][0] === 'enter' && events[index][1].type === \"htmlFlow\") {\n      break;\n    }\n  }\n  if (index > 1 && events[index - 2][1].type === \"linePrefix\") {\n    // Add the prefix start to the HTML token.\n    events[index][1].start = events[index - 2][1].start;\n    // Add the prefix start to the HTML line token.\n    events[index + 1][1].start = events[index - 2][1].start;\n    // Remove the line prefix.\n    events.splice(index - 2, 2);\n  }\n  return events;\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeHtmlFlow(effects, ok, nok) {\n  const self = this;\n  /** @type {number} */\n  let marker;\n  /** @type {boolean} */\n  let closingTag;\n  /** @type {string} */\n  let buffer;\n  /** @type {number} */\n  let index;\n  /** @type {Code} */\n  let markerB;\n  return start;\n\n  /**\n   * Start of HTML (flow).\n   *\n   * ```markdown\n   * > | <x />\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    // To do: parse indent like `markdown-rs`.\n    return before(code);\n  }\n\n  /**\n   * At `<`, after optional whitespace.\n   *\n   * ```markdown\n   * > | <x />\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function before(code) {\n    effects.enter(\"htmlFlow\");\n    effects.enter(\"htmlFlowData\");\n    effects.consume(code);\n    return open;\n  }\n\n  /**\n   * After `<`, at tag name or other stuff.\n   *\n   * ```markdown\n   * > | <x />\n   *      ^\n   * > | <!doctype>\n   *      ^\n   * > | <!--xxx-->\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function open(code) {\n    if (code === 33) {\n      effects.consume(code);\n      return declarationOpen;\n    }\n    if (code === 47) {\n      effects.consume(code);\n      closingTag = true;\n      return tagCloseStart;\n    }\n    if (code === 63) {\n      effects.consume(code);\n      marker = 3;\n      // To do:\n      // tokenizer.concrete = true\n      // To do: use `markdown-rs` style interrupt.\n      // While we\u2019re in an instruction instead of a declaration, we\u2019re on a `?`\n      // right now, so we do need to search for `>`, similar to declarations.\n      return self.interrupt ? ok : continuationDeclarationInside;\n    }\n\n    // ASCII alphabetical.\n    if (asciiAlpha(code)) {\n      // Always the case.\n      effects.consume(code);\n      buffer = String.fromCharCode(code);\n      return tagName;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After `<!`, at declaration, comment, or CDATA.\n   *\n   * ```markdown\n   * > | <!doctype>\n   *       ^\n   * > | <!--xxx-->\n   *       ^\n   * > | <![CDATA[>&<]]>\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function declarationOpen(code) {\n    if (code === 45) {\n      effects.consume(code);\n      marker = 2;\n      return commentOpenInside;\n    }\n    if (code === 91) {\n      effects.consume(code);\n      marker = 5;\n      index = 0;\n      return cdataOpenInside;\n    }\n\n    // ASCII alphabetical.\n    if (asciiAlpha(code)) {\n      effects.consume(code);\n      marker = 4;\n      // // Do not form containers.\n      // tokenizer.concrete = true\n      return self.interrupt ? ok : continuationDeclarationInside;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After `<!-`, inside a comment, at another `-`.\n   *\n   * ```markdown\n   * > | <!--xxx-->\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function commentOpenInside(code) {\n    if (code === 45) {\n      effects.consume(code);\n      // // Do not form containers.\n      // tokenizer.concrete = true\n      return self.interrupt ? ok : continuationDeclarationInside;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After `<![`, inside CDATA, expecting `CDATA[`.\n   *\n   * ```markdown\n   * > | <![CDATA[>&<]]>\n   *        ^^^^^^\n   * ```\n   *\n   * @type {State}\n   */\n  function cdataOpenInside(code) {\n    const value = \"CDATA[\";\n    if (code === value.charCodeAt(index++)) {\n      effects.consume(code);\n      if (index === value.length) {\n        // // Do not form containers.\n        // tokenizer.concrete = true\n        return self.interrupt ? ok : continuation;\n      }\n      return cdataOpenInside;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After `</`, in closing tag, at tag name.\n   *\n   * ```markdown\n   * > | </x>\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagCloseStart(code) {\n    if (asciiAlpha(code)) {\n      // Always the case.\n      effects.consume(code);\n      buffer = String.fromCharCode(code);\n      return tagName;\n    }\n    return nok(code);\n  }\n\n  /**\n   * In tag name.\n   *\n   * ```markdown\n   * > | <ab>\n   *      ^^\n   * > | </ab>\n   *       ^^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagName(code) {\n    if (code === null || code === 47 || code === 62 || markdownLineEndingOrSpace(code)) {\n      const slash = code === 47;\n      const name = buffer.toLowerCase();\n      if (!slash && !closingTag && htmlRawNames.includes(name)) {\n        marker = 1;\n        // // Do not form containers.\n        // tokenizer.concrete = true\n        return self.interrupt ? ok(code) : continuation(code);\n      }\n      if (htmlBlockNames.includes(buffer.toLowerCase())) {\n        marker = 6;\n        if (slash) {\n          effects.consume(code);\n          return basicSelfClosing;\n        }\n\n        // // Do not form containers.\n        // tokenizer.concrete = true\n        return self.interrupt ? ok(code) : continuation(code);\n      }\n      marker = 7;\n      // Do not support complete HTML when interrupting.\n      return self.interrupt && !self.parser.lazy[self.now().line] ? nok(code) : closingTag ? completeClosingTagAfter(code) : completeAttributeNameBefore(code);\n    }\n\n    // ASCII alphanumerical and `-`.\n    if (code === 45 || asciiAlphanumeric(code)) {\n      effects.consume(code);\n      buffer += String.fromCharCode(code);\n      return tagName;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After closing slash of a basic tag name.\n   *\n   * ```markdown\n   * > | <div/>\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function basicSelfClosing(code) {\n    if (code === 62) {\n      effects.consume(code);\n      // // Do not form containers.\n      // tokenizer.concrete = true\n      return self.interrupt ? ok : continuation;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After closing slash of a complete tag name.\n   *\n   * ```markdown\n   * > | <x/>\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeClosingTagAfter(code) {\n    if (markdownSpace(code)) {\n      effects.consume(code);\n      return completeClosingTagAfter;\n    }\n    return completeEnd(code);\n  }\n\n  /**\n   * At an attribute name.\n   *\n   * At first, this state is used after a complete tag name, after whitespace,\n   * where it expects optional attributes or the end of the tag.\n   * It is also reused after attributes, when expecting more optional\n   * attributes.\n   *\n   * ```markdown\n   * > | <a />\n   *        ^\n   * > | <a :b>\n   *        ^\n   * > | <a _b>\n   *        ^\n   * > | <a b>\n   *        ^\n   * > | <a >\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeAttributeNameBefore(code) {\n    if (code === 47) {\n      effects.consume(code);\n      return completeEnd;\n    }\n\n    // ASCII alphanumerical and `:` and `_`.\n    if (code === 58 || code === 95 || asciiAlpha(code)) {\n      effects.consume(code);\n      return completeAttributeName;\n    }\n    if (markdownSpace(code)) {\n      effects.consume(code);\n      return completeAttributeNameBefore;\n    }\n    return completeEnd(code);\n  }\n\n  /**\n   * In attribute name.\n   *\n   * ```markdown\n   * > | <a :b>\n   *         ^\n   * > | <a _b>\n   *         ^\n   * > | <a b>\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeAttributeName(code) {\n    // ASCII alphanumerical and `-`, `.`, `:`, and `_`.\n    if (code === 45 || code === 46 || code === 58 || code === 95 || asciiAlphanumeric(code)) {\n      effects.consume(code);\n      return completeAttributeName;\n    }\n    return completeAttributeNameAfter(code);\n  }\n\n  /**\n   * After attribute name, at an optional initializer, the end of the tag, or\n   * whitespace.\n   *\n   * ```markdown\n   * > | <a b>\n   *         ^\n   * > | <a b=c>\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeAttributeNameAfter(code) {\n    if (code === 61) {\n      effects.consume(code);\n      return completeAttributeValueBefore;\n    }\n    if (markdownSpace(code)) {\n      effects.consume(code);\n      return completeAttributeNameAfter;\n    }\n    return completeAttributeNameBefore(code);\n  }\n\n  /**\n   * Before unquoted, double quoted, or single quoted attribute value, allowing\n   * whitespace.\n   *\n   * ```markdown\n   * > | <a b=c>\n   *          ^\n   * > | <a b=\"c\">\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeAttributeValueBefore(code) {\n    if (code === null || code === 60 || code === 61 || code === 62 || code === 96) {\n      return nok(code);\n    }\n    if (code === 34 || code === 39) {\n      effects.consume(code);\n      markerB = code;\n      return completeAttributeValueQuoted;\n    }\n    if (markdownSpace(code)) {\n      effects.consume(code);\n      return completeAttributeValueBefore;\n    }\n    return completeAttributeValueUnquoted(code);\n  }\n\n  /**\n   * In double or single quoted attribute value.\n   *\n   * ```markdown\n   * > | <a b=\"c\">\n   *           ^\n   * > | <a b='c'>\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeAttributeValueQuoted(code) {\n    if (code === markerB) {\n      effects.consume(code);\n      markerB = null;\n      return completeAttributeValueQuotedAfter;\n    }\n    if (code === null || markdownLineEnding(code)) {\n      return nok(code);\n    }\n    effects.consume(code);\n    return completeAttributeValueQuoted;\n  }\n\n  /**\n   * In unquoted attribute value.\n   *\n   * ```markdown\n   * > | <a b=c>\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeAttributeValueUnquoted(code) {\n    if (code === null || code === 34 || code === 39 || code === 47 || code === 60 || code === 61 || code === 62 || code === 96 || markdownLineEndingOrSpace(code)) {\n      return completeAttributeNameAfter(code);\n    }\n    effects.consume(code);\n    return completeAttributeValueUnquoted;\n  }\n\n  /**\n   * After double or single quoted attribute value, before whitespace or the\n   * end of the tag.\n   *\n   * ```markdown\n   * > | <a b=\"c\">\n   *            ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeAttributeValueQuotedAfter(code) {\n    if (code === 47 || code === 62 || markdownSpace(code)) {\n      return completeAttributeNameBefore(code);\n    }\n    return nok(code);\n  }\n\n  /**\n   * In certain circumstances of a complete tag where only an `>` is allowed.\n   *\n   * ```markdown\n   * > | <a b=\"c\">\n   *             ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeEnd(code) {\n    if (code === 62) {\n      effects.consume(code);\n      return completeAfter;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After `>` in a complete tag.\n   *\n   * ```markdown\n   * > | <x>\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeAfter(code) {\n    if (code === null || markdownLineEnding(code)) {\n      // // Do not form containers.\n      // tokenizer.concrete = true\n      return continuation(code);\n    }\n    if (markdownSpace(code)) {\n      effects.consume(code);\n      return completeAfter;\n    }\n    return nok(code);\n  }\n\n  /**\n   * In continuation of any HTML kind.\n   *\n   * ```markdown\n   * > | <!--xxx-->\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuation(code) {\n    if (code === 45 && marker === 2) {\n      effects.consume(code);\n      return continuationCommentInside;\n    }\n    if (code === 60 && marker === 1) {\n      effects.consume(code);\n      return continuationRawTagOpen;\n    }\n    if (code === 62 && marker === 4) {\n      effects.consume(code);\n      return continuationClose;\n    }\n    if (code === 63 && marker === 3) {\n      effects.consume(code);\n      return continuationDeclarationInside;\n    }\n    if (code === 93 && marker === 5) {\n      effects.consume(code);\n      return continuationCdataInside;\n    }\n    if (markdownLineEnding(code) && (marker === 6 || marker === 7)) {\n      effects.exit(\"htmlFlowData\");\n      return effects.check(blankLineBefore, continuationAfter, continuationStart)(code);\n    }\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit(\"htmlFlowData\");\n      return continuationStart(code);\n    }\n    effects.consume(code);\n    return continuation;\n  }\n\n  /**\n   * In continuation, at eol.\n   *\n   * ```markdown\n   * > | <x>\n   *        ^\n   *   | asd\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationStart(code) {\n    return effects.check(nonLazyContinuationStart, continuationStartNonLazy, continuationAfter)(code);\n  }\n\n  /**\n   * In continuation, at eol, before non-lazy content.\n   *\n   * ```markdown\n   * > | <x>\n   *        ^\n   *   | asd\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationStartNonLazy(code) {\n    effects.enter(\"lineEnding\");\n    effects.consume(code);\n    effects.exit(\"lineEnding\");\n    return continuationBefore;\n  }\n\n  /**\n   * In continuation, before non-lazy content.\n   *\n   * ```markdown\n   *   | <x>\n   * > | asd\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationBefore(code) {\n    if (code === null || markdownLineEnding(code)) {\n      return continuationStart(code);\n    }\n    effects.enter(\"htmlFlowData\");\n    return continuation(code);\n  }\n\n  /**\n   * In comment continuation, after one `-`, expecting another.\n   *\n   * ```markdown\n   * > | <!--xxx-->\n   *             ^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationCommentInside(code) {\n    if (code === 45) {\n      effects.consume(code);\n      return continuationDeclarationInside;\n    }\n    return continuation(code);\n  }\n\n  /**\n   * In raw continuation, after `<`, at `/`.\n   *\n   * ```markdown\n   * > | <script>console.log(1)</script>\n   *                            ^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationRawTagOpen(code) {\n    if (code === 47) {\n      effects.consume(code);\n      buffer = '';\n      return continuationRawEndTag;\n    }\n    return continuation(code);\n  }\n\n  /**\n   * In raw continuation, after `</`, in a raw tag name.\n   *\n   * ```markdown\n   * > | <script>console.log(1)</script>\n   *                             ^^^^^^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationRawEndTag(code) {\n    if (code === 62) {\n      const name = buffer.toLowerCase();\n      if (htmlRawNames.includes(name)) {\n        effects.consume(code);\n        return continuationClose;\n      }\n      return continuation(code);\n    }\n    if (asciiAlpha(code) && buffer.length < 8) {\n      // Always the case.\n      effects.consume(code);\n      buffer += String.fromCharCode(code);\n      return continuationRawEndTag;\n    }\n    return continuation(code);\n  }\n\n  /**\n   * In cdata continuation, after `]`, expecting `]>`.\n   *\n   * ```markdown\n   * > | <![CDATA[>&<]]>\n   *                  ^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationCdataInside(code) {\n    if (code === 93) {\n      effects.consume(code);\n      return continuationDeclarationInside;\n    }\n    return continuation(code);\n  }\n\n  /**\n   * In declaration or instruction continuation, at `>`.\n   *\n   * ```markdown\n   * > | <!-->\n   *         ^\n   * > | <?>\n   *       ^\n   * > | <!q>\n   *        ^\n   * > | <!--ab-->\n   *             ^\n   * > | <![CDATA[>&<]]>\n   *                   ^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationDeclarationInside(code) {\n    if (code === 62) {\n      effects.consume(code);\n      return continuationClose;\n    }\n\n    // More dashes.\n    if (code === 45 && marker === 2) {\n      effects.consume(code);\n      return continuationDeclarationInside;\n    }\n    return continuation(code);\n  }\n\n  /**\n   * In closed continuation: everything we get until the eol/eof is part of it.\n   *\n   * ```markdown\n   * > | <!doctype>\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationClose(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit(\"htmlFlowData\");\n      return continuationAfter(code);\n    }\n    effects.consume(code);\n    return continuationClose;\n  }\n\n  /**\n   * Done.\n   *\n   * ```markdown\n   * > | <!doctype>\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationAfter(code) {\n    effects.exit(\"htmlFlow\");\n    // // Feel free to interrupt.\n    // tokenizer.interrupt = false\n    // // No longer concrete.\n    // tokenizer.concrete = false\n    return ok(code);\n  }\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeNonLazyContinuationStart(effects, ok, nok) {\n  const self = this;\n  return start;\n\n  /**\n   * At eol, before continuation.\n   *\n   * ```markdown\n   * > | * ```js\n   *            ^\n   *   | b\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    if (markdownLineEnding(code)) {\n      effects.enter(\"lineEnding\");\n      effects.consume(code);\n      effects.exit(\"lineEnding\");\n      return after;\n    }\n    return nok(code);\n  }\n\n  /**\n   * A continuation.\n   *\n   * ```markdown\n   *   | * ```js\n   * > | b\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    return self.parser.lazy[self.now().line] ? nok(code) : ok(code);\n  }\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeBlankLineBefore(effects, ok, nok) {\n  return start;\n\n  /**\n   * Before eol, expecting blank line.\n   *\n   * ```markdown\n   * > | <div>\n   *          ^\n   *   |\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter(\"lineEnding\");\n    effects.consume(code);\n    effects.exit(\"lineEnding\");\n    return effects.attempt(blankLine, ok, nok);\n  }\n}", "/**\n * @import {\n *   Code,\n *   Construct,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { asciiAlphanumeric, asciiAlpha, markdownLineEndingOrSpace, markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\nexport const htmlText = {\n  name: 'htmlText',\n  tokenize: tokenizeHtmlText\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeHtmlText(effects, ok, nok) {\n  const self = this;\n  /** @type {NonNullable<Code> | undefined} */\n  let marker;\n  /** @type {number} */\n  let index;\n  /** @type {State} */\n  let returnState;\n  return start;\n\n  /**\n   * Start of HTML (text).\n   *\n   * ```markdown\n   * > | a <b> c\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter(\"htmlText\");\n    effects.enter(\"htmlTextData\");\n    effects.consume(code);\n    return open;\n  }\n\n  /**\n   * After `<`, at tag name or other stuff.\n   *\n   * ```markdown\n   * > | a <b> c\n   *        ^\n   * > | a <!doctype> c\n   *        ^\n   * > | a <!--b--> c\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function open(code) {\n    if (code === 33) {\n      effects.consume(code);\n      return declarationOpen;\n    }\n    if (code === 47) {\n      effects.consume(code);\n      return tagCloseStart;\n    }\n    if (code === 63) {\n      effects.consume(code);\n      return instruction;\n    }\n\n    // ASCII alphabetical.\n    if (asciiAlpha(code)) {\n      effects.consume(code);\n      return tagOpen;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After `<!`, at declaration, comment, or CDATA.\n   *\n   * ```markdown\n   * > | a <!doctype> c\n   *         ^\n   * > | a <!--b--> c\n   *         ^\n   * > | a <![CDATA[>&<]]> c\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function declarationOpen(code) {\n    if (code === 45) {\n      effects.consume(code);\n      return commentOpenInside;\n    }\n    if (code === 91) {\n      effects.consume(code);\n      index = 0;\n      return cdataOpenInside;\n    }\n    if (asciiAlpha(code)) {\n      effects.consume(code);\n      return declaration;\n    }\n    return nok(code);\n  }\n\n  /**\n   * In a comment, after `<!-`, at another `-`.\n   *\n   * ```markdown\n   * > | a <!--b--> c\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function commentOpenInside(code) {\n    if (code === 45) {\n      effects.consume(code);\n      return commentEnd;\n    }\n    return nok(code);\n  }\n\n  /**\n   * In comment.\n   *\n   * ```markdown\n   * > | a <!--b--> c\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function comment(code) {\n    if (code === null) {\n      return nok(code);\n    }\n    if (code === 45) {\n      effects.consume(code);\n      return commentClose;\n    }\n    if (markdownLineEnding(code)) {\n      returnState = comment;\n      return lineEndingBefore(code);\n    }\n    effects.consume(code);\n    return comment;\n  }\n\n  /**\n   * In comment, after `-`.\n   *\n   * ```markdown\n   * > | a <!--b--> c\n   *             ^\n   * ```\n   *\n   * @type {State}\n   */\n  function commentClose(code) {\n    if (code === 45) {\n      effects.consume(code);\n      return commentEnd;\n    }\n    return comment(code);\n  }\n\n  /**\n   * In comment, after `--`.\n   *\n   * ```markdown\n   * > | a <!--b--> c\n   *              ^\n   * ```\n   *\n   * @type {State}\n   */\n  function commentEnd(code) {\n    return code === 62 ? end(code) : code === 45 ? commentClose(code) : comment(code);\n  }\n\n  /**\n   * After `<![`, in CDATA, expecting `CDATA[`.\n   *\n   * ```markdown\n   * > | a <![CDATA[>&<]]> b\n   *          ^^^^^^\n   * ```\n   *\n   * @type {State}\n   */\n  function cdataOpenInside(code) {\n    const value = \"CDATA[\";\n    if (code === value.charCodeAt(index++)) {\n      effects.consume(code);\n      return index === value.length ? cdata : cdataOpenInside;\n    }\n    return nok(code);\n  }\n\n  /**\n   * In CDATA.\n   *\n   * ```markdown\n   * > | a <![CDATA[>&<]]> b\n   *                ^^^\n   * ```\n   *\n   * @type {State}\n   */\n  function cdata(code) {\n    if (code === null) {\n      return nok(code);\n    }\n    if (code === 93) {\n      effects.consume(code);\n      return cdataClose;\n    }\n    if (markdownLineEnding(code)) {\n      returnState = cdata;\n      return lineEndingBefore(code);\n    }\n    effects.consume(code);\n    return cdata;\n  }\n\n  /**\n   * In CDATA, after `]`, at another `]`.\n   *\n   * ```markdown\n   * > | a <![CDATA[>&<]]> b\n   *                    ^\n   * ```\n   *\n   * @type {State}\n   */\n  function cdataClose(code) {\n    if (code === 93) {\n      effects.consume(code);\n      return cdataEnd;\n    }\n    return cdata(code);\n  }\n\n  /**\n   * In CDATA, after `]]`, at `>`.\n   *\n   * ```markdown\n   * > | a <![CDATA[>&<]]> b\n   *                     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function cdataEnd(code) {\n    if (code === 62) {\n      return end(code);\n    }\n    if (code === 93) {\n      effects.consume(code);\n      return cdataEnd;\n    }\n    return cdata(code);\n  }\n\n  /**\n   * In declaration.\n   *\n   * ```markdown\n   * > | a <!b> c\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function declaration(code) {\n    if (code === null || code === 62) {\n      return end(code);\n    }\n    if (markdownLineEnding(code)) {\n      returnState = declaration;\n      return lineEndingBefore(code);\n    }\n    effects.consume(code);\n    return declaration;\n  }\n\n  /**\n   * In instruction.\n   *\n   * ```markdown\n   * > | a <?b?> c\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function instruction(code) {\n    if (code === null) {\n      return nok(code);\n    }\n    if (code === 63) {\n      effects.consume(code);\n      return instructionClose;\n    }\n    if (markdownLineEnding(code)) {\n      returnState = instruction;\n      return lineEndingBefore(code);\n    }\n    effects.consume(code);\n    return instruction;\n  }\n\n  /**\n   * In instruction, after `?`, at `>`.\n   *\n   * ```markdown\n   * > | a <?b?> c\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function instructionClose(code) {\n    return code === 62 ? end(code) : instruction(code);\n  }\n\n  /**\n   * After `</`, in closing tag, at tag name.\n   *\n   * ```markdown\n   * > | a </b> c\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagCloseStart(code) {\n    // ASCII alphabetical.\n    if (asciiAlpha(code)) {\n      effects.consume(code);\n      return tagClose;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After `</x`, in a tag name.\n   *\n   * ```markdown\n   * > | a </b> c\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagClose(code) {\n    // ASCII alphanumerical and `-`.\n    if (code === 45 || asciiAlphanumeric(code)) {\n      effects.consume(code);\n      return tagClose;\n    }\n    return tagCloseBetween(code);\n  }\n\n  /**\n   * In closing tag, after tag name.\n   *\n   * ```markdown\n   * > | a </b> c\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagCloseBetween(code) {\n    if (markdownLineEnding(code)) {\n      returnState = tagCloseBetween;\n      return lineEndingBefore(code);\n    }\n    if (markdownSpace(code)) {\n      effects.consume(code);\n      return tagCloseBetween;\n    }\n    return end(code);\n  }\n\n  /**\n   * After `<x`, in opening tag name.\n   *\n   * ```markdown\n   * > | a <b> c\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagOpen(code) {\n    // ASCII alphanumerical and `-`.\n    if (code === 45 || asciiAlphanumeric(code)) {\n      effects.consume(code);\n      return tagOpen;\n    }\n    if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) {\n      return tagOpenBetween(code);\n    }\n    return nok(code);\n  }\n\n  /**\n   * In opening tag, after tag name.\n   *\n   * ```markdown\n   * > | a <b> c\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagOpenBetween(code) {\n    if (code === 47) {\n      effects.consume(code);\n      return end;\n    }\n\n    // ASCII alphabetical and `:` and `_`.\n    if (code === 58 || code === 95 || asciiAlpha(code)) {\n      effects.consume(code);\n      return tagOpenAttributeName;\n    }\n    if (markdownLineEnding(code)) {\n      returnState = tagOpenBetween;\n      return lineEndingBefore(code);\n    }\n    if (markdownSpace(code)) {\n      effects.consume(code);\n      return tagOpenBetween;\n    }\n    return end(code);\n  }\n\n  /**\n   * In attribute name.\n   *\n   * ```markdown\n   * > | a <b c> d\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagOpenAttributeName(code) {\n    // ASCII alphabetical and `-`, `.`, `:`, and `_`.\n    if (code === 45 || code === 46 || code === 58 || code === 95 || asciiAlphanumeric(code)) {\n      effects.consume(code);\n      return tagOpenAttributeName;\n    }\n    return tagOpenAttributeNameAfter(code);\n  }\n\n  /**\n   * After attribute name, before initializer, the end of the tag, or\n   * whitespace.\n   *\n   * ```markdown\n   * > | a <b c> d\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagOpenAttributeNameAfter(code) {\n    if (code === 61) {\n      effects.consume(code);\n      return tagOpenAttributeValueBefore;\n    }\n    if (markdownLineEnding(code)) {\n      returnState = tagOpenAttributeNameAfter;\n      return lineEndingBefore(code);\n    }\n    if (markdownSpace(code)) {\n      effects.consume(code);\n      return tagOpenAttributeNameAfter;\n    }\n    return tagOpenBetween(code);\n  }\n\n  /**\n   * Before unquoted, double quoted, or single quoted attribute value, allowing\n   * whitespace.\n   *\n   * ```markdown\n   * > | a <b c=d> e\n   *            ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagOpenAttributeValueBefore(code) {\n    if (code === null || code === 60 || code === 61 || code === 62 || code === 96) {\n      return nok(code);\n    }\n    if (code === 34 || code === 39) {\n      effects.consume(code);\n      marker = code;\n      return tagOpenAttributeValueQuoted;\n    }\n    if (markdownLineEnding(code)) {\n      returnState = tagOpenAttributeValueBefore;\n      return lineEndingBefore(code);\n    }\n    if (markdownSpace(code)) {\n      effects.consume(code);\n      return tagOpenAttributeValueBefore;\n    }\n    effects.consume(code);\n    return tagOpenAttributeValueUnquoted;\n  }\n\n  /**\n   * In double or single quoted attribute value.\n   *\n   * ```markdown\n   * > | a <b c=\"d\"> e\n   *             ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagOpenAttributeValueQuoted(code) {\n    if (code === marker) {\n      effects.consume(code);\n      marker = undefined;\n      return tagOpenAttributeValueQuotedAfter;\n    }\n    if (code === null) {\n      return nok(code);\n    }\n    if (markdownLineEnding(code)) {\n      returnState = tagOpenAttributeValueQuoted;\n      return lineEndingBefore(code);\n    }\n    effects.consume(code);\n    return tagOpenAttributeValueQuoted;\n  }\n\n  /**\n   * In unquoted attribute value.\n   *\n   * ```markdown\n   * > | a <b c=d> e\n   *            ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagOpenAttributeValueUnquoted(code) {\n    if (code === null || code === 34 || code === 39 || code === 60 || code === 61 || code === 96) {\n      return nok(code);\n    }\n    if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) {\n      return tagOpenBetween(code);\n    }\n    effects.consume(code);\n    return tagOpenAttributeValueUnquoted;\n  }\n\n  /**\n   * After double or single quoted attribute value, before whitespace or the end\n   * of the tag.\n   *\n   * ```markdown\n   * > | a <b c=\"d\"> e\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagOpenAttributeValueQuotedAfter(code) {\n    if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) {\n      return tagOpenBetween(code);\n    }\n    return nok(code);\n  }\n\n  /**\n   * In certain circumstances of a tag where only an `>` is allowed.\n   *\n   * ```markdown\n   * > | a <b c=\"d\"> e\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function end(code) {\n    if (code === 62) {\n      effects.consume(code);\n      effects.exit(\"htmlTextData\");\n      effects.exit(\"htmlText\");\n      return ok;\n    }\n    return nok(code);\n  }\n\n  /**\n   * At eol.\n   *\n   * > \uD83D\uDC49 **Note**: we can\u2019t have blank lines in text, so no need to worry about\n   * > empty tokens.\n   *\n   * ```markdown\n   * > | a <!--a\n   *            ^\n   *   | b-->\n   * ```\n   *\n   * @type {State}\n   */\n  function lineEndingBefore(code) {\n    effects.exit(\"htmlTextData\");\n    effects.enter(\"lineEnding\");\n    effects.consume(code);\n    effects.exit(\"lineEnding\");\n    return lineEndingAfter;\n  }\n\n  /**\n   * After eol, at optional whitespace.\n   *\n   * > \uD83D\uDC49 **Note**: we can\u2019t have blank lines in text, so no need to worry about\n   * > empty tokens.\n   *\n   * ```markdown\n   *   | a <!--a\n   * > | b-->\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function lineEndingAfter(code) {\n    // Always populated by defaults.\n\n    return markdownSpace(code) ? factorySpace(effects, lineEndingAfterPrefix, \"linePrefix\", self.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4)(code) : lineEndingAfterPrefix(code);\n  }\n\n  /**\n   * After eol, after optional whitespace.\n   *\n   * > \uD83D\uDC49 **Note**: we can\u2019t have blank lines in text, so no need to worry about\n   * > empty tokens.\n   *\n   * ```markdown\n   *   | a <!--a\n   * > | b-->\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function lineEndingAfterPrefix(code) {\n    effects.enter(\"htmlTextData\");\n    return returnState(code);\n  }\n}", "/**\n * @import {\n *   Construct,\n *   Event,\n *   Resolver,\n *   State,\n *   TokenizeContext,\n *   Tokenizer,\n *   Token\n * } from 'micromark-util-types'\n */\n\nimport { factoryDestination } from 'micromark-factory-destination';\nimport { factoryLabel } from 'micromark-factory-label';\nimport { factoryTitle } from 'micromark-factory-title';\nimport { factoryWhitespace } from 'micromark-factory-whitespace';\nimport { markdownLineEndingOrSpace } from 'micromark-util-character';\nimport { push, splice } from 'micromark-util-chunked';\nimport { normalizeIdentifier } from 'micromark-util-normalize-identifier';\nimport { resolveAll } from 'micromark-util-resolve-all';\n/** @type {Construct} */\nexport const labelEnd = {\n  name: 'labelEnd',\n  resolveAll: resolveAllLabelEnd,\n  resolveTo: resolveToLabelEnd,\n  tokenize: tokenizeLabelEnd\n};\n\n/** @type {Construct} */\nconst resourceConstruct = {\n  tokenize: tokenizeResource\n};\n/** @type {Construct} */\nconst referenceFullConstruct = {\n  tokenize: tokenizeReferenceFull\n};\n/** @type {Construct} */\nconst referenceCollapsedConstruct = {\n  tokenize: tokenizeReferenceCollapsed\n};\n\n/** @type {Resolver} */\nfunction resolveAllLabelEnd(events) {\n  let index = -1;\n  /** @type {Array<Event>} */\n  const newEvents = [];\n  while (++index < events.length) {\n    const token = events[index][1];\n    newEvents.push(events[index]);\n    if (token.type === \"labelImage\" || token.type === \"labelLink\" || token.type === \"labelEnd\") {\n      // Remove the marker.\n      const offset = token.type === \"labelImage\" ? 4 : 2;\n      token.type = \"data\";\n      index += offset;\n    }\n  }\n\n  // If the events are equal, we don't have to copy newEvents to events\n  if (events.length !== newEvents.length) {\n    splice(events, 0, events.length, newEvents);\n  }\n  return events;\n}\n\n/** @type {Resolver} */\nfunction resolveToLabelEnd(events, context) {\n  let index = events.length;\n  let offset = 0;\n  /** @type {Token} */\n  let token;\n  /** @type {number | undefined} */\n  let open;\n  /** @type {number | undefined} */\n  let close;\n  /** @type {Array<Event>} */\n  let media;\n\n  // Find an opening.\n  while (index--) {\n    token = events[index][1];\n    if (open) {\n      // If we see another link, or inactive link label, we\u2019ve been here before.\n      if (token.type === \"link\" || token.type === \"labelLink\" && token._inactive) {\n        break;\n      }\n\n      // Mark other link openings as inactive, as we can\u2019t have links in\n      // links.\n      if (events[index][0] === 'enter' && token.type === \"labelLink\") {\n        token._inactive = true;\n      }\n    } else if (close) {\n      if (events[index][0] === 'enter' && (token.type === \"labelImage\" || token.type === \"labelLink\") && !token._balanced) {\n        open = index;\n        if (token.type !== \"labelLink\") {\n          offset = 2;\n          break;\n        }\n      }\n    } else if (token.type === \"labelEnd\") {\n      close = index;\n    }\n  }\n  const group = {\n    type: events[open][1].type === \"labelLink\" ? \"link\" : \"image\",\n    start: {\n      ...events[open][1].start\n    },\n    end: {\n      ...events[events.length - 1][1].end\n    }\n  };\n  const label = {\n    type: \"label\",\n    start: {\n      ...events[open][1].start\n    },\n    end: {\n      ...events[close][1].end\n    }\n  };\n  const text = {\n    type: \"labelText\",\n    start: {\n      ...events[open + offset + 2][1].end\n    },\n    end: {\n      ...events[close - 2][1].start\n    }\n  };\n  media = [['enter', group, context], ['enter', label, context]];\n\n  // Opening marker.\n  media = push(media, events.slice(open + 1, open + offset + 3));\n\n  // Text open.\n  media = push(media, [['enter', text, context]]);\n\n  // Always populated by defaults.\n\n  // Between.\n  media = push(media, resolveAll(context.parser.constructs.insideSpan.null, events.slice(open + offset + 4, close - 3), context));\n\n  // Text close, marker close, label close.\n  media = push(media, [['exit', text, context], events[close - 2], events[close - 1], ['exit', label, context]]);\n\n  // Reference, resource, or so.\n  media = push(media, events.slice(close + 1));\n\n  // Media close.\n  media = push(media, [['exit', group, context]]);\n  splice(events, open, events.length, media);\n  return events;\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeLabelEnd(effects, ok, nok) {\n  const self = this;\n  let index = self.events.length;\n  /** @type {Token} */\n  let labelStart;\n  /** @type {boolean} */\n  let defined;\n\n  // Find an opening.\n  while (index--) {\n    if ((self.events[index][1].type === \"labelImage\" || self.events[index][1].type === \"labelLink\") && !self.events[index][1]._balanced) {\n      labelStart = self.events[index][1];\n      break;\n    }\n  }\n  return start;\n\n  /**\n   * Start of label end.\n   *\n   * ```markdown\n   * > | [a](b) c\n   *       ^\n   * > | [a][b] c\n   *       ^\n   * > | [a][] b\n   *       ^\n   * > | [a] b\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    // If there is not an okay opening.\n    if (!labelStart) {\n      return nok(code);\n    }\n\n    // If the corresponding label (link) start is marked as inactive,\n    // it means we\u2019d be wrapping a link, like this:\n    //\n    // ```markdown\n    // > | a [b [c](d) e](f) g.\n    //                  ^\n    // ```\n    //\n    // We can\u2019t have that, so it\u2019s just balanced brackets.\n    if (labelStart._inactive) {\n      return labelEndNok(code);\n    }\n    defined = self.parser.defined.includes(normalizeIdentifier(self.sliceSerialize({\n      start: labelStart.end,\n      end: self.now()\n    })));\n    effects.enter(\"labelEnd\");\n    effects.enter(\"labelMarker\");\n    effects.consume(code);\n    effects.exit(\"labelMarker\");\n    effects.exit(\"labelEnd\");\n    return after;\n  }\n\n  /**\n   * After `]`.\n   *\n   * ```markdown\n   * > | [a](b) c\n   *       ^\n   * > | [a][b] c\n   *       ^\n   * > | [a][] b\n   *       ^\n   * > | [a] b\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    // Note: `markdown-rs` also parses GFM footnotes here, which for us is in\n    // an extension.\n\n    // Resource (`[asd](fgh)`)?\n    if (code === 40) {\n      return effects.attempt(resourceConstruct, labelEndOk, defined ? labelEndOk : labelEndNok)(code);\n    }\n\n    // Full (`[asd][fgh]`) or collapsed (`[asd][]`) reference?\n    if (code === 91) {\n      return effects.attempt(referenceFullConstruct, labelEndOk, defined ? referenceNotFull : labelEndNok)(code);\n    }\n\n    // Shortcut (`[asd]`) reference?\n    return defined ? labelEndOk(code) : labelEndNok(code);\n  }\n\n  /**\n   * After `]`, at `[`, but not at a full reference.\n   *\n   * > \uD83D\uDC49 **Note**: we only get here if the label is defined.\n   *\n   * ```markdown\n   * > | [a][] b\n   *        ^\n   * > | [a] b\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function referenceNotFull(code) {\n    return effects.attempt(referenceCollapsedConstruct, labelEndOk, labelEndNok)(code);\n  }\n\n  /**\n   * Done, we found something.\n   *\n   * ```markdown\n   * > | [a](b) c\n   *           ^\n   * > | [a][b] c\n   *           ^\n   * > | [a][] b\n   *          ^\n   * > | [a] b\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function labelEndOk(code) {\n    // Note: `markdown-rs` does a bunch of stuff here.\n    return ok(code);\n  }\n\n  /**\n   * Done, it\u2019s nothing.\n   *\n   * There was an okay opening, but we didn\u2019t match anything.\n   *\n   * ```markdown\n   * > | [a](b c\n   *        ^\n   * > | [a][b c\n   *        ^\n   * > | [a] b\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function labelEndNok(code) {\n    labelStart._balanced = true;\n    return nok(code);\n  }\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeResource(effects, ok, nok) {\n  return resourceStart;\n\n  /**\n   * At a resource.\n   *\n   * ```markdown\n   * > | [a](b) c\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function resourceStart(code) {\n    effects.enter(\"resource\");\n    effects.enter(\"resourceMarker\");\n    effects.consume(code);\n    effects.exit(\"resourceMarker\");\n    return resourceBefore;\n  }\n\n  /**\n   * In resource, after `(`, at optional whitespace.\n   *\n   * ```markdown\n   * > | [a](b) c\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function resourceBefore(code) {\n    return markdownLineEndingOrSpace(code) ? factoryWhitespace(effects, resourceOpen)(code) : resourceOpen(code);\n  }\n\n  /**\n   * In resource, after optional whitespace, at `)` or a destination.\n   *\n   * ```markdown\n   * > | [a](b) c\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function resourceOpen(code) {\n    if (code === 41) {\n      return resourceEnd(code);\n    }\n    return factoryDestination(effects, resourceDestinationAfter, resourceDestinationMissing, \"resourceDestination\", \"resourceDestinationLiteral\", \"resourceDestinationLiteralMarker\", \"resourceDestinationRaw\", \"resourceDestinationString\", 32)(code);\n  }\n\n  /**\n   * In resource, after destination, at optional whitespace.\n   *\n   * ```markdown\n   * > | [a](b) c\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function resourceDestinationAfter(code) {\n    return markdownLineEndingOrSpace(code) ? factoryWhitespace(effects, resourceBetween)(code) : resourceEnd(code);\n  }\n\n  /**\n   * At invalid destination.\n   *\n   * ```markdown\n   * > | [a](<<) b\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function resourceDestinationMissing(code) {\n    return nok(code);\n  }\n\n  /**\n   * In resource, after destination and whitespace, at `(` or title.\n   *\n   * ```markdown\n   * > | [a](b ) c\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function resourceBetween(code) {\n    if (code === 34 || code === 39 || code === 40) {\n      return factoryTitle(effects, resourceTitleAfter, nok, \"resourceTitle\", \"resourceTitleMarker\", \"resourceTitleString\")(code);\n    }\n    return resourceEnd(code);\n  }\n\n  /**\n   * In resource, after title, at optional whitespace.\n   *\n   * ```markdown\n   * > | [a](b \"c\") d\n   *              ^\n   * ```\n   *\n   * @type {State}\n   */\n  function resourceTitleAfter(code) {\n    return markdownLineEndingOrSpace(code) ? factoryWhitespace(effects, resourceEnd)(code) : resourceEnd(code);\n  }\n\n  /**\n   * In resource, at `)`.\n   *\n   * ```markdown\n   * > | [a](b) d\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function resourceEnd(code) {\n    if (code === 41) {\n      effects.enter(\"resourceMarker\");\n      effects.consume(code);\n      effects.exit(\"resourceMarker\");\n      effects.exit(\"resource\");\n      return ok;\n    }\n    return nok(code);\n  }\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeReferenceFull(effects, ok, nok) {\n  const self = this;\n  return referenceFull;\n\n  /**\n   * In a reference (full), at the `[`.\n   *\n   * ```markdown\n   * > | [a][b] d\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function referenceFull(code) {\n    return factoryLabel.call(self, effects, referenceFullAfter, referenceFullMissing, \"reference\", \"referenceMarker\", \"referenceString\")(code);\n  }\n\n  /**\n   * In a reference (full), after `]`.\n   *\n   * ```markdown\n   * > | [a][b] d\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function referenceFullAfter(code) {\n    return self.parser.defined.includes(normalizeIdentifier(self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1))) ? ok(code) : nok(code);\n  }\n\n  /**\n   * In reference (full) that was missing.\n   *\n   * ```markdown\n   * > | [a][b d\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function referenceFullMissing(code) {\n    return nok(code);\n  }\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeReferenceCollapsed(effects, ok, nok) {\n  return referenceCollapsedStart;\n\n  /**\n   * In reference (collapsed), at `[`.\n   *\n   * > \uD83D\uDC49 **Note**: we only get here if the label is defined.\n   *\n   * ```markdown\n   * > | [a][] d\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function referenceCollapsedStart(code) {\n    // We only attempt a collapsed label if there\u2019s a `[`.\n\n    effects.enter(\"reference\");\n    effects.enter(\"referenceMarker\");\n    effects.consume(code);\n    effects.exit(\"referenceMarker\");\n    return referenceCollapsedOpen;\n  }\n\n  /**\n   * In reference (collapsed), at `]`.\n   *\n   * > \uD83D\uDC49 **Note**: we only get here if the label is defined.\n   *\n   * ```markdown\n   * > | [a][] d\n   *         ^\n   * ```\n   *\n   *  @type {State}\n   */\n  function referenceCollapsedOpen(code) {\n    if (code === 93) {\n      effects.enter(\"referenceMarker\");\n      effects.consume(code);\n      effects.exit(\"referenceMarker\");\n      effects.exit(\"reference\");\n      return ok;\n    }\n    return nok(code);\n  }\n}", "/**\n * @import {\n *   Construct,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { labelEnd } from './label-end.js';\n\n/** @type {Construct} */\nexport const labelStartImage = {\n  name: 'labelStartImage',\n  resolveAll: labelEnd.resolveAll,\n  tokenize: tokenizeLabelStartImage\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeLabelStartImage(effects, ok, nok) {\n  const self = this;\n  return start;\n\n  /**\n   * Start of label (image) start.\n   *\n   * ```markdown\n   * > | a ![b] c\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter(\"labelImage\");\n    effects.enter(\"labelImageMarker\");\n    effects.consume(code);\n    effects.exit(\"labelImageMarker\");\n    return open;\n  }\n\n  /**\n   * After `!`, at `[`.\n   *\n   * ```markdown\n   * > | a ![b] c\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function open(code) {\n    if (code === 91) {\n      effects.enter(\"labelMarker\");\n      effects.consume(code);\n      effects.exit(\"labelMarker\");\n      effects.exit(\"labelImage\");\n      return after;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After `![`.\n   *\n   * ```markdown\n   * > | a ![b] c\n   *         ^\n   * ```\n   *\n   * This is needed in because, when GFM footnotes are enabled, images never\n   * form when started with a `^`.\n   * Instead, links form:\n   *\n   * ```markdown\n   * ![^a](b)\n   *\n   * ![^a][b]\n   *\n   * [b]: c\n   * ```\n   *\n   * ```html\n   * <p>!<a href=\\\"b\\\">^a</a></p>\n   * <p>!<a href=\\\"c\\\">^a</a></p>\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    // To do: use a new field to do this, this is still needed for\n    // `micromark-extension-gfm-footnote`, but the `label-start-link`\n    // behavior isn\u2019t.\n    // Hidden footnotes hook.\n    /* c8 ignore next 3 */\n    return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs ? nok(code) : ok(code);\n  }\n}", "/**\n * @import {\n *   Construct,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { labelEnd } from './label-end.js';\n\n/** @type {Construct} */\nexport const labelStartLink = {\n  name: 'labelStartLink',\n  resolveAll: labelEnd.resolveAll,\n  tokenize: tokenizeLabelStartLink\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeLabelStartLink(effects, ok, nok) {\n  const self = this;\n  return start;\n\n  /**\n   * Start of label (link) start.\n   *\n   * ```markdown\n   * > | a [b] c\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter(\"labelLink\");\n    effects.enter(\"labelMarker\");\n    effects.consume(code);\n    effects.exit(\"labelMarker\");\n    effects.exit(\"labelLink\");\n    return after;\n  }\n\n  /** @type {State} */\n  function after(code) {\n    // To do: this isn\u2019t needed in `micromark-extension-gfm-footnote`,\n    // remove.\n    // Hidden footnotes hook.\n    /* c8 ignore next 3 */\n    return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs ? nok(code) : ok(code);\n  }\n}", "/**\n * @import {\n *   Construct,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding } from 'micromark-util-character';\n/** @type {Construct} */\nexport const lineEnding = {\n  name: 'lineEnding',\n  tokenize: tokenizeLineEnding\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeLineEnding(effects, ok) {\n  return start;\n\n  /** @type {State} */\n  function start(code) {\n    effects.enter(\"lineEnding\");\n    effects.consume(code);\n    effects.exit(\"lineEnding\");\n    return factorySpace(effects, ok, \"linePrefix\");\n  }\n}", "/**\n * @import {\n *   Code,\n *   Construct,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\nexport const thematicBreak = {\n  name: 'thematicBreak',\n  tokenize: tokenizeThematicBreak\n};\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeThematicBreak(effects, ok, nok) {\n  let size = 0;\n  /** @type {NonNullable<Code>} */\n  let marker;\n  return start;\n\n  /**\n   * Start of thematic break.\n   *\n   * ```markdown\n   * > | ***\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter(\"thematicBreak\");\n    // To do: parse indent like `markdown-rs`.\n    return before(code);\n  }\n\n  /**\n   * After optional whitespace, at marker.\n   *\n   * ```markdown\n   * > | ***\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function before(code) {\n    marker = code;\n    return atBreak(code);\n  }\n\n  /**\n   * After something, before something else.\n   *\n   * ```markdown\n   * > | ***\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function atBreak(code) {\n    if (code === marker) {\n      effects.enter(\"thematicBreakSequence\");\n      return sequence(code);\n    }\n    if (size >= 3 && (code === null || markdownLineEnding(code))) {\n      effects.exit(\"thematicBreak\");\n      return ok(code);\n    }\n    return nok(code);\n  }\n\n  /**\n   * In sequence.\n   *\n   * ```markdown\n   * > | ***\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function sequence(code) {\n    if (code === marker) {\n      effects.consume(code);\n      size++;\n      return sequence;\n    }\n    effects.exit(\"thematicBreakSequence\");\n    return markdownSpace(code) ? factorySpace(effects, atBreak, \"whitespace\")(code) : atBreak(code);\n  }\n}", "/**\n * @import {\n *   Code,\n *   Construct,\n *   Exiter,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { asciiDigit, markdownSpace } from 'micromark-util-character';\nimport { blankLine } from './blank-line.js';\nimport { thematicBreak } from './thematic-break.js';\n\n/** @type {Construct} */\nexport const list = {\n  continuation: {\n    tokenize: tokenizeListContinuation\n  },\n  exit: tokenizeListEnd,\n  name: 'list',\n  tokenize: tokenizeListStart\n};\n\n/** @type {Construct} */\nconst listItemPrefixWhitespaceConstruct = {\n  partial: true,\n  tokenize: tokenizeListItemPrefixWhitespace\n};\n\n/** @type {Construct} */\nconst indentConstruct = {\n  partial: true,\n  tokenize: tokenizeIndent\n};\n\n// To do: `markdown-rs` parses list items on their own and later stitches them\n// together.\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeListStart(effects, ok, nok) {\n  const self = this;\n  const tail = self.events[self.events.length - 1];\n  let initialSize = tail && tail[1].type === \"linePrefix\" ? tail[2].sliceSerialize(tail[1], true).length : 0;\n  let size = 0;\n  return start;\n\n  /** @type {State} */\n  function start(code) {\n    const kind = self.containerState.type || (code === 42 || code === 43 || code === 45 ? \"listUnordered\" : \"listOrdered\");\n    if (kind === \"listUnordered\" ? !self.containerState.marker || code === self.containerState.marker : asciiDigit(code)) {\n      if (!self.containerState.type) {\n        self.containerState.type = kind;\n        effects.enter(kind, {\n          _container: true\n        });\n      }\n      if (kind === \"listUnordered\") {\n        effects.enter(\"listItemPrefix\");\n        return code === 42 || code === 45 ? effects.check(thematicBreak, nok, atMarker)(code) : atMarker(code);\n      }\n      if (!self.interrupt || code === 49) {\n        effects.enter(\"listItemPrefix\");\n        effects.enter(\"listItemValue\");\n        return inside(code);\n      }\n    }\n    return nok(code);\n  }\n\n  /** @type {State} */\n  function inside(code) {\n    if (asciiDigit(code) && ++size < 10) {\n      effects.consume(code);\n      return inside;\n    }\n    if ((!self.interrupt || size < 2) && (self.containerState.marker ? code === self.containerState.marker : code === 41 || code === 46)) {\n      effects.exit(\"listItemValue\");\n      return atMarker(code);\n    }\n    return nok(code);\n  }\n\n  /**\n   * @type {State}\n   **/\n  function atMarker(code) {\n    effects.enter(\"listItemMarker\");\n    effects.consume(code);\n    effects.exit(\"listItemMarker\");\n    self.containerState.marker = self.containerState.marker || code;\n    return effects.check(blankLine,\n    // Can\u2019t be empty when interrupting.\n    self.interrupt ? nok : onBlank, effects.attempt(listItemPrefixWhitespaceConstruct, endOfPrefix, otherPrefix));\n  }\n\n  /** @type {State} */\n  function onBlank(code) {\n    self.containerState.initialBlankLine = true;\n    initialSize++;\n    return endOfPrefix(code);\n  }\n\n  /** @type {State} */\n  function otherPrefix(code) {\n    if (markdownSpace(code)) {\n      effects.enter(\"listItemPrefixWhitespace\");\n      effects.consume(code);\n      effects.exit(\"listItemPrefixWhitespace\");\n      return endOfPrefix;\n    }\n    return nok(code);\n  }\n\n  /** @type {State} */\n  function endOfPrefix(code) {\n    self.containerState.size = initialSize + self.sliceSerialize(effects.exit(\"listItemPrefix\"), true).length;\n    return ok(code);\n  }\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeListContinuation(effects, ok, nok) {\n  const self = this;\n  self.containerState._closeFlow = undefined;\n  return effects.check(blankLine, onBlank, notBlank);\n\n  /** @type {State} */\n  function onBlank(code) {\n    self.containerState.furtherBlankLines = self.containerState.furtherBlankLines || self.containerState.initialBlankLine;\n\n    // We have a blank line.\n    // Still, try to consume at most the items size.\n    return factorySpace(effects, ok, \"listItemIndent\", self.containerState.size + 1)(code);\n  }\n\n  /** @type {State} */\n  function notBlank(code) {\n    if (self.containerState.furtherBlankLines || !markdownSpace(code)) {\n      self.containerState.furtherBlankLines = undefined;\n      self.containerState.initialBlankLine = undefined;\n      return notInCurrentItem(code);\n    }\n    self.containerState.furtherBlankLines = undefined;\n    self.containerState.initialBlankLine = undefined;\n    return effects.attempt(indentConstruct, ok, notInCurrentItem)(code);\n  }\n\n  /** @type {State} */\n  function notInCurrentItem(code) {\n    // While we do continue, we signal that the flow should be closed.\n    self.containerState._closeFlow = true;\n    // As we\u2019re closing flow, we\u2019re no longer interrupting.\n    self.interrupt = undefined;\n    // Always populated by defaults.\n\n    return factorySpace(effects, effects.attempt(list, ok, nok), \"linePrefix\", self.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4)(code);\n  }\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeIndent(effects, ok, nok) {\n  const self = this;\n  return factorySpace(effects, afterPrefix, \"listItemIndent\", self.containerState.size + 1);\n\n  /** @type {State} */\n  function afterPrefix(code) {\n    const tail = self.events[self.events.length - 1];\n    return tail && tail[1].type === \"listItemIndent\" && tail[2].sliceSerialize(tail[1], true).length === self.containerState.size ? ok(code) : nok(code);\n  }\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Exiter}\n */\nfunction tokenizeListEnd(effects) {\n  effects.exit(this.containerState.type);\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeListItemPrefixWhitespace(effects, ok, nok) {\n  const self = this;\n\n  // Always populated by defaults.\n\n  return factorySpace(effects, afterPrefix, \"listItemPrefixWhitespace\", self.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4 + 1);\n\n  /** @type {State} */\n  function afterPrefix(code) {\n    const tail = self.events[self.events.length - 1];\n    return !markdownSpace(code) && tail && tail[1].type === \"listItemPrefixWhitespace\" ? ok(code) : nok(code);\n  }\n}", "/**\n * @import {\n *   Code,\n *   Construct,\n *   Resolver,\n *   State,\n *   TokenizeContext,\n *   Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\nexport const setextUnderline = {\n  name: 'setextUnderline',\n  resolveTo: resolveToSetextUnderline,\n  tokenize: tokenizeSetextUnderline\n};\n\n/** @type {Resolver} */\nfunction resolveToSetextUnderline(events, context) {\n  // To do: resolve like `markdown-rs`.\n  let index = events.length;\n  /** @type {number | undefined} */\n  let content;\n  /** @type {number | undefined} */\n  let text;\n  /** @type {number | undefined} */\n  let definition;\n\n  // Find the opening of the content.\n  // It\u2019ll always exist: we don\u2019t tokenize if it isn\u2019t there.\n  while (index--) {\n    if (events[index][0] === 'enter') {\n      if (events[index][1].type === \"content\") {\n        content = index;\n        break;\n      }\n      if (events[index][1].type === \"paragraph\") {\n        text = index;\n      }\n    }\n    // Exit\n    else {\n      if (events[index][1].type === \"content\") {\n        // Remove the content end (if needed we\u2019ll add it later)\n        events.splice(index, 1);\n      }\n      if (!definition && events[index][1].type === \"definition\") {\n        definition = index;\n      }\n    }\n  }\n  const heading = {\n    type: \"setextHeading\",\n    start: {\n      ...events[text][1].start\n    },\n    end: {\n      ...events[events.length - 1][1].end\n    }\n  };\n\n  // Change the paragraph to setext heading text.\n  events[text][1].type = \"setextHeadingText\";\n\n  // If we have definitions in the content, we\u2019ll keep on having content,\n  // but we need move it.\n  if (definition) {\n    events.splice(text, 0, ['enter', heading, context]);\n    events.splice(definition + 1, 0, ['exit', events[content][1], context]);\n    events[content][1].end = {\n      ...events[definition][1].end\n    };\n  } else {\n    events[content][1] = heading;\n  }\n\n  // Add the heading exit at the end.\n  events.push(['exit', heading, context]);\n  return events;\n}\n\n/**\n * @this {TokenizeContext}\n *   Context.\n * @type {Tokenizer}\n */\nfunction tokenizeSetextUnderline(effects, ok, nok) {\n  const self = this;\n  /** @type {NonNullable<Code>} */\n  let marker;\n  return start;\n\n  /**\n   * At start of heading (setext) underline.\n   *\n   * ```markdown\n   *   | aa\n   * > | ==\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    let index = self.events.length;\n    /** @type {boolean | undefined} */\n    let paragraph;\n    // Find an opening.\n    while (index--) {\n      // Skip enter/exit of line ending, line prefix, and content.\n      // We can now either have a definition or a paragraph.\n      if (self.events[index][1].type !== \"lineEnding\" && self.events[index][1].type !== \"linePrefix\" && self.events[index][1].type !== \"content\") {\n        paragraph = self.events[index][1].type === \"paragraph\";\n        break;\n      }\n    }\n\n    // To do: handle lazy/pierce like `markdown-rs`.\n    // To do: parse indent like `markdown-rs`.\n    if (!self.parser.lazy[self.now().line] && (self.interrupt || paragraph)) {\n      effects.enter(\"setextHeadingLine\");\n      marker = code;\n      return before(code);\n    }\n    return nok(code);\n  }\n\n  /**\n   * After optional whitespace, at `-` or `=`.\n   *\n   * ```markdown\n   *   | aa\n   * > | ==\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function before(code) {\n    effects.enter(\"setextHeadingLineSequence\");\n    return inside(code);\n  }\n\n  /**\n   * In sequence.\n   *\n   * ```markdown\n   *   | aa\n   * > | ==\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function inside(code) {\n    if (code === marker) {\n      effects.consume(code);\n      return inside;\n    }\n    effects.exit(\"setextHeadingLineSequence\");\n    return markdownSpace(code) ? factorySpace(effects, after, \"lineSuffix\")(code) : after(code);\n  }\n\n  /**\n   * After sequence, after optional whitespace.\n   *\n   * ```markdown\n   *   | aa\n   * > | ==\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit(\"setextHeadingLine\");\n      return ok(code);\n    }\n    return nok(code);\n  }\n}", "/**\n * @import {\n *   InitialConstruct,\n *   Initializer,\n *   State,\n *   TokenizeContext\n * } from 'micromark-util-types'\n */\n\nimport { blankLine, content } from 'micromark-core-commonmark';\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding } from 'micromark-util-character';\n/** @type {InitialConstruct} */\nexport const flow = {\n  tokenize: initializeFlow\n};\n\n/**\n * @this {TokenizeContext}\n *   Self.\n * @type {Initializer}\n *   Initializer.\n */\nfunction initializeFlow(effects) {\n  const self = this;\n  const initial = effects.attempt(\n  // Try to parse a blank line.\n  blankLine, atBlankEnding,\n  // Try to parse initial flow (essentially, only code).\n  effects.attempt(this.parser.constructs.flowInitial, afterConstruct, factorySpace(effects, effects.attempt(this.parser.constructs.flow, afterConstruct, effects.attempt(content, afterConstruct)), \"linePrefix\")));\n  return initial;\n\n  /** @type {State} */\n  function atBlankEnding(code) {\n    if (code === null) {\n      effects.consume(code);\n      return;\n    }\n    effects.enter(\"lineEndingBlank\");\n    effects.consume(code);\n    effects.exit(\"lineEndingBlank\");\n    self.currentConstruct = undefined;\n    return initial;\n  }\n\n  /** @type {State} */\n  function afterConstruct(code) {\n    if (code === null) {\n      effects.consume(code);\n      return;\n    }\n    effects.enter(\"lineEnding\");\n    effects.consume(code);\n    effects.exit(\"lineEnding\");\n    self.currentConstruct = undefined;\n    return initial;\n  }\n}", "/**\n * @import {\n *   Code,\n *   InitialConstruct,\n *   Initializer,\n *   Resolver,\n *   State,\n *   TokenizeContext\n * } from 'micromark-util-types'\n */\n\nexport const resolver = {\n  resolveAll: createResolver()\n};\nexport const string = initializeFactory('string');\nexport const text = initializeFactory('text');\n\n/**\n * @param {'string' | 'text'} field\n *   Field.\n * @returns {InitialConstruct}\n *   Construct.\n */\nfunction initializeFactory(field) {\n  return {\n    resolveAll: createResolver(field === 'text' ? resolveAllLineSuffixes : undefined),\n    tokenize: initializeText\n  };\n\n  /**\n   * @this {TokenizeContext}\n   *   Context.\n   * @type {Initializer}\n   */\n  function initializeText(effects) {\n    const self = this;\n    const constructs = this.parser.constructs[field];\n    const text = effects.attempt(constructs, start, notText);\n    return start;\n\n    /** @type {State} */\n    function start(code) {\n      return atBreak(code) ? text(code) : notText(code);\n    }\n\n    /** @type {State} */\n    function notText(code) {\n      if (code === null) {\n        effects.consume(code);\n        return;\n      }\n      effects.enter(\"data\");\n      effects.consume(code);\n      return data;\n    }\n\n    /** @type {State} */\n    function data(code) {\n      if (atBreak(code)) {\n        effects.exit(\"data\");\n        return text(code);\n      }\n\n      // Data.\n      effects.consume(code);\n      return data;\n    }\n\n    /**\n     * @param {Code} code\n     *   Code.\n     * @returns {boolean}\n     *   Whether the code is a break.\n     */\n    function atBreak(code) {\n      if (code === null) {\n        return true;\n      }\n      const list = constructs[code];\n      let index = -1;\n      if (list) {\n        // Always populated by defaults.\n\n        while (++index < list.length) {\n          const item = list[index];\n          if (!item.previous || item.previous.call(self, self.previous)) {\n            return true;\n          }\n        }\n      }\n      return false;\n    }\n  }\n}\n\n/**\n * @param {Resolver | undefined} [extraResolver]\n *   Resolver.\n * @returns {Resolver}\n *   Resolver.\n */\nfunction createResolver(extraResolver) {\n  return resolveAllText;\n\n  /** @type {Resolver} */\n  function resolveAllText(events, context) {\n    let index = -1;\n    /** @type {number | undefined} */\n    let enter;\n\n    // A rather boring computation (to merge adjacent `data` events) which\n    // improves mm performance by 29%.\n    while (++index <= events.length) {\n      if (enter === undefined) {\n        if (events[index] && events[index][1].type === \"data\") {\n          enter = index;\n          index++;\n        }\n      } else if (!events[index] || events[index][1].type !== \"data\") {\n        // Don\u2019t do anything if there is one data token.\n        if (index !== enter + 2) {\n          events[enter][1].end = events[index - 1][1].end;\n          events.splice(enter + 2, index - enter - 2);\n          index = enter + 2;\n        }\n        enter = undefined;\n      }\n    }\n    return extraResolver ? extraResolver(events, context) : events;\n  }\n}\n\n/**\n * A rather ugly set of instructions which again looks at chunks in the input\n * stream.\n * The reason to do this here is that it is *much* faster to parse in reverse.\n * And that we can\u2019t hook into `null` to split the line suffix before an EOF.\n * To do: figure out if we can make this into a clean utility, or even in core.\n * As it will be useful for GFMs literal autolink extension (and maybe even\n * tables?)\n *\n * @type {Resolver}\n */\nfunction resolveAllLineSuffixes(events, context) {\n  let eventIndex = 0; // Skip first.\n\n  while (++eventIndex <= events.length) {\n    if ((eventIndex === events.length || events[eventIndex][1].type === \"lineEnding\") && events[eventIndex - 1][1].type === \"data\") {\n      const data = events[eventIndex - 1][1];\n      const chunks = context.sliceStream(data);\n      let index = chunks.length;\n      let bufferIndex = -1;\n      let size = 0;\n      /** @type {boolean | undefined} */\n      let tabs;\n      while (index--) {\n        const chunk = chunks[index];\n        if (typeof chunk === 'string') {\n          bufferIndex = chunk.length;\n          while (chunk.charCodeAt(bufferIndex - 1) === 32) {\n            size++;\n            bufferIndex--;\n          }\n          if (bufferIndex) break;\n          bufferIndex = -1;\n        }\n        // Number\n        else if (chunk === -2) {\n          tabs = true;\n          size++;\n        } else if (chunk === -1) {\n          // Empty\n        } else {\n          // Replacement character, exit.\n          index++;\n          break;\n        }\n      }\n      if (size) {\n        const token = {\n          type: eventIndex === events.length || tabs || size < 2 ? \"lineSuffix\" : \"hardBreakTrailing\",\n          start: {\n            _bufferIndex: index ? bufferIndex : data.start._bufferIndex + bufferIndex,\n            _index: data.start._index + index,\n            line: data.end.line,\n            column: data.end.column - size,\n            offset: data.end.offset - size\n          },\n          end: {\n            ...data.end\n          }\n        };\n        data.end = {\n          ...token.start\n        };\n        if (data.start.offset === data.end.offset) {\n          Object.assign(data, token);\n        } else {\n          events.splice(eventIndex, 0, ['enter', token, context], ['exit', token, context]);\n          eventIndex += 2;\n        }\n      }\n      eventIndex++;\n    }\n  }\n  return events;\n}", "/**\n * @import {Extension} from 'micromark-util-types'\n */\n\nimport { attention, autolink, blockQuote, characterEscape, characterReference, codeFenced, codeIndented, codeText, definition, hardBreakEscape, headingAtx, htmlFlow, htmlText, labelEnd, labelStartImage, labelStartLink, lineEnding, list, setextUnderline, thematicBreak } from 'micromark-core-commonmark';\nimport { resolver as resolveText } from './initialize/text.js';\n\n/** @satisfies {Extension['document']} */\nexport const document = {\n  [42]: list,\n  [43]: list,\n  [45]: list,\n  [48]: list,\n  [49]: list,\n  [50]: list,\n  [51]: list,\n  [52]: list,\n  [53]: list,\n  [54]: list,\n  [55]: list,\n  [56]: list,\n  [57]: list,\n  [62]: blockQuote\n};\n\n/** @satisfies {Extension['contentInitial']} */\nexport const contentInitial = {\n  [91]: definition\n};\n\n/** @satisfies {Extension['flowInitial']} */\nexport const flowInitial = {\n  [-2]: codeIndented,\n  [-1]: codeIndented,\n  [32]: codeIndented\n};\n\n/** @satisfies {Extension['flow']} */\nexport const flow = {\n  [35]: headingAtx,\n  [42]: thematicBreak,\n  [45]: [setextUnderline, thematicBreak],\n  [60]: htmlFlow,\n  [61]: setextUnderline,\n  [95]: thematicBreak,\n  [96]: codeFenced,\n  [126]: codeFenced\n};\n\n/** @satisfies {Extension['string']} */\nexport const string = {\n  [38]: characterReference,\n  [92]: characterEscape\n};\n\n/** @satisfies {Extension['text']} */\nexport const text = {\n  [-5]: lineEnding,\n  [-4]: lineEnding,\n  [-3]: lineEnding,\n  [33]: labelStartImage,\n  [38]: characterReference,\n  [42]: attention,\n  [60]: [autolink, htmlText],\n  [91]: labelStartLink,\n  [92]: [hardBreakEscape, characterEscape],\n  [93]: labelEnd,\n  [95]: attention,\n  [96]: codeText\n};\n\n/** @satisfies {Extension['insideSpan']} */\nexport const insideSpan = {\n  null: [attention, resolveText]\n};\n\n/** @satisfies {Extension['attentionMarkers']} */\nexport const attentionMarkers = {\n  null: [42, 95]\n};\n\n/** @satisfies {Extension['disable']} */\nexport const disable = {\n  null: []\n};", "/**\n * @import {\n *   Chunk,\n *   Code,\n *   ConstructRecord,\n *   Construct,\n *   Effects,\n *   InitialConstruct,\n *   ParseContext,\n *   Point,\n *   State,\n *   TokenizeContext,\n *   Token\n * } from 'micromark-util-types'\n */\n\n/**\n * @callback Restore\n *   Restore the state.\n * @returns {undefined}\n *   Nothing.\n *\n * @typedef Info\n *   Info.\n * @property {Restore} restore\n *   Restore.\n * @property {number} from\n *   From.\n *\n * @callback ReturnHandle\n *   Handle a successful run.\n * @param {Construct} construct\n *   Construct.\n * @param {Info} info\n *   Info.\n * @returns {undefined}\n *   Nothing.\n */\n\nimport { markdownLineEnding } from 'micromark-util-character';\nimport { push, splice } from 'micromark-util-chunked';\nimport { resolveAll } from 'micromark-util-resolve-all';\n/**\n * Create a tokenizer.\n * Tokenizers deal with one type of data (e.g., containers, flow, text).\n * The parser is the object dealing with it all.\n * `initialize` works like other constructs, except that only its `tokenize`\n * function is used, in which case it doesn\u2019t receive an `ok` or `nok`.\n * `from` can be given to set the point before the first character, although\n * when further lines are indented, they must be set with `defineSkip`.\n *\n * @param {ParseContext} parser\n *   Parser.\n * @param {InitialConstruct} initialize\n *   Construct.\n * @param {Omit<Point, '_bufferIndex' | '_index'> | undefined} [from]\n *   Point (optional).\n * @returns {TokenizeContext}\n *   Context.\n */\nexport function createTokenizer(parser, initialize, from) {\n  /** @type {Point} */\n  let point = {\n    _bufferIndex: -1,\n    _index: 0,\n    line: from && from.line || 1,\n    column: from && from.column || 1,\n    offset: from && from.offset || 0\n  };\n  /** @type {Record<string, number>} */\n  const columnStart = {};\n  /** @type {Array<Construct>} */\n  const resolveAllConstructs = [];\n  /** @type {Array<Chunk>} */\n  let chunks = [];\n  /** @type {Array<Token>} */\n  let stack = [];\n  /** @type {boolean | undefined} */\n  let consumed = true;\n\n  /**\n   * Tools used for tokenizing.\n   *\n   * @type {Effects}\n   */\n  const effects = {\n    attempt: constructFactory(onsuccessfulconstruct),\n    check: constructFactory(onsuccessfulcheck),\n    consume,\n    enter,\n    exit,\n    interrupt: constructFactory(onsuccessfulcheck, {\n      interrupt: true\n    })\n  };\n\n  /**\n   * State and tools for resolving and serializing.\n   *\n   * @type {TokenizeContext}\n   */\n  const context = {\n    code: null,\n    containerState: {},\n    defineSkip,\n    events: [],\n    now,\n    parser,\n    previous: null,\n    sliceSerialize,\n    sliceStream,\n    write\n  };\n\n  /**\n   * The state function.\n   *\n   * @type {State | undefined}\n   */\n  let state = initialize.tokenize.call(context, effects);\n\n  /**\n   * Track which character we expect to be consumed, to catch bugs.\n   *\n   * @type {Code}\n   */\n  let expectedCode;\n  if (initialize.resolveAll) {\n    resolveAllConstructs.push(initialize);\n  }\n  return context;\n\n  /** @type {TokenizeContext['write']} */\n  function write(slice) {\n    chunks = push(chunks, slice);\n    main();\n\n    // Exit if we\u2019re not done, resolve might change stuff.\n    if (chunks[chunks.length - 1] !== null) {\n      return [];\n    }\n    addResult(initialize, 0);\n\n    // Otherwise, resolve, and exit.\n    context.events = resolveAll(resolveAllConstructs, context.events, context);\n    return context.events;\n  }\n\n  //\n  // Tools.\n  //\n\n  /** @type {TokenizeContext['sliceSerialize']} */\n  function sliceSerialize(token, expandTabs) {\n    return serializeChunks(sliceStream(token), expandTabs);\n  }\n\n  /** @type {TokenizeContext['sliceStream']} */\n  function sliceStream(token) {\n    return sliceChunks(chunks, token);\n  }\n\n  /** @type {TokenizeContext['now']} */\n  function now() {\n    // This is a hot path, so we clone manually instead of `Object.assign({}, point)`\n    const {\n      _bufferIndex,\n      _index,\n      line,\n      column,\n      offset\n    } = point;\n    return {\n      _bufferIndex,\n      _index,\n      line,\n      column,\n      offset\n    };\n  }\n\n  /** @type {TokenizeContext['defineSkip']} */\n  function defineSkip(value) {\n    columnStart[value.line] = value.column;\n    accountForPotentialSkip();\n  }\n\n  //\n  // State management.\n  //\n\n  /**\n   * Main loop (note that `_index` and `_bufferIndex` in `point` are modified by\n   * `consume`).\n   * Here is where we walk through the chunks, which either include strings of\n   * several characters, or numerical character codes.\n   * The reason to do this in a loop instead of a call is so the stack can\n   * drain.\n   *\n   * @returns {undefined}\n   *   Nothing.\n   */\n  function main() {\n    /** @type {number} */\n    let chunkIndex;\n    while (point._index < chunks.length) {\n      const chunk = chunks[point._index];\n\n      // If we\u2019re in a buffer chunk, loop through it.\n      if (typeof chunk === 'string') {\n        chunkIndex = point._index;\n        if (point._bufferIndex < 0) {\n          point._bufferIndex = 0;\n        }\n        while (point._index === chunkIndex && point._bufferIndex < chunk.length) {\n          go(chunk.charCodeAt(point._bufferIndex));\n        }\n      } else {\n        go(chunk);\n      }\n    }\n  }\n\n  /**\n   * Deal with one code.\n   *\n   * @param {Code} code\n   *   Code.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  function go(code) {\n    consumed = undefined;\n    expectedCode = code;\n    state = state(code);\n  }\n\n  /** @type {Effects['consume']} */\n  function consume(code) {\n    if (markdownLineEnding(code)) {\n      point.line++;\n      point.column = 1;\n      point.offset += code === -3 ? 2 : 1;\n      accountForPotentialSkip();\n    } else if (code !== -1) {\n      point.column++;\n      point.offset++;\n    }\n\n    // Not in a string chunk.\n    if (point._bufferIndex < 0) {\n      point._index++;\n    } else {\n      point._bufferIndex++;\n\n      // At end of string chunk.\n      if (point._bufferIndex ===\n      // Points w/ non-negative `_bufferIndex` reference\n      // strings.\n      /** @type {string} */\n      chunks[point._index].length) {\n        point._bufferIndex = -1;\n        point._index++;\n      }\n    }\n\n    // Expose the previous character.\n    context.previous = code;\n\n    // Mark as consumed.\n    consumed = true;\n  }\n\n  /** @type {Effects['enter']} */\n  function enter(type, fields) {\n    /** @type {Token} */\n    // @ts-expect-error Patch instead of assign required fields to help GC.\n    const token = fields || {};\n    token.type = type;\n    token.start = now();\n    context.events.push(['enter', token, context]);\n    stack.push(token);\n    return token;\n  }\n\n  /** @type {Effects['exit']} */\n  function exit(type) {\n    const token = stack.pop();\n    token.end = now();\n    context.events.push(['exit', token, context]);\n    return token;\n  }\n\n  /**\n   * Use results.\n   *\n   * @type {ReturnHandle}\n   */\n  function onsuccessfulconstruct(construct, info) {\n    addResult(construct, info.from);\n  }\n\n  /**\n   * Discard results.\n   *\n   * @type {ReturnHandle}\n   */\n  function onsuccessfulcheck(_, info) {\n    info.restore();\n  }\n\n  /**\n   * Factory to attempt/check/interrupt.\n   *\n   * @param {ReturnHandle} onreturn\n   *   Callback.\n   * @param {{interrupt?: boolean | undefined} | undefined} [fields]\n   *   Fields.\n   */\n  function constructFactory(onreturn, fields) {\n    return hook;\n\n    /**\n     * Handle either an object mapping codes to constructs, a list of\n     * constructs, or a single construct.\n     *\n     * @param {Array<Construct> | ConstructRecord | Construct} constructs\n     *   Constructs.\n     * @param {State} returnState\n     *   State.\n     * @param {State | undefined} [bogusState]\n     *   State.\n     * @returns {State}\n     *   State.\n     */\n    function hook(constructs, returnState, bogusState) {\n      /** @type {ReadonlyArray<Construct>} */\n      let listOfConstructs;\n      /** @type {number} */\n      let constructIndex;\n      /** @type {Construct} */\n      let currentConstruct;\n      /** @type {Info} */\n      let info;\n      return Array.isArray(constructs) ? /* c8 ignore next 1 */\n      handleListOfConstructs(constructs) : 'tokenize' in constructs ?\n      // Looks like a construct.\n      handleListOfConstructs([(/** @type {Construct} */constructs)]) : handleMapOfConstructs(constructs);\n\n      /**\n       * Handle a list of construct.\n       *\n       * @param {ConstructRecord} map\n       *   Constructs.\n       * @returns {State}\n       *   State.\n       */\n      function handleMapOfConstructs(map) {\n        return start;\n\n        /** @type {State} */\n        function start(code) {\n          const left = code !== null && map[code];\n          const all = code !== null && map.null;\n          const list = [\n          // To do: add more extension tests.\n          /* c8 ignore next 2 */\n          ...(Array.isArray(left) ? left : left ? [left] : []), ...(Array.isArray(all) ? all : all ? [all] : [])];\n          return handleListOfConstructs(list)(code);\n        }\n      }\n\n      /**\n       * Handle a list of construct.\n       *\n       * @param {ReadonlyArray<Construct>} list\n       *   Constructs.\n       * @returns {State}\n       *   State.\n       */\n      function handleListOfConstructs(list) {\n        listOfConstructs = list;\n        constructIndex = 0;\n        if (list.length === 0) {\n          return bogusState;\n        }\n        return handleConstruct(list[constructIndex]);\n      }\n\n      /**\n       * Handle a single construct.\n       *\n       * @param {Construct} construct\n       *   Construct.\n       * @returns {State}\n       *   State.\n       */\n      function handleConstruct(construct) {\n        return start;\n\n        /** @type {State} */\n        function start(code) {\n          // To do: not needed to store if there is no bogus state, probably?\n          // Currently doesn\u2019t work because `inspect` in document does a check\n          // w/o a bogus, which doesn\u2019t make sense. But it does seem to help perf\n          // by not storing.\n          info = store();\n          currentConstruct = construct;\n          if (!construct.partial) {\n            context.currentConstruct = construct;\n          }\n\n          // Always populated by defaults.\n\n          if (construct.name && context.parser.constructs.disable.null.includes(construct.name)) {\n            return nok(code);\n          }\n          return construct.tokenize.call(\n          // If we do have fields, create an object w/ `context` as its\n          // prototype.\n          // This allows a \u201Clive binding\u201D, which is needed for `interrupt`.\n          fields ? Object.assign(Object.create(context), fields) : context, effects, ok, nok)(code);\n        }\n      }\n\n      /** @type {State} */\n      function ok(code) {\n        consumed = true;\n        onreturn(currentConstruct, info);\n        return returnState;\n      }\n\n      /** @type {State} */\n      function nok(code) {\n        consumed = true;\n        info.restore();\n        if (++constructIndex < listOfConstructs.length) {\n          return handleConstruct(listOfConstructs[constructIndex]);\n        }\n        return bogusState;\n      }\n    }\n  }\n\n  /**\n   * @param {Construct} construct\n   *   Construct.\n   * @param {number} from\n   *   From.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  function addResult(construct, from) {\n    if (construct.resolveAll && !resolveAllConstructs.includes(construct)) {\n      resolveAllConstructs.push(construct);\n    }\n    if (construct.resolve) {\n      splice(context.events, from, context.events.length - from, construct.resolve(context.events.slice(from), context));\n    }\n    if (construct.resolveTo) {\n      context.events = construct.resolveTo(context.events, context);\n    }\n  }\n\n  /**\n   * Store state.\n   *\n   * @returns {Info}\n   *   Info.\n   */\n  function store() {\n    const startPoint = now();\n    const startPrevious = context.previous;\n    const startCurrentConstruct = context.currentConstruct;\n    const startEventsIndex = context.events.length;\n    const startStack = Array.from(stack);\n    return {\n      from: startEventsIndex,\n      restore\n    };\n\n    /**\n     * Restore state.\n     *\n     * @returns {undefined}\n     *   Nothing.\n     */\n    function restore() {\n      point = startPoint;\n      context.previous = startPrevious;\n      context.currentConstruct = startCurrentConstruct;\n      context.events.length = startEventsIndex;\n      stack = startStack;\n      accountForPotentialSkip();\n    }\n  }\n\n  /**\n   * Move the current point a bit forward in the line when it\u2019s on a column\n   * skip.\n   *\n   * @returns {undefined}\n   *   Nothing.\n   */\n  function accountForPotentialSkip() {\n    if (point.line in columnStart && point.column < 2) {\n      point.column = columnStart[point.line];\n      point.offset += columnStart[point.line] - 1;\n    }\n  }\n}\n\n/**\n * Get the chunks from a slice of chunks in the range of a token.\n *\n * @param {ReadonlyArray<Chunk>} chunks\n *   Chunks.\n * @param {Pick<Token, 'end' | 'start'>} token\n *   Token.\n * @returns {Array<Chunk>}\n *   Chunks.\n */\nfunction sliceChunks(chunks, token) {\n  const startIndex = token.start._index;\n  const startBufferIndex = token.start._bufferIndex;\n  const endIndex = token.end._index;\n  const endBufferIndex = token.end._bufferIndex;\n  /** @type {Array<Chunk>} */\n  let view;\n  if (startIndex === endIndex) {\n    // @ts-expect-error `_bufferIndex` is used on string chunks.\n    view = [chunks[startIndex].slice(startBufferIndex, endBufferIndex)];\n  } else {\n    view = chunks.slice(startIndex, endIndex);\n    if (startBufferIndex > -1) {\n      const head = view[0];\n      if (typeof head === 'string') {\n        view[0] = head.slice(startBufferIndex);\n      } else {\n        view.shift();\n      }\n    }\n    if (endBufferIndex > 0) {\n      // @ts-expect-error `_bufferIndex` is used on string chunks.\n      view.push(chunks[endIndex].slice(0, endBufferIndex));\n    }\n  }\n  return view;\n}\n\n/**\n * Get the string value of a slice of chunks.\n *\n * @param {ReadonlyArray<Chunk>} chunks\n *   Chunks.\n * @param {boolean | undefined} [expandTabs=false]\n *   Whether to expand tabs (default: `false`).\n * @returns {string}\n *   Result.\n */\nfunction serializeChunks(chunks, expandTabs) {\n  let index = -1;\n  /** @type {Array<string>} */\n  const result = [];\n  /** @type {boolean | undefined} */\n  let atTab;\n  while (++index < chunks.length) {\n    const chunk = chunks[index];\n    /** @type {string} */\n    let value;\n    if (typeof chunk === 'string') {\n      value = chunk;\n    } else switch (chunk) {\n      case -5:\n        {\n          value = \"\\r\";\n          break;\n        }\n      case -4:\n        {\n          value = \"\\n\";\n          break;\n        }\n      case -3:\n        {\n          value = \"\\r\" + \"\\n\";\n          break;\n        }\n      case -2:\n        {\n          value = expandTabs ? \" \" : \"\\t\";\n          break;\n        }\n      case -1:\n        {\n          if (!expandTabs && atTab) continue;\n          value = \" \";\n          break;\n        }\n      default:\n        {\n          // Currently only replacement character.\n          value = String.fromCharCode(chunk);\n        }\n    }\n    atTab = chunk === -2;\n    result.push(value);\n  }\n  return result.join('');\n}", "/**\n * @import {\n *   Create,\n *   FullNormalizedExtension,\n *   InitialConstruct,\n *   ParseContext,\n *   ParseOptions\n * } from 'micromark-util-types'\n */\n\nimport { combineExtensions } from 'micromark-util-combine-extensions';\nimport { content } from './initialize/content.js';\nimport { document } from './initialize/document.js';\nimport { flow } from './initialize/flow.js';\nimport { string, text } from './initialize/text.js';\nimport * as defaultConstructs from './constructs.js';\nimport { createTokenizer } from './create-tokenizer.js';\n\n/**\n * @param {ParseOptions | null | undefined} [options]\n *   Configuration (optional).\n * @returns {ParseContext}\n *   Parser.\n */\nexport function parse(options) {\n  const settings = options || {};\n  const constructs = /** @type {FullNormalizedExtension} */\n  combineExtensions([defaultConstructs, ...(settings.extensions || [])]);\n\n  /** @type {ParseContext} */\n  const parser = {\n    constructs,\n    content: create(content),\n    defined: [],\n    document: create(document),\n    flow: create(flow),\n    lazy: {},\n    string: create(string),\n    text: create(text)\n  };\n  return parser;\n\n  /**\n   * @param {InitialConstruct} initial\n   *   Construct to start with.\n   * @returns {Create}\n   *   Create a tokenizer.\n   */\n  function create(initial) {\n    return creator;\n    /** @type {Create} */\n    function creator(from) {\n      return createTokenizer(parser, initial, from);\n    }\n  }\n}", "/**\n * @import {Event} from 'micromark-util-types'\n */\n\nimport { subtokenize } from 'micromark-util-subtokenize';\n\n/**\n * @param {Array<Event>} events\n *   Events.\n * @returns {Array<Event>}\n *   Events.\n */\nexport function postprocess(events) {\n  while (!subtokenize(events)) {\n    // Empty\n  }\n  return events;\n}", "/**\n * @import {Chunk, Code, Encoding, Value} from 'micromark-util-types'\n */\n\n/**\n * @callback Preprocessor\n *   Preprocess a value.\n * @param {Value} value\n *   Value.\n * @param {Encoding | null | undefined} [encoding]\n *   Encoding when `value` is a typed array (optional).\n * @param {boolean | null | undefined} [end=false]\n *   Whether this is the last chunk (default: `false`).\n * @returns {Array<Chunk>}\n *   Chunks.\n */\n\nconst search = /[\\0\\t\\n\\r]/g;\n\n/**\n * @returns {Preprocessor}\n *   Preprocess a value.\n */\nexport function preprocess() {\n  let column = 1;\n  let buffer = '';\n  /** @type {boolean | undefined} */\n  let start = true;\n  /** @type {boolean | undefined} */\n  let atCarriageReturn;\n  return preprocessor;\n\n  /** @type {Preprocessor} */\n  // eslint-disable-next-line complexity\n  function preprocessor(value, encoding, end) {\n    /** @type {Array<Chunk>} */\n    const chunks = [];\n    /** @type {RegExpMatchArray | null} */\n    let match;\n    /** @type {number} */\n    let next;\n    /** @type {number} */\n    let startPosition;\n    /** @type {number} */\n    let endPosition;\n    /** @type {Code} */\n    let code;\n    value = buffer + (typeof value === 'string' ? value.toString() : new TextDecoder(encoding || undefined).decode(value));\n    startPosition = 0;\n    buffer = '';\n    if (start) {\n      // To do: `markdown-rs` actually parses BOMs (byte order mark).\n      if (value.charCodeAt(0) === 65279) {\n        startPosition++;\n      }\n      start = undefined;\n    }\n    while (startPosition < value.length) {\n      search.lastIndex = startPosition;\n      match = search.exec(value);\n      endPosition = match && match.index !== undefined ? match.index : value.length;\n      code = value.charCodeAt(endPosition);\n      if (!match) {\n        buffer = value.slice(startPosition);\n        break;\n      }\n      if (code === 10 && startPosition === endPosition && atCarriageReturn) {\n        chunks.push(-3);\n        atCarriageReturn = undefined;\n      } else {\n        if (atCarriageReturn) {\n          chunks.push(-5);\n          atCarriageReturn = undefined;\n        }\n        if (startPosition < endPosition) {\n          chunks.push(value.slice(startPosition, endPosition));\n          column += endPosition - startPosition;\n        }\n        switch (code) {\n          case 0:\n            {\n              chunks.push(65533);\n              column++;\n              break;\n            }\n          case 9:\n            {\n              next = Math.ceil(column / 4) * 4;\n              chunks.push(-2);\n              while (column++ < next) chunks.push(-1);\n              break;\n            }\n          case 10:\n            {\n              chunks.push(-4);\n              column = 1;\n              break;\n            }\n          default:\n            {\n              atCarriageReturn = true;\n              column = 1;\n            }\n        }\n      }\n      startPosition = endPosition + 1;\n    }\n    if (end) {\n      if (atCarriageReturn) chunks.push(-5);\n      if (buffer) chunks.push(buffer);\n      chunks.push(null);\n    }\n    return chunks;\n  }\n}", "import { decodeNamedCharacterReference } from 'decode-named-character-reference';\nimport { decodeNumericCharacterReference } from 'micromark-util-decode-numeric-character-reference';\nconst characterEscapeOrReference = /\\\\([!-/:-@[-`{-~])|&(#(?:\\d{1,7}|x[\\da-f]{1,6})|[\\da-z]{1,31});/gi;\n\n/**\n * Decode markdown strings (which occur in places such as fenced code info\n * strings, destinations, labels, and titles).\n *\n * The \u201Cstring\u201D content type allows character escapes and -references.\n * This decodes those.\n *\n * @param {string} value\n *   Value to decode.\n * @returns {string}\n *   Decoded value.\n */\nexport function decodeString(value) {\n  return value.replace(characterEscapeOrReference, decode);\n}\n\n/**\n * @param {string} $0\n *   Match.\n * @param {string} $1\n *   Character escape.\n * @param {string} $2\n *   Character reference.\n * @returns {string}\n *   Decoded value\n */\nfunction decode($0, $1, $2) {\n  if ($1) {\n    // Escape.\n    return $1;\n  }\n\n  // Reference.\n  const head = $2.charCodeAt(0);\n  if (head === 35) {\n    const head = $2.charCodeAt(1);\n    const hex = head === 120 || head === 88;\n    return decodeNumericCharacterReference($2.slice(hex ? 2 : 1), hex ? 16 : 10);\n  }\n  return decodeNamedCharacterReference($2) || $0;\n}", "/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('unist').Point} Point\n * @typedef {import('unist').Position} Position\n */\n\n/**\n * @typedef NodeLike\n * @property {string} type\n * @property {PositionLike | null | undefined} [position]\n *\n * @typedef PointLike\n * @property {number | null | undefined} [line]\n * @property {number | null | undefined} [column]\n * @property {number | null | undefined} [offset]\n *\n * @typedef PositionLike\n * @property {PointLike | null | undefined} [start]\n * @property {PointLike | null | undefined} [end]\n */\n\n/**\n * Serialize the positional info of a point, position (start and end points),\n * or node.\n *\n * @param {Node | NodeLike | Point | PointLike | Position | PositionLike | null | undefined} [value]\n *   Node, position, or point.\n * @returns {string}\n *   Pretty printed positional info of a node (`string`).\n *\n *   In the format of a range `ls:cs-le:ce` (when given `node` or `position`)\n *   or a point `l:c` (when given `point`), where `l` stands for line, `c` for\n *   column, `s` for `start`, and `e` for end.\n *   An empty string (`''`) is returned if the given value is neither `node`,\n *   `position`, nor `point`.\n */\nexport function stringifyPosition(value) {\n  // Nothing.\n  if (!value || typeof value !== 'object') {\n    return ''\n  }\n\n  // Node.\n  if ('position' in value || 'type' in value) {\n    return position(value.position)\n  }\n\n  // Position.\n  if ('start' in value || 'end' in value) {\n    return position(value)\n  }\n\n  // Point.\n  if ('line' in value || 'column' in value) {\n    return point(value)\n  }\n\n  // ?\n  return ''\n}\n\n/**\n * @param {Point | PointLike | null | undefined} point\n * @returns {string}\n */\nfunction point(point) {\n  return index(point && point.line) + ':' + index(point && point.column)\n}\n\n/**\n * @param {Position | PositionLike | null | undefined} pos\n * @returns {string}\n */\nfunction position(pos) {\n  return point(pos && pos.start) + '-' + point(pos && pos.end)\n}\n\n/**\n * @param {number | null | undefined} value\n * @returns {number}\n */\nfunction index(value) {\n  return value && typeof value === 'number' ? value : 1\n}\n", "/**\n * @import {\n *   Break,\n *   Blockquote,\n *   Code,\n *   Definition,\n *   Emphasis,\n *   Heading,\n *   Html,\n *   Image,\n *   InlineCode,\n *   Link,\n *   ListItem,\n *   List,\n *   Nodes,\n *   Paragraph,\n *   PhrasingContent,\n *   ReferenceType,\n *   Root,\n *   Strong,\n *   Text,\n *   ThematicBreak\n * } from 'mdast'\n * @import {\n *   Encoding,\n *   Event,\n *   Token,\n *   Value\n * } from 'micromark-util-types'\n * @import {Point} from 'unist'\n * @import {\n *   CompileContext,\n *   CompileData,\n *   Config,\n *   Extension,\n *   Handle,\n *   OnEnterError,\n *   Options\n * } from './types.js'\n */\n\nimport { toString } from 'mdast-util-to-string';\nimport { parse, postprocess, preprocess } from 'micromark';\nimport { decodeNumericCharacterReference } from 'micromark-util-decode-numeric-character-reference';\nimport { decodeString } from 'micromark-util-decode-string';\nimport { normalizeIdentifier } from 'micromark-util-normalize-identifier';\nimport { decodeNamedCharacterReference } from 'decode-named-character-reference';\nimport { stringifyPosition } from 'unist-util-stringify-position';\nconst own = {}.hasOwnProperty;\n\n/**\n * Turn markdown into a syntax tree.\n *\n * @overload\n * @param {Value} value\n * @param {Encoding | null | undefined} [encoding]\n * @param {Options | null | undefined} [options]\n * @returns {Root}\n *\n * @overload\n * @param {Value} value\n * @param {Options | null | undefined} [options]\n * @returns {Root}\n *\n * @param {Value} value\n *   Markdown to parse.\n * @param {Encoding | Options | null | undefined} [encoding]\n *   Character encoding for when `value` is `Buffer`.\n * @param {Options | null | undefined} [options]\n *   Configuration.\n * @returns {Root}\n *   mdast tree.\n */\nexport function fromMarkdown(value, encoding, options) {\n  if (typeof encoding !== 'string') {\n    options = encoding;\n    encoding = undefined;\n  }\n  return compiler(options)(postprocess(parse(options).document().write(preprocess()(value, encoding, true))));\n}\n\n/**\n * Note this compiler only understand complete buffering, not streaming.\n *\n * @param {Options | null | undefined} [options]\n */\nfunction compiler(options) {\n  /** @type {Config} */\n  const config = {\n    transforms: [],\n    canContainEols: ['emphasis', 'fragment', 'heading', 'paragraph', 'strong'],\n    enter: {\n      autolink: opener(link),\n      autolinkProtocol: onenterdata,\n      autolinkEmail: onenterdata,\n      atxHeading: opener(heading),\n      blockQuote: opener(blockQuote),\n      characterEscape: onenterdata,\n      characterReference: onenterdata,\n      codeFenced: opener(codeFlow),\n      codeFencedFenceInfo: buffer,\n      codeFencedFenceMeta: buffer,\n      codeIndented: opener(codeFlow, buffer),\n      codeText: opener(codeText, buffer),\n      codeTextData: onenterdata,\n      data: onenterdata,\n      codeFlowValue: onenterdata,\n      definition: opener(definition),\n      definitionDestinationString: buffer,\n      definitionLabelString: buffer,\n      definitionTitleString: buffer,\n      emphasis: opener(emphasis),\n      hardBreakEscape: opener(hardBreak),\n      hardBreakTrailing: opener(hardBreak),\n      htmlFlow: opener(html, buffer),\n      htmlFlowData: onenterdata,\n      htmlText: opener(html, buffer),\n      htmlTextData: onenterdata,\n      image: opener(image),\n      label: buffer,\n      link: opener(link),\n      listItem: opener(listItem),\n      listItemValue: onenterlistitemvalue,\n      listOrdered: opener(list, onenterlistordered),\n      listUnordered: opener(list),\n      paragraph: opener(paragraph),\n      reference: onenterreference,\n      referenceString: buffer,\n      resourceDestinationString: buffer,\n      resourceTitleString: buffer,\n      setextHeading: opener(heading),\n      strong: opener(strong),\n      thematicBreak: opener(thematicBreak)\n    },\n    exit: {\n      atxHeading: closer(),\n      atxHeadingSequence: onexitatxheadingsequence,\n      autolink: closer(),\n      autolinkEmail: onexitautolinkemail,\n      autolinkProtocol: onexitautolinkprotocol,\n      blockQuote: closer(),\n      characterEscapeValue: onexitdata,\n      characterReferenceMarkerHexadecimal: onexitcharacterreferencemarker,\n      characterReferenceMarkerNumeric: onexitcharacterreferencemarker,\n      characterReferenceValue: onexitcharacterreferencevalue,\n      characterReference: onexitcharacterreference,\n      codeFenced: closer(onexitcodefenced),\n      codeFencedFence: onexitcodefencedfence,\n      codeFencedFenceInfo: onexitcodefencedfenceinfo,\n      codeFencedFenceMeta: onexitcodefencedfencemeta,\n      codeFlowValue: onexitdata,\n      codeIndented: closer(onexitcodeindented),\n      codeText: closer(onexitcodetext),\n      codeTextData: onexitdata,\n      data: onexitdata,\n      definition: closer(),\n      definitionDestinationString: onexitdefinitiondestinationstring,\n      definitionLabelString: onexitdefinitionlabelstring,\n      definitionTitleString: onexitdefinitiontitlestring,\n      emphasis: closer(),\n      hardBreakEscape: closer(onexithardbreak),\n      hardBreakTrailing: closer(onexithardbreak),\n      htmlFlow: closer(onexithtmlflow),\n      htmlFlowData: onexitdata,\n      htmlText: closer(onexithtmltext),\n      htmlTextData: onexitdata,\n      image: closer(onexitimage),\n      label: onexitlabel,\n      labelText: onexitlabeltext,\n      lineEnding: onexitlineending,\n      link: closer(onexitlink),\n      listItem: closer(),\n      listOrdered: closer(),\n      listUnordered: closer(),\n      paragraph: closer(),\n      referenceString: onexitreferencestring,\n      resourceDestinationString: onexitresourcedestinationstring,\n      resourceTitleString: onexitresourcetitlestring,\n      resource: onexitresource,\n      setextHeading: closer(onexitsetextheading),\n      setextHeadingLineSequence: onexitsetextheadinglinesequence,\n      setextHeadingText: onexitsetextheadingtext,\n      strong: closer(),\n      thematicBreak: closer()\n    }\n  };\n  configure(config, (options || {}).mdastExtensions || []);\n\n  /** @type {CompileData} */\n  const data = {};\n  return compile;\n\n  /**\n   * Turn micromark events into an mdast tree.\n   *\n   * @param {Array<Event>} events\n   *   Events.\n   * @returns {Root}\n   *   mdast tree.\n   */\n  function compile(events) {\n    /** @type {Root} */\n    let tree = {\n      type: 'root',\n      children: []\n    };\n    /** @type {Omit<CompileContext, 'sliceSerialize'>} */\n    const context = {\n      stack: [tree],\n      tokenStack: [],\n      config,\n      enter,\n      exit,\n      buffer,\n      resume,\n      data\n    };\n    /** @type {Array<number>} */\n    const listStack = [];\n    let index = -1;\n    while (++index < events.length) {\n      // We preprocess lists to add `listItem` tokens, and to infer whether\n      // items the list itself are spread out.\n      if (events[index][1].type === \"listOrdered\" || events[index][1].type === \"listUnordered\") {\n        if (events[index][0] === 'enter') {\n          listStack.push(index);\n        } else {\n          const tail = listStack.pop();\n          index = prepareList(events, tail, index);\n        }\n      }\n    }\n    index = -1;\n    while (++index < events.length) {\n      const handler = config[events[index][0]];\n      if (own.call(handler, events[index][1].type)) {\n        handler[events[index][1].type].call(Object.assign({\n          sliceSerialize: events[index][2].sliceSerialize\n        }, context), events[index][1]);\n      }\n    }\n\n    // Handle tokens still being open.\n    if (context.tokenStack.length > 0) {\n      const tail = context.tokenStack[context.tokenStack.length - 1];\n      const handler = tail[1] || defaultOnError;\n      handler.call(context, undefined, tail[0]);\n    }\n\n    // Figure out `root` position.\n    tree.position = {\n      start: point(events.length > 0 ? events[0][1].start : {\n        line: 1,\n        column: 1,\n        offset: 0\n      }),\n      end: point(events.length > 0 ? events[events.length - 2][1].end : {\n        line: 1,\n        column: 1,\n        offset: 0\n      })\n    };\n\n    // Call transforms.\n    index = -1;\n    while (++index < config.transforms.length) {\n      tree = config.transforms[index](tree) || tree;\n    }\n    return tree;\n  }\n\n  /**\n   * @param {Array<Event>} events\n   * @param {number} start\n   * @param {number} length\n   * @returns {number}\n   */\n  function prepareList(events, start, length) {\n    let index = start - 1;\n    let containerBalance = -1;\n    let listSpread = false;\n    /** @type {Token | undefined} */\n    let listItem;\n    /** @type {number | undefined} */\n    let lineIndex;\n    /** @type {number | undefined} */\n    let firstBlankLineIndex;\n    /** @type {boolean | undefined} */\n    let atMarker;\n    while (++index <= length) {\n      const event = events[index];\n      switch (event[1].type) {\n        case \"listUnordered\":\n        case \"listOrdered\":\n        case \"blockQuote\":\n          {\n            if (event[0] === 'enter') {\n              containerBalance++;\n            } else {\n              containerBalance--;\n            }\n            atMarker = undefined;\n            break;\n          }\n        case \"lineEndingBlank\":\n          {\n            if (event[0] === 'enter') {\n              if (listItem && !atMarker && !containerBalance && !firstBlankLineIndex) {\n                firstBlankLineIndex = index;\n              }\n              atMarker = undefined;\n            }\n            break;\n          }\n        case \"linePrefix\":\n        case \"listItemValue\":\n        case \"listItemMarker\":\n        case \"listItemPrefix\":\n        case \"listItemPrefixWhitespace\":\n          {\n            // Empty.\n\n            break;\n          }\n        default:\n          {\n            atMarker = undefined;\n          }\n      }\n      if (!containerBalance && event[0] === 'enter' && event[1].type === \"listItemPrefix\" || containerBalance === -1 && event[0] === 'exit' && (event[1].type === \"listUnordered\" || event[1].type === \"listOrdered\")) {\n        if (listItem) {\n          let tailIndex = index;\n          lineIndex = undefined;\n          while (tailIndex--) {\n            const tailEvent = events[tailIndex];\n            if (tailEvent[1].type === \"lineEnding\" || tailEvent[1].type === \"lineEndingBlank\") {\n              if (tailEvent[0] === 'exit') continue;\n              if (lineIndex) {\n                events[lineIndex][1].type = \"lineEndingBlank\";\n                listSpread = true;\n              }\n              tailEvent[1].type = \"lineEnding\";\n              lineIndex = tailIndex;\n            } else if (tailEvent[1].type === \"linePrefix\" || tailEvent[1].type === \"blockQuotePrefix\" || tailEvent[1].type === \"blockQuotePrefixWhitespace\" || tailEvent[1].type === \"blockQuoteMarker\" || tailEvent[1].type === \"listItemIndent\") {\n              // Empty\n            } else {\n              break;\n            }\n          }\n          if (firstBlankLineIndex && (!lineIndex || firstBlankLineIndex < lineIndex)) {\n            listItem._spread = true;\n          }\n\n          // Fix position.\n          listItem.end = Object.assign({}, lineIndex ? events[lineIndex][1].start : event[1].end);\n          events.splice(lineIndex || index, 0, ['exit', listItem, event[2]]);\n          index++;\n          length++;\n        }\n\n        // Create a new list item.\n        if (event[1].type === \"listItemPrefix\") {\n          /** @type {Token} */\n          const item = {\n            type: 'listItem',\n            _spread: false,\n            start: Object.assign({}, event[1].start),\n            // @ts-expect-error: we\u2019ll add `end` in a second.\n            end: undefined\n          };\n          listItem = item;\n          events.splice(index, 0, ['enter', item, event[2]]);\n          index++;\n          length++;\n          firstBlankLineIndex = undefined;\n          atMarker = true;\n        }\n      }\n    }\n    events[start][1]._spread = listSpread;\n    return length;\n  }\n\n  /**\n   * Create an opener handle.\n   *\n   * @param {(token: Token) => Nodes} create\n   *   Create a node.\n   * @param {Handle | undefined} [and]\n   *   Optional function to also run.\n   * @returns {Handle}\n   *   Handle.\n   */\n  function opener(create, and) {\n    return open;\n\n    /**\n     * @this {CompileContext}\n     * @param {Token} token\n     * @returns {undefined}\n     */\n    function open(token) {\n      enter.call(this, create(token), token);\n      if (and) and.call(this, token);\n    }\n  }\n\n  /**\n   * @type {CompileContext['buffer']}\n   */\n  function buffer() {\n    this.stack.push({\n      type: 'fragment',\n      children: []\n    });\n  }\n\n  /**\n   * @type {CompileContext['enter']}\n   */\n  function enter(node, token, errorHandler) {\n    const parent = this.stack[this.stack.length - 1];\n    /** @type {Array<Nodes>} */\n    const siblings = parent.children;\n    siblings.push(node);\n    this.stack.push(node);\n    this.tokenStack.push([token, errorHandler || undefined]);\n    node.position = {\n      start: point(token.start),\n      // @ts-expect-error: `end` will be patched later.\n      end: undefined\n    };\n  }\n\n  /**\n   * Create a closer handle.\n   *\n   * @param {Handle | undefined} [and]\n   *   Optional function to also run.\n   * @returns {Handle}\n   *   Handle.\n   */\n  function closer(and) {\n    return close;\n\n    /**\n     * @this {CompileContext}\n     * @param {Token} token\n     * @returns {undefined}\n     */\n    function close(token) {\n      if (and) and.call(this, token);\n      exit.call(this, token);\n    }\n  }\n\n  /**\n   * @type {CompileContext['exit']}\n   */\n  function exit(token, onExitError) {\n    const node = this.stack.pop();\n    const open = this.tokenStack.pop();\n    if (!open) {\n      throw new Error('Cannot close `' + token.type + '` (' + stringifyPosition({\n        start: token.start,\n        end: token.end\n      }) + '): it\u2019s not open');\n    } else if (open[0].type !== token.type) {\n      if (onExitError) {\n        onExitError.call(this, token, open[0]);\n      } else {\n        const handler = open[1] || defaultOnError;\n        handler.call(this, token, open[0]);\n      }\n    }\n    node.position.end = point(token.end);\n  }\n\n  /**\n   * @type {CompileContext['resume']}\n   */\n  function resume() {\n    return toString(this.stack.pop());\n  }\n\n  //\n  // Handlers.\n  //\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onenterlistordered() {\n    this.data.expectingFirstListItemValue = true;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onenterlistitemvalue(token) {\n    if (this.data.expectingFirstListItemValue) {\n      const ancestor = this.stack[this.stack.length - 2];\n      ancestor.start = Number.parseInt(this.sliceSerialize(token), 10);\n      this.data.expectingFirstListItemValue = undefined;\n    }\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitcodefencedfenceinfo() {\n    const data = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.lang = data;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitcodefencedfencemeta() {\n    const data = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.meta = data;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitcodefencedfence() {\n    // Exit if this is the closing fence.\n    if (this.data.flowCodeInside) return;\n    this.buffer();\n    this.data.flowCodeInside = true;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitcodefenced() {\n    const data = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.value = data.replace(/^(\\r?\\n|\\r)|(\\r?\\n|\\r)$/g, '');\n    this.data.flowCodeInside = undefined;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitcodeindented() {\n    const data = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.value = data.replace(/(\\r?\\n|\\r)$/g, '');\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitdefinitionlabelstring(token) {\n    const label = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.label = label;\n    node.identifier = normalizeIdentifier(this.sliceSerialize(token)).toLowerCase();\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitdefinitiontitlestring() {\n    const data = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.title = data;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitdefinitiondestinationstring() {\n    const data = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.url = data;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitatxheadingsequence(token) {\n    const node = this.stack[this.stack.length - 1];\n    if (!node.depth) {\n      const depth = this.sliceSerialize(token).length;\n      node.depth = depth;\n    }\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitsetextheadingtext() {\n    this.data.setextHeadingSlurpLineEnding = true;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitsetextheadinglinesequence(token) {\n    const node = this.stack[this.stack.length - 1];\n    node.depth = this.sliceSerialize(token).codePointAt(0) === 61 ? 1 : 2;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitsetextheading() {\n    this.data.setextHeadingSlurpLineEnding = undefined;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onenterdata(token) {\n    const node = this.stack[this.stack.length - 1];\n    /** @type {Array<Nodes>} */\n    const siblings = node.children;\n    let tail = siblings[siblings.length - 1];\n    if (!tail || tail.type !== 'text') {\n      // Add a new text node.\n      tail = text();\n      tail.position = {\n        start: point(token.start),\n        // @ts-expect-error: we\u2019ll add `end` later.\n        end: undefined\n      };\n      siblings.push(tail);\n    }\n    this.stack.push(tail);\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitdata(token) {\n    const tail = this.stack.pop();\n    tail.value += this.sliceSerialize(token);\n    tail.position.end = point(token.end);\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitlineending(token) {\n    const context = this.stack[this.stack.length - 1];\n    // If we\u2019re at a hard break, include the line ending in there.\n    if (this.data.atHardBreak) {\n      const tail = context.children[context.children.length - 1];\n      tail.position.end = point(token.end);\n      this.data.atHardBreak = undefined;\n      return;\n    }\n    if (!this.data.setextHeadingSlurpLineEnding && config.canContainEols.includes(context.type)) {\n      onenterdata.call(this, token);\n      onexitdata.call(this, token);\n    }\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexithardbreak() {\n    this.data.atHardBreak = true;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexithtmlflow() {\n    const data = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.value = data;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexithtmltext() {\n    const data = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.value = data;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitcodetext() {\n    const data = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.value = data;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitlink() {\n    const node = this.stack[this.stack.length - 1];\n    // Note: there are also `identifier` and `label` fields on this link node!\n    // These are used / cleaned here.\n\n    // To do: clean.\n    if (this.data.inReference) {\n      /** @type {ReferenceType} */\n      const referenceType = this.data.referenceType || 'shortcut';\n      node.type += 'Reference';\n      // @ts-expect-error: mutate.\n      node.referenceType = referenceType;\n      // @ts-expect-error: mutate.\n      delete node.url;\n      delete node.title;\n    } else {\n      // @ts-expect-error: mutate.\n      delete node.identifier;\n      // @ts-expect-error: mutate.\n      delete node.label;\n    }\n    this.data.referenceType = undefined;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitimage() {\n    const node = this.stack[this.stack.length - 1];\n    // Note: there are also `identifier` and `label` fields on this link node!\n    // These are used / cleaned here.\n\n    // To do: clean.\n    if (this.data.inReference) {\n      /** @type {ReferenceType} */\n      const referenceType = this.data.referenceType || 'shortcut';\n      node.type += 'Reference';\n      // @ts-expect-error: mutate.\n      node.referenceType = referenceType;\n      // @ts-expect-error: mutate.\n      delete node.url;\n      delete node.title;\n    } else {\n      // @ts-expect-error: mutate.\n      delete node.identifier;\n      // @ts-expect-error: mutate.\n      delete node.label;\n    }\n    this.data.referenceType = undefined;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitlabeltext(token) {\n    const string = this.sliceSerialize(token);\n    const ancestor = this.stack[this.stack.length - 2];\n    // @ts-expect-error: stash this on the node, as it might become a reference\n    // later.\n    ancestor.label = decodeString(string);\n    // @ts-expect-error: same as above.\n    ancestor.identifier = normalizeIdentifier(string).toLowerCase();\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitlabel() {\n    const fragment = this.stack[this.stack.length - 1];\n    const value = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    // Assume a reference.\n    this.data.inReference = true;\n    if (node.type === 'link') {\n      /** @type {Array<PhrasingContent>} */\n      const children = fragment.children;\n      node.children = children;\n    } else {\n      node.alt = value;\n    }\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitresourcedestinationstring() {\n    const data = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.url = data;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitresourcetitlestring() {\n    const data = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    node.title = data;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitresource() {\n    this.data.inReference = undefined;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onenterreference() {\n    this.data.referenceType = 'collapsed';\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitreferencestring(token) {\n    const label = this.resume();\n    const node = this.stack[this.stack.length - 1];\n    // @ts-expect-error: stash this on the node, as it might become a reference\n    // later.\n    node.label = label;\n    // @ts-expect-error: same as above.\n    node.identifier = normalizeIdentifier(this.sliceSerialize(token)).toLowerCase();\n    this.data.referenceType = 'full';\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitcharacterreferencemarker(token) {\n    this.data.characterReferenceType = token.type;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitcharacterreferencevalue(token) {\n    const data = this.sliceSerialize(token);\n    const type = this.data.characterReferenceType;\n    /** @type {string} */\n    let value;\n    if (type) {\n      value = decodeNumericCharacterReference(data, type === \"characterReferenceMarkerNumeric\" ? 10 : 16);\n      this.data.characterReferenceType = undefined;\n    } else {\n      const result = decodeNamedCharacterReference(data);\n      value = result;\n    }\n    const tail = this.stack[this.stack.length - 1];\n    tail.value += value;\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitcharacterreference(token) {\n    const tail = this.stack.pop();\n    tail.position.end = point(token.end);\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitautolinkprotocol(token) {\n    onexitdata.call(this, token);\n    const node = this.stack[this.stack.length - 1];\n    node.url = this.sliceSerialize(token);\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitautolinkemail(token) {\n    onexitdata.call(this, token);\n    const node = this.stack[this.stack.length - 1];\n    node.url = 'mailto:' + this.sliceSerialize(token);\n  }\n\n  //\n  // Creaters.\n  //\n\n  /** @returns {Blockquote} */\n  function blockQuote() {\n    return {\n      type: 'blockquote',\n      children: []\n    };\n  }\n\n  /** @returns {Code} */\n  function codeFlow() {\n    return {\n      type: 'code',\n      lang: null,\n      meta: null,\n      value: ''\n    };\n  }\n\n  /** @returns {InlineCode} */\n  function codeText() {\n    return {\n      type: 'inlineCode',\n      value: ''\n    };\n  }\n\n  /** @returns {Definition} */\n  function definition() {\n    return {\n      type: 'definition',\n      identifier: '',\n      label: null,\n      title: null,\n      url: ''\n    };\n  }\n\n  /** @returns {Emphasis} */\n  function emphasis() {\n    return {\n      type: 'emphasis',\n      children: []\n    };\n  }\n\n  /** @returns {Heading} */\n  function heading() {\n    return {\n      type: 'heading',\n      // @ts-expect-error `depth` will be set later.\n      depth: 0,\n      children: []\n    };\n  }\n\n  /** @returns {Break} */\n  function hardBreak() {\n    return {\n      type: 'break'\n    };\n  }\n\n  /** @returns {Html} */\n  function html() {\n    return {\n      type: 'html',\n      value: ''\n    };\n  }\n\n  /** @returns {Image} */\n  function image() {\n    return {\n      type: 'image',\n      title: null,\n      url: '',\n      alt: null\n    };\n  }\n\n  /** @returns {Link} */\n  function link() {\n    return {\n      type: 'link',\n      title: null,\n      url: '',\n      children: []\n    };\n  }\n\n  /**\n   * @param {Token} token\n   * @returns {List}\n   */\n  function list(token) {\n    return {\n      type: 'list',\n      ordered: token.type === 'listOrdered',\n      start: null,\n      spread: token._spread,\n      children: []\n    };\n  }\n\n  /**\n   * @param {Token} token\n   * @returns {ListItem}\n   */\n  function listItem(token) {\n    return {\n      type: 'listItem',\n      spread: token._spread,\n      checked: null,\n      children: []\n    };\n  }\n\n  /** @returns {Paragraph} */\n  function paragraph() {\n    return {\n      type: 'paragraph',\n      children: []\n    };\n  }\n\n  /** @returns {Strong} */\n  function strong() {\n    return {\n      type: 'strong',\n      children: []\n    };\n  }\n\n  /** @returns {Text} */\n  function text() {\n    return {\n      type: 'text',\n      value: ''\n    };\n  }\n\n  /** @returns {ThematicBreak} */\n  function thematicBreak() {\n    return {\n      type: 'thematicBreak'\n    };\n  }\n}\n\n/**\n * Copy a point-like value.\n *\n * @param {Point} d\n *   Point-like value.\n * @returns {Point}\n *   unist point.\n */\nfunction point(d) {\n  return {\n    line: d.line,\n    column: d.column,\n    offset: d.offset\n  };\n}\n\n/**\n * @param {Config} combined\n * @param {Array<Array<Extension> | Extension>} extensions\n * @returns {undefined}\n */\nfunction configure(combined, extensions) {\n  let index = -1;\n  while (++index < extensions.length) {\n    const value = extensions[index];\n    if (Array.isArray(value)) {\n      configure(combined, value);\n    } else {\n      extension(combined, value);\n    }\n  }\n}\n\n/**\n * @param {Config} combined\n * @param {Extension} extension\n * @returns {undefined}\n */\nfunction extension(combined, extension) {\n  /** @type {keyof Extension} */\n  let key;\n  for (key in extension) {\n    if (own.call(extension, key)) {\n      switch (key) {\n        case 'canContainEols':\n          {\n            const right = extension[key];\n            if (right) {\n              combined[key].push(...right);\n            }\n            break;\n          }\n        case 'transforms':\n          {\n            const right = extension[key];\n            if (right) {\n              combined[key].push(...right);\n            }\n            break;\n          }\n        case 'enter':\n        case 'exit':\n          {\n            const right = extension[key];\n            if (right) {\n              Object.assign(combined[key], right);\n            }\n            break;\n          }\n        // No default\n      }\n    }\n  }\n}\n\n/** @type {OnEnterError} */\nfunction defaultOnError(left, right) {\n  if (left) {\n    throw new Error('Cannot close `' + left.type + '` (' + stringifyPosition({\n      start: left.start,\n      end: left.end\n    }) + '): a different token (`' + right.type + '`, ' + stringifyPosition({\n      start: right.start,\n      end: right.end\n    }) + ') is open');\n  } else {\n    throw new Error('Cannot close document, a token (`' + right.type + '`, ' + stringifyPosition({\n      start: right.start,\n      end: right.end\n    }) + ') is still open');\n  }\n}", "/**\n * @typedef {import('mdast').Root} Root\n * @typedef {import('mdast-util-from-markdown').Options} FromMarkdownOptions\n * @typedef {import('unified').Parser<Root>} Parser\n * @typedef {import('unified').Processor<Root>} Processor\n */\n\n/**\n * @typedef {Omit<FromMarkdownOptions, 'extensions' | 'mdastExtensions'>} Options\n */\n\nimport {fromMarkdown} from 'mdast-util-from-markdown'\n\n/**\n * Aadd support for parsing from markdown.\n *\n * @param {Readonly<Options> | null | undefined} [options]\n *   Configuration (optional).\n * @returns {undefined}\n *   Nothing.\n */\nexport default function remarkParse(options) {\n  /** @type {Processor} */\n  // @ts-expect-error: TS in JSDoc generates wrong types if `this` is typed regularly.\n  const self = this\n\n  self.parser = parser\n\n  /**\n   * @type {Parser}\n   */\n  function parser(doc) {\n    return fromMarkdown(doc, {\n      ...self.data('settings'),\n      ...options,\n      // Note: these options are not in the readme.\n      // The goal is for them to be set by plugins on `data` instead of being\n      // passed by users.\n      extensions: self.data('micromarkExtensions') || [],\n      mdastExtensions: self.data('fromMarkdownExtensions') || []\n    })\n  }\n}\n", "/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').Blockquote} Blockquote\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `blockquote` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Blockquote} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function blockquote(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'blockquote',\n    properties: {},\n    children: state.wrap(state.all(node), true)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n", "/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').Text} Text\n * @typedef {import('mdast').Break} Break\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `break` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Break} node\n *   mdast node.\n * @returns {Array<Element | Text>}\n *   hast element content.\n */\nexport function hardBreak(state, node) {\n  /** @type {Element} */\n  const result = {type: 'element', tagName: 'br', properties: {}, children: []}\n  state.patch(node, result)\n  return [state.applyData(node, result), {type: 'text', value: '\\n'}]\n}\n", "/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').Properties} Properties\n * @typedef {import('mdast').Code} Code\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `code` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Code} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function code(state, node) {\n  const value = node.value ? node.value + '\\n' : ''\n  /** @type {Properties} */\n  const properties = {}\n\n  if (node.lang) {\n    properties.className = ['language-' + node.lang]\n  }\n\n  // Create `<code>`.\n  /** @type {Element} */\n  let result = {\n    type: 'element',\n    tagName: 'code',\n    properties,\n    children: [{type: 'text', value}]\n  }\n\n  if (node.meta) {\n    result.data = {meta: node.meta}\n  }\n\n  state.patch(node, result)\n  result = state.applyData(node, result)\n\n  // Create `<pre>`.\n  result = {type: 'element', tagName: 'pre', properties: {}, children: [result]}\n  state.patch(node, result)\n  return result\n}\n", "/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').Delete} Delete\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `delete` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Delete} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function strikethrough(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'del',\n    properties: {},\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n", "/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').Emphasis} Emphasis\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `emphasis` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Emphasis} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function emphasis(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'em',\n    properties: {},\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n", "/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').FootnoteReference} FootnoteReference\n * @typedef {import('../state.js').State} State\n */\n\nimport {normalizeUri} from 'micromark-util-sanitize-uri'\n\n/**\n * Turn an mdast `footnoteReference` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {FootnoteReference} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function footnoteReference(state, node) {\n  const clobberPrefix =\n    typeof state.options.clobberPrefix === 'string'\n      ? state.options.clobberPrefix\n      : 'user-content-'\n  const id = String(node.identifier).toUpperCase()\n  const safeId = normalizeUri(id.toLowerCase())\n  const index = state.footnoteOrder.indexOf(id)\n  /** @type {number} */\n  let counter\n\n  let reuseCounter = state.footnoteCounts.get(id)\n\n  if (reuseCounter === undefined) {\n    reuseCounter = 0\n    state.footnoteOrder.push(id)\n    counter = state.footnoteOrder.length\n  } else {\n    counter = index + 1\n  }\n\n  reuseCounter += 1\n  state.footnoteCounts.set(id, reuseCounter)\n\n  /** @type {Element} */\n  const link = {\n    type: 'element',\n    tagName: 'a',\n    properties: {\n      href: '#' + clobberPrefix + 'fn-' + safeId,\n      id:\n        clobberPrefix +\n        'fnref-' +\n        safeId +\n        (reuseCounter > 1 ? '-' + reuseCounter : ''),\n      dataFootnoteRef: true,\n      ariaDescribedBy: ['footnote-label']\n    },\n    children: [{type: 'text', value: String(counter)}]\n  }\n  state.patch(node, link)\n\n  /** @type {Element} */\n  const sup = {\n    type: 'element',\n    tagName: 'sup',\n    properties: {},\n    children: [link]\n  }\n  state.patch(node, sup)\n  return state.applyData(node, sup)\n}\n", "/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').Heading} Heading\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `heading` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Heading} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function heading(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'h' + node.depth,\n    properties: {},\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n", "/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').Html} Html\n * @typedef {import('../state.js').State} State\n * @typedef {import('../../index.js').Raw} Raw\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `html` node into hast (`raw` node in dangerous mode, otherwise\n * nothing).\n *\n * @param {State} state\n *   Info passed around.\n * @param {Html} node\n *   mdast node.\n * @returns {Element | Raw | undefined}\n *   hast node.\n */\nexport function html(state, node) {\n  if (state.options.allowDangerousHtml) {\n    /** @type {Raw} */\n    const result = {type: 'raw', value: node.value}\n    state.patch(node, result)\n    return state.applyData(node, result)\n  }\n\n  return undefined\n}\n", "/**\n * @typedef {import('hast').ElementContent} ElementContent\n *\n * @typedef {import('mdast').Nodes} Nodes\n * @typedef {import('mdast').Reference} Reference\n *\n * @typedef {import('./state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Return the content of a reference without definition as plain text.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Extract<Nodes, Reference>} node\n *   Reference node (image, link).\n * @returns {Array<ElementContent>}\n *   hast content.\n */\nexport function revert(state, node) {\n  const subtype = node.referenceType\n  let suffix = ']'\n\n  if (subtype === 'collapsed') {\n    suffix += '[]'\n  } else if (subtype === 'full') {\n    suffix += '[' + (node.label || node.identifier) + ']'\n  }\n\n  if (node.type === 'imageReference') {\n    return [{type: 'text', value: '![' + node.alt + suffix}]\n  }\n\n  const contents = state.all(node)\n  const head = contents[0]\n\n  if (head && head.type === 'text') {\n    head.value = '[' + head.value\n  } else {\n    contents.unshift({type: 'text', value: '['})\n  }\n\n  const tail = contents[contents.length - 1]\n\n  if (tail && tail.type === 'text') {\n    tail.value += suffix\n  } else {\n    contents.push({type: 'text', value: suffix})\n  }\n\n  return contents\n}\n", "/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').ElementContent} ElementContent\n * @typedef {import('hast').Properties} Properties\n * @typedef {import('mdast').ImageReference} ImageReference\n * @typedef {import('../state.js').State} State\n */\n\nimport {normalizeUri} from 'micromark-util-sanitize-uri'\nimport {revert} from '../revert.js'\n\n/**\n * Turn an mdast `imageReference` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {ImageReference} node\n *   mdast node.\n * @returns {Array<ElementContent> | ElementContent}\n *   hast node.\n */\nexport function imageReference(state, node) {\n  const id = String(node.identifier).toUpperCase()\n  const definition = state.definitionById.get(id)\n\n  if (!definition) {\n    return revert(state, node)\n  }\n\n  /** @type {Properties} */\n  const properties = {src: normalizeUri(definition.url || ''), alt: node.alt}\n\n  if (definition.title !== null && definition.title !== undefined) {\n    properties.title = definition.title\n  }\n\n  /** @type {Element} */\n  const result = {type: 'element', tagName: 'img', properties, children: []}\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n", "/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').Properties} Properties\n * @typedef {import('mdast').Image} Image\n * @typedef {import('../state.js').State} State\n */\n\nimport {normalizeUri} from 'micromark-util-sanitize-uri'\n\n/**\n * Turn an mdast `image` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Image} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function image(state, node) {\n  /** @type {Properties} */\n  const properties = {src: normalizeUri(node.url)}\n\n  if (node.alt !== null && node.alt !== undefined) {\n    properties.alt = node.alt\n  }\n\n  if (node.title !== null && node.title !== undefined) {\n    properties.title = node.title\n  }\n\n  /** @type {Element} */\n  const result = {type: 'element', tagName: 'img', properties, children: []}\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n", "/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').Text} Text\n * @typedef {import('mdast').InlineCode} InlineCode\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `inlineCode` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {InlineCode} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function inlineCode(state, node) {\n  /** @type {Text} */\n  const text = {type: 'text', value: node.value.replace(/\\r?\\n|\\r/g, ' ')}\n  state.patch(node, text)\n\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'code',\n    properties: {},\n    children: [text]\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n", "/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').ElementContent} ElementContent\n * @typedef {import('hast').Properties} Properties\n * @typedef {import('mdast').LinkReference} LinkReference\n * @typedef {import('../state.js').State} State\n */\n\nimport {normalizeUri} from 'micromark-util-sanitize-uri'\nimport {revert} from '../revert.js'\n\n/**\n * Turn an mdast `linkReference` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {LinkReference} node\n *   mdast node.\n * @returns {Array<ElementContent> | ElementContent}\n *   hast node.\n */\nexport function linkReference(state, node) {\n  const id = String(node.identifier).toUpperCase()\n  const definition = state.definitionById.get(id)\n\n  if (!definition) {\n    return revert(state, node)\n  }\n\n  /** @type {Properties} */\n  const properties = {href: normalizeUri(definition.url || '')}\n\n  if (definition.title !== null && definition.title !== undefined) {\n    properties.title = definition.title\n  }\n\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'a',\n    properties,\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n", "/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').Properties} Properties\n * @typedef {import('mdast').Link} Link\n * @typedef {import('../state.js').State} State\n */\n\nimport {normalizeUri} from 'micromark-util-sanitize-uri'\n\n/**\n * Turn an mdast `link` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Link} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function link(state, node) {\n  /** @type {Properties} */\n  const properties = {href: normalizeUri(node.url)}\n\n  if (node.title !== null && node.title !== undefined) {\n    properties.title = node.title\n  }\n\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'a',\n    properties,\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n", "/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').ElementContent} ElementContent\n * @typedef {import('hast').Properties} Properties\n * @typedef {import('mdast').ListItem} ListItem\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `listItem` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {ListItem} node\n *   mdast node.\n * @param {Parents | undefined} parent\n *   Parent of `node`.\n * @returns {Element}\n *   hast node.\n */\nexport function listItem(state, node, parent) {\n  const results = state.all(node)\n  const loose = parent ? listLoose(parent) : listItemLoose(node)\n  /** @type {Properties} */\n  const properties = {}\n  /** @type {Array<ElementContent>} */\n  const children = []\n\n  if (typeof node.checked === 'boolean') {\n    const head = results[0]\n    /** @type {Element} */\n    let paragraph\n\n    if (head && head.type === 'element' && head.tagName === 'p') {\n      paragraph = head\n    } else {\n      paragraph = {type: 'element', tagName: 'p', properties: {}, children: []}\n      results.unshift(paragraph)\n    }\n\n    if (paragraph.children.length > 0) {\n      paragraph.children.unshift({type: 'text', value: ' '})\n    }\n\n    paragraph.children.unshift({\n      type: 'element',\n      tagName: 'input',\n      properties: {type: 'checkbox', checked: node.checked, disabled: true},\n      children: []\n    })\n\n    // According to github-markdown-css, this class hides bullet.\n    // See: <https://github.com/sindresorhus/github-markdown-css>.\n    properties.className = ['task-list-item']\n  }\n\n  let index = -1\n\n  while (++index < results.length) {\n    const child = results[index]\n\n    // Add eols before nodes, except if this is a loose, first paragraph.\n    if (\n      loose ||\n      index !== 0 ||\n      child.type !== 'element' ||\n      child.tagName !== 'p'\n    ) {\n      children.push({type: 'text', value: '\\n'})\n    }\n\n    if (child.type === 'element' && child.tagName === 'p' && !loose) {\n      children.push(...child.children)\n    } else {\n      children.push(child)\n    }\n  }\n\n  const tail = results[results.length - 1]\n\n  // Add a final eol.\n  if (tail && (loose || tail.type !== 'element' || tail.tagName !== 'p')) {\n    children.push({type: 'text', value: '\\n'})\n  }\n\n  /** @type {Element} */\n  const result = {type: 'element', tagName: 'li', properties, children}\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n\n/**\n * @param {Parents} node\n * @return {Boolean}\n */\nfunction listLoose(node) {\n  let loose = false\n  if (node.type === 'list') {\n    loose = node.spread || false\n    const children = node.children\n    let index = -1\n\n    while (!loose && ++index < children.length) {\n      loose = listItemLoose(children[index])\n    }\n  }\n\n  return loose\n}\n\n/**\n * @param {ListItem} node\n * @return {Boolean}\n */\nfunction listItemLoose(node) {\n  const spread = node.spread\n\n  return spread === null || spread === undefined\n    ? node.children.length > 1\n    : spread\n}\n", "/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').Properties} Properties\n * @typedef {import('mdast').List} List\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `list` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {List} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function list(state, node) {\n  /** @type {Properties} */\n  const properties = {}\n  const results = state.all(node)\n  let index = -1\n\n  if (typeof node.start === 'number' && node.start !== 1) {\n    properties.start = node.start\n  }\n\n  // Like GitHub, add a class for custom styling.\n  while (++index < results.length) {\n    const child = results[index]\n\n    if (\n      child.type === 'element' &&\n      child.tagName === 'li' &&\n      child.properties &&\n      Array.isArray(child.properties.className) &&\n      child.properties.className.includes('task-list-item')\n    ) {\n      properties.className = ['contains-task-list']\n      break\n    }\n  }\n\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: node.ordered ? 'ol' : 'ul',\n    properties,\n    children: state.wrap(results, true)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n", "/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').Paragraph} Paragraph\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `paragraph` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Paragraph} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function paragraph(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'p',\n    properties: {},\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n", "/**\n * @typedef {import('hast').Parents} HastParents\n * @typedef {import('hast').Root} HastRoot\n * @typedef {import('mdast').Root} MdastRoot\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `root` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {MdastRoot} node\n *   mdast node.\n * @returns {HastParents}\n *   hast node.\n */\nexport function root(state, node) {\n  /** @type {HastRoot} */\n  const result = {type: 'root', children: state.wrap(state.all(node))}\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n", "/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').Strong} Strong\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `strong` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Strong} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function strong(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'strong',\n    properties: {},\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n", "/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').Table} Table\n * @typedef {import('../state.js').State} State\n */\n\nimport {pointEnd, pointStart} from 'unist-util-position'\n\n/**\n * Turn an mdast `table` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Table} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function table(state, node) {\n  const rows = state.all(node)\n  const firstRow = rows.shift()\n  /** @type {Array<Element>} */\n  const tableContent = []\n\n  if (firstRow) {\n    /** @type {Element} */\n    const head = {\n      type: 'element',\n      tagName: 'thead',\n      properties: {},\n      children: state.wrap([firstRow], true)\n    }\n    state.patch(node.children[0], head)\n    tableContent.push(head)\n  }\n\n  if (rows.length > 0) {\n    /** @type {Element} */\n    const body = {\n      type: 'element',\n      tagName: 'tbody',\n      properties: {},\n      children: state.wrap(rows, true)\n    }\n\n    const start = pointStart(node.children[1])\n    const end = pointEnd(node.children[node.children.length - 1])\n    if (start && end) body.position = {start, end}\n    tableContent.push(body)\n  }\n\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'table',\n    properties: {},\n    children: state.wrap(tableContent, true)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n", "/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').ElementContent} ElementContent\n * @typedef {import('hast').Properties} Properties\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('mdast').TableRow} TableRow\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `tableRow` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {TableRow} node\n *   mdast node.\n * @param {Parents | undefined} parent\n *   Parent of `node`.\n * @returns {Element}\n *   hast node.\n */\nexport function tableRow(state, node, parent) {\n  const siblings = parent ? parent.children : undefined\n  // Generate a body row when without parent.\n  const rowIndex = siblings ? siblings.indexOf(node) : 1\n  const tagName = rowIndex === 0 ? 'th' : 'td'\n  // To do: option to use `style`?\n  const align = parent && parent.type === 'table' ? parent.align : undefined\n  const length = align ? align.length : node.children.length\n  let cellIndex = -1\n  /** @type {Array<ElementContent>} */\n  const cells = []\n\n  while (++cellIndex < length) {\n    // Note: can also be undefined.\n    const cell = node.children[cellIndex]\n    /** @type {Properties} */\n    const properties = {}\n    const alignValue = align ? align[cellIndex] : undefined\n\n    if (alignValue) {\n      properties.align = alignValue\n    }\n\n    /** @type {Element} */\n    let result = {type: 'element', tagName, properties, children: []}\n\n    if (cell) {\n      result.children = state.all(cell)\n      state.patch(cell, result)\n      result = state.applyData(cell, result)\n    }\n\n    cells.push(result)\n  }\n\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'tr',\n    properties: {},\n    children: state.wrap(cells, true)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n", "/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').TableCell} TableCell\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `tableCell` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {TableCell} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function tableCell(state, node) {\n  // Note: this function is normally not called: see `table-row` for how rows\n  // and their cells are compiled.\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'td', // Assume body cell.\n    properties: {},\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n", "const tab = 9 /* `\\t` */\nconst space = 32 /* ` ` */\n\n/**\n * Remove initial and final spaces and tabs at the line breaks in `value`.\n * Does not trim initial and final spaces and tabs of the value itself.\n *\n * @param {string} value\n *   Value to trim.\n * @returns {string}\n *   Trimmed value.\n */\nexport function trimLines(value) {\n  const source = String(value)\n  const search = /\\r?\\n|\\r/g\n  let match = search.exec(source)\n  let last = 0\n  /** @type {Array<string>} */\n  const lines = []\n\n  while (match) {\n    lines.push(\n      trimLine(source.slice(last, match.index), last > 0, true),\n      match[0]\n    )\n\n    last = match.index + match[0].length\n    match = search.exec(source)\n  }\n\n  lines.push(trimLine(source.slice(last), last > 0, false))\n\n  return lines.join('')\n}\n\n/**\n * @param {string} value\n *   Line to trim.\n * @param {boolean} start\n *   Whether to trim the start of the line.\n * @param {boolean} end\n *   Whether to trim the end of the line.\n * @returns {string}\n *   Trimmed line.\n */\nfunction trimLine(value, start, end) {\n  let startIndex = 0\n  let endIndex = value.length\n\n  if (start) {\n    let code = value.codePointAt(startIndex)\n\n    while (code === tab || code === space) {\n      startIndex++\n      code = value.codePointAt(startIndex)\n    }\n  }\n\n  if (end) {\n    let code = value.codePointAt(endIndex - 1)\n\n    while (code === tab || code === space) {\n      endIndex--\n      code = value.codePointAt(endIndex - 1)\n    }\n  }\n\n  return endIndex > startIndex ? value.slice(startIndex, endIndex) : ''\n}\n", "/**\n * @typedef {import('hast').Element} HastElement\n * @typedef {import('hast').Text} HastText\n * @typedef {import('mdast').Text} MdastText\n * @typedef {import('../state.js').State} State\n */\n\nimport {trimLines} from 'trim-lines'\n\n/**\n * Turn an mdast `text` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {MdastText} node\n *   mdast node.\n * @returns {HastElement | HastText}\n *   hast node.\n */\nexport function text(state, node) {\n  /** @type {HastText} */\n  const result = {type: 'text', value: trimLines(String(node.value))}\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n", "/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').ThematicBreak} ThematicBreak\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `thematicBreak` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {ThematicBreak} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function thematicBreak(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'hr',\n    properties: {},\n    children: []\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n", "import {blockquote} from './blockquote.js'\nimport {hardBreak} from './break.js'\nimport {code} from './code.js'\nimport {strikethrough} from './delete.js'\nimport {emphasis} from './emphasis.js'\nimport {footnoteReference} from './footnote-reference.js'\nimport {heading} from './heading.js'\nimport {html} from './html.js'\nimport {imageReference} from './image-reference.js'\nimport {image} from './image.js'\nimport {inlineCode} from './inline-code.js'\nimport {linkReference} from './link-reference.js'\nimport {link} from './link.js'\nimport {listItem} from './list-item.js'\nimport {list} from './list.js'\nimport {paragraph} from './paragraph.js'\nimport {root} from './root.js'\nimport {strong} from './strong.js'\nimport {table} from './table.js'\nimport {tableRow} from './table-row.js'\nimport {tableCell} from './table-cell.js'\nimport {text} from './text.js'\nimport {thematicBreak} from './thematic-break.js'\n\n/**\n * Default handlers for nodes.\n *\n * @satisfies {import('../state.js').Handlers}\n */\nexport const handlers = {\n  blockquote,\n  break: hardBreak,\n  code,\n  delete: strikethrough,\n  emphasis,\n  footnoteReference,\n  heading,\n  html,\n  imageReference,\n  image,\n  inlineCode,\n  linkReference,\n  link,\n  listItem,\n  list,\n  paragraph,\n  // @ts-expect-error: root is different, but hard to type.\n  root,\n  strong,\n  table,\n  tableCell,\n  tableRow,\n  text,\n  thematicBreak,\n  toml: ignore,\n  yaml: ignore,\n  definition: ignore,\n  footnoteDefinition: ignore\n}\n\n// Return nothing for nodes that are ignored.\nfunction ignore() {\n  return undefined\n}\n", "export const VOID       = -1;\nexport const PRIMITIVE  = 0;\nexport const ARRAY      = 1;\nexport const OBJECT     = 2;\nexport const DATE       = 3;\nexport const REGEXP     = 4;\nexport const MAP        = 5;\nexport const SET        = 6;\nexport const ERROR      = 7;\nexport const BIGINT     = 8;\n// export const SYMBOL = 9;\n", "import {\n  VOID, PRIMITIVE,\n  ARRAY, OBJECT,\n  DATE, REGEXP, MAP, SET,\n  ERROR, BIGINT\n} from './types.js';\n\nconst env = typeof self === 'object' ? self : globalThis;\n\nconst deserializer = ($, _) => {\n  const as = (out, index) => {\n    $.set(index, out);\n    return out;\n  };\n\n  const unpair = index => {\n    if ($.has(index))\n      return $.get(index);\n\n    const [type, value] = _[index];\n    switch (type) {\n      case PRIMITIVE:\n      case VOID:\n        return as(value, index);\n      case ARRAY: {\n        const arr = as([], index);\n        for (const index of value)\n          arr.push(unpair(index));\n        return arr;\n      }\n      case OBJECT: {\n        const object = as({}, index);\n        for (const [key, index] of value)\n          object[unpair(key)] = unpair(index);\n        return object;\n      }\n      case DATE:\n        return as(new Date(value), index);\n      case REGEXP: {\n        const {source, flags} = value;\n        return as(new RegExp(source, flags), index);\n      }\n      case MAP: {\n        const map = as(new Map, index);\n        for (const [key, index] of value)\n          map.set(unpair(key), unpair(index));\n        return map;\n      }\n      case SET: {\n        const set = as(new Set, index);\n        for (const index of value)\n          set.add(unpair(index));\n        return set;\n      }\n      case ERROR: {\n        const {name, message} = value;\n        return as(new env[name](message), index);\n      }\n      case BIGINT:\n        return as(BigInt(value), index);\n      case 'BigInt':\n        return as(Object(BigInt(value)), index);\n      case 'ArrayBuffer':\n        return as(new Uint8Array(value).buffer, value);\n      case 'DataView': {\n        const { buffer } = new Uint8Array(value);\n        return as(new DataView(buffer), value);\n      }\n    }\n    return as(new env[type](value), index);\n  };\n\n  return unpair;\n};\n\n/**\n * @typedef {Array<string,any>} Record a type representation\n */\n\n/**\n * Returns a deserialized value from a serialized array of Records.\n * @param {Record[]} serialized a previously serialized value.\n * @returns {any}\n */\nexport const deserialize = serialized => deserializer(new Map, serialized)(0);\n", "import {\n  VOID, PRIMITIVE,\n  ARRAY, OBJECT,\n  DATE, REGEXP, MAP, SET,\n  ERROR, BIGINT\n} from './types.js';\n\nconst EMPTY = '';\n\nconst {toString} = {};\nconst {keys} = Object;\n\nconst typeOf = value => {\n  const type = typeof value;\n  if (type !== 'object' || !value)\n    return [PRIMITIVE, type];\n\n  const asString = toString.call(value).slice(8, -1);\n  switch (asString) {\n    case 'Array':\n      return [ARRAY, EMPTY];\n    case 'Object':\n      return [OBJECT, EMPTY];\n    case 'Date':\n      return [DATE, EMPTY];\n    case 'RegExp':\n      return [REGEXP, EMPTY];\n    case 'Map':\n      return [MAP, EMPTY];\n    case 'Set':\n      return [SET, EMPTY];\n    case 'DataView':\n      return [ARRAY, asString];\n  }\n\n  if (asString.includes('Array'))\n    return [ARRAY, asString];\n\n  if (asString.includes('Error'))\n    return [ERROR, asString];\n\n  return [OBJECT, asString];\n};\n\nconst shouldSkip = ([TYPE, type]) => (\n  TYPE === PRIMITIVE &&\n  (type === 'function' || type === 'symbol')\n);\n\nconst serializer = (strict, json, $, _) => {\n\n  const as = (out, value) => {\n    const index = _.push(out) - 1;\n    $.set(value, index);\n    return index;\n  };\n\n  const pair = value => {\n    if ($.has(value))\n      return $.get(value);\n\n    let [TYPE, type] = typeOf(value);\n    switch (TYPE) {\n      case PRIMITIVE: {\n        let entry = value;\n        switch (type) {\n          case 'bigint':\n            TYPE = BIGINT;\n            entry = value.toString();\n            break;\n          case 'function':\n          case 'symbol':\n            if (strict)\n              throw new TypeError('unable to serialize ' + type);\n            entry = null;\n            break;\n          case 'undefined':\n            return as([VOID], value);\n        }\n        return as([TYPE, entry], value);\n      }\n      case ARRAY: {\n        if (type) {\n          let spread = value;\n          if (type === 'DataView') {\n            spread = new Uint8Array(value.buffer);\n          }\n          else if (type === 'ArrayBuffer') {\n            spread = new Uint8Array(value);\n          }\n          return as([type, [...spread]], value);\n        }\n\n        const arr = [];\n        const index = as([TYPE, arr], value);\n        for (const entry of value)\n          arr.push(pair(entry));\n        return index;\n      }\n      case OBJECT: {\n        if (type) {\n          switch (type) {\n            case 'BigInt':\n              return as([type, value.toString()], value);\n            case 'Boolean':\n            case 'Number':\n            case 'String':\n              return as([type, value.valueOf()], value);\n          }\n        }\n\n        if (json && ('toJSON' in value))\n          return pair(value.toJSON());\n\n        const entries = [];\n        const index = as([TYPE, entries], value);\n        for (const key of keys(value)) {\n          if (strict || !shouldSkip(typeOf(value[key])))\n            entries.push([pair(key), pair(value[key])]);\n        }\n        return index;\n      }\n      case DATE:\n        return as([TYPE, value.toISOString()], value);\n      case REGEXP: {\n        const {source, flags} = value;\n        return as([TYPE, {source, flags}], value);\n      }\n      case MAP: {\n        const entries = [];\n        const index = as([TYPE, entries], value);\n        for (const [key, entry] of value) {\n          if (strict || !(shouldSkip(typeOf(key)) || shouldSkip(typeOf(entry))))\n            entries.push([pair(key), pair(entry)]);\n        }\n        return index;\n      }\n      case SET: {\n        const entries = [];\n        const index = as([TYPE, entries], value);\n        for (const entry of value) {\n          if (strict || !shouldSkip(typeOf(entry)))\n            entries.push(pair(entry));\n        }\n        return index;\n      }\n    }\n\n    const {message} = value;\n    return as([TYPE, {name: type, message}], value);\n  };\n\n  return pair;\n};\n\n/**\n * @typedef {Array<string,any>} Record a type representation\n */\n\n/**\n * Returns an array of serialized Records.\n * @param {any} value a serializable value.\n * @param {{json?: boolean, lossy?: boolean}?} options an object with a `lossy` or `json` property that,\n *  if `true`, will not throw errors on incompatible types, and behave more\n *  like JSON stringify would behave. Symbol and Function will be discarded.\n * @returns {Record[]}\n */\n export const serialize = (value, {json, lossy} = {}) => {\n  const _ = [];\n  return serializer(!(json || lossy), !!json, new Map, _)(value), _;\n};\n", "import {deserialize} from './deserialize.js';\nimport {serialize} from './serialize.js';\n\n/**\n * @typedef {Array<string,any>} Record a type representation\n */\n\n/**\n * Returns an array of serialized Records.\n * @param {any} any a serializable value.\n * @param {{transfer?: any[], json?: boolean, lossy?: boolean}?} options an object with\n * a transfer option (ignored when polyfilled) and/or non standard fields that\n * fallback to the polyfill if present.\n * @returns {Record[]}\n */\nexport default typeof structuredClone === \"function\" ?\n  /* c8 ignore start */\n  (any, options) => (\n    options && ('json' in options || 'lossy' in options) ?\n      deserialize(serialize(any, options)) : structuredClone(any)\n  ) :\n  (any, options) => deserialize(serialize(any, options));\n  /* c8 ignore stop */\n\nexport {deserialize, serialize};\n", "/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').ElementContent} ElementContent\n *\n * @typedef {import('./state.js').State} State\n */\n\n/**\n * @callback FootnoteBackContentTemplate\n *   Generate content for the backreference dynamically.\n *\n *   For the following markdown:\n *\n *   ```markdown\n *   Alpha[^micromark], bravo[^micromark], and charlie[^remark].\n *\n *   [^remark]: things about remark\n *   [^micromark]: things about micromark\n *   ```\n *\n *   This function will be called with:\n *\n *   *  `0` and `0` for the backreference from `things about micromark` to\n *      `alpha`, as it is the first used definition, and the first call to it\n *   *  `0` and `1` for the backreference from `things about micromark` to\n *      `bravo`, as it is the first used definition, and the second call to it\n *   *  `1` and `0` for the backreference from `things about remark` to\n *      `charlie`, as it is the second used definition\n * @param {number} referenceIndex\n *   Index of the definition in the order that they are first referenced,\n *   0-indexed.\n * @param {number} rereferenceIndex\n *   Index of calls to the same definition, 0-indexed.\n * @returns {Array<ElementContent> | ElementContent | string}\n *   Content for the backreference when linking back from definitions to their\n *   reference.\n *\n * @callback FootnoteBackLabelTemplate\n *   Generate a back label dynamically.\n *\n *   For the following markdown:\n *\n *   ```markdown\n *   Alpha[^micromark], bravo[^micromark], and charlie[^remark].\n *\n *   [^remark]: things about remark\n *   [^micromark]: things about micromark\n *   ```\n *\n *   This function will be called with:\n *\n *   *  `0` and `0` for the backreference from `things about micromark` to\n *      `alpha`, as it is the first used definition, and the first call to it\n *   *  `0` and `1` for the backreference from `things about micromark` to\n *      `bravo`, as it is the first used definition, and the second call to it\n *   *  `1` and `0` for the backreference from `things about remark` to\n *      `charlie`, as it is the second used definition\n * @param {number} referenceIndex\n *   Index of the definition in the order that they are first referenced,\n *   0-indexed.\n * @param {number} rereferenceIndex\n *   Index of calls to the same definition, 0-indexed.\n * @returns {string}\n *   Back label to use when linking back from definitions to their reference.\n */\n\nimport structuredClone from '@ungap/structured-clone'\nimport {normalizeUri} from 'micromark-util-sanitize-uri'\n\n/**\n * Generate the default content that GitHub uses on backreferences.\n *\n * @param {number} _\n *   Index of the definition in the order that they are first referenced,\n *   0-indexed.\n * @param {number} rereferenceIndex\n *   Index of calls to the same definition, 0-indexed.\n * @returns {Array<ElementContent>}\n *   Content.\n */\nexport function defaultFootnoteBackContent(_, rereferenceIndex) {\n  /** @type {Array<ElementContent>} */\n  const result = [{type: 'text', value: '\u21A9'}]\n\n  if (rereferenceIndex > 1) {\n    result.push({\n      type: 'element',\n      tagName: 'sup',\n      properties: {},\n      children: [{type: 'text', value: String(rereferenceIndex)}]\n    })\n  }\n\n  return result\n}\n\n/**\n * Generate the default label that GitHub uses on backreferences.\n *\n * @param {number} referenceIndex\n *   Index of the definition in the order that they are first referenced,\n *   0-indexed.\n * @param {number} rereferenceIndex\n *   Index of calls to the same definition, 0-indexed.\n * @returns {string}\n *   Label.\n */\nexport function defaultFootnoteBackLabel(referenceIndex, rereferenceIndex) {\n  return (\n    'Back to reference ' +\n    (referenceIndex + 1) +\n    (rereferenceIndex > 1 ? '-' + rereferenceIndex : '')\n  )\n}\n\n/**\n * Generate a hast footer for called footnote definitions.\n *\n * @param {State} state\n *   Info passed around.\n * @returns {Element | undefined}\n *   `section` element or `undefined`.\n */\n// eslint-disable-next-line complexity\nexport function footer(state) {\n  const clobberPrefix =\n    typeof state.options.clobberPrefix === 'string'\n      ? state.options.clobberPrefix\n      : 'user-content-'\n  const footnoteBackContent =\n    state.options.footnoteBackContent || defaultFootnoteBackContent\n  const footnoteBackLabel =\n    state.options.footnoteBackLabel || defaultFootnoteBackLabel\n  const footnoteLabel = state.options.footnoteLabel || 'Footnotes'\n  const footnoteLabelTagName = state.options.footnoteLabelTagName || 'h2'\n  const footnoteLabelProperties = state.options.footnoteLabelProperties || {\n    className: ['sr-only']\n  }\n  /** @type {Array<ElementContent>} */\n  const listItems = []\n  let referenceIndex = -1\n\n  while (++referenceIndex < state.footnoteOrder.length) {\n    const definition = state.footnoteById.get(\n      state.footnoteOrder[referenceIndex]\n    )\n\n    if (!definition) {\n      continue\n    }\n\n    const content = state.all(definition)\n    const id = String(definition.identifier).toUpperCase()\n    const safeId = normalizeUri(id.toLowerCase())\n    let rereferenceIndex = 0\n    /** @type {Array<ElementContent>} */\n    const backReferences = []\n    const counts = state.footnoteCounts.get(id)\n\n    // eslint-disable-next-line no-unmodified-loop-condition\n    while (counts !== undefined && ++rereferenceIndex <= counts) {\n      if (backReferences.length > 0) {\n        backReferences.push({type: 'text', value: ' '})\n      }\n\n      let children =\n        typeof footnoteBackContent === 'string'\n          ? footnoteBackContent\n          : footnoteBackContent(referenceIndex, rereferenceIndex)\n\n      if (typeof children === 'string') {\n        children = {type: 'text', value: children}\n      }\n\n      backReferences.push({\n        type: 'element',\n        tagName: 'a',\n        properties: {\n          href:\n            '#' +\n            clobberPrefix +\n            'fnref-' +\n            safeId +\n            (rereferenceIndex > 1 ? '-' + rereferenceIndex : ''),\n          dataFootnoteBackref: '',\n          ariaLabel:\n            typeof footnoteBackLabel === 'string'\n              ? footnoteBackLabel\n              : footnoteBackLabel(referenceIndex, rereferenceIndex),\n          className: ['data-footnote-backref']\n        },\n        children: Array.isArray(children) ? children : [children]\n      })\n    }\n\n    const tail = content[content.length - 1]\n\n    if (tail && tail.type === 'element' && tail.tagName === 'p') {\n      const tailTail = tail.children[tail.children.length - 1]\n      if (tailTail && tailTail.type === 'text') {\n        tailTail.value += ' '\n      } else {\n        tail.children.push({type: 'text', value: ' '})\n      }\n\n      tail.children.push(...backReferences)\n    } else {\n      content.push(...backReferences)\n    }\n\n    /** @type {Element} */\n    const listItem = {\n      type: 'element',\n      tagName: 'li',\n      properties: {id: clobberPrefix + 'fn-' + safeId},\n      children: state.wrap(content, true)\n    }\n\n    state.patch(definition, listItem)\n\n    listItems.push(listItem)\n  }\n\n  if (listItems.length === 0) {\n    return\n  }\n\n  return {\n    type: 'element',\n    tagName: 'section',\n    properties: {dataFootnotes: true, className: ['footnotes']},\n    children: [\n      {\n        type: 'element',\n        tagName: footnoteLabelTagName,\n        properties: {\n          ...structuredClone(footnoteLabelProperties),\n          id: 'footnote-label'\n        },\n        children: [{type: 'text', value: footnoteLabel}]\n      },\n      {type: 'text', value: '\\n'},\n      {\n        type: 'element',\n        tagName: 'ol',\n        properties: {},\n        children: state.wrap(listItems, true)\n      },\n      {type: 'text', value: '\\n'}\n    ]\n  }\n}\n", "/**\n * @typedef {import('hast').Element} HastElement\n * @typedef {import('hast').ElementContent} HastElementContent\n * @typedef {import('hast').Nodes} HastNodes\n * @typedef {import('hast').Properties} HastProperties\n * @typedef {import('hast').RootContent} HastRootContent\n * @typedef {import('hast').Text} HastText\n *\n * @typedef {import('mdast').Definition} MdastDefinition\n * @typedef {import('mdast').FootnoteDefinition} MdastFootnoteDefinition\n * @typedef {import('mdast').Nodes} MdastNodes\n * @typedef {import('mdast').Parents} MdastParents\n *\n * @typedef {import('vfile').VFile} VFile\n *\n * @typedef {import('./footer.js').FootnoteBackContentTemplate} FootnoteBackContentTemplate\n * @typedef {import('./footer.js').FootnoteBackLabelTemplate} FootnoteBackLabelTemplate\n */\n\n/**\n * @callback Handler\n *   Handle a node.\n * @param {State} state\n *   Info passed around.\n * @param {any} node\n *   mdast node to handle.\n * @param {MdastParents | undefined} parent\n *   Parent of `node`.\n * @returns {Array<HastElementContent> | HastElementContent | undefined}\n *   hast node.\n *\n * @typedef {Partial<Record<MdastNodes['type'], Handler>>} Handlers\n *   Handle nodes.\n *\n * @typedef Options\n *   Configuration (optional).\n * @property {boolean | null | undefined} [allowDangerousHtml=false]\n *   Whether to persist raw HTML in markdown in the hast tree (default:\n *   `false`).\n * @property {string | null | undefined} [clobberPrefix='user-content-']\n *   Prefix to use before the `id` property on footnotes to prevent them from\n *   *clobbering* (default: `'user-content-'`).\n *\n *   Pass `''` for trusted markdown and when you are careful with\n *   polyfilling.\n *   You could pass a different prefix.\n *\n *   DOM clobbering is this:\n *\n *   ```html\n *   <p id=\"x\"></p>\n *   <script>alert(x) // `x` now refers to the `p#x` DOM element</script>\n *   ```\n *\n *   The above example shows that elements are made available by browsers, by\n *   their ID, on the `window` object.\n *   This is a security risk because you might be expecting some other variable\n *   at that place.\n *   It can also break polyfills.\n *   Using a prefix solves these problems.\n * @property {VFile | null | undefined} [file]\n *   Corresponding virtual file representing the input document (optional).\n * @property {FootnoteBackContentTemplate | string | null | undefined} [footnoteBackContent]\n *   Content of the backreference back to references (default: `defaultFootnoteBackContent`).\n *\n *   The default value is:\n *\n *   ```js\n *   function defaultFootnoteBackContent(_, rereferenceIndex) {\n *     const result = [{type: 'text', value: '\u21A9'}]\n *\n *     if (rereferenceIndex > 1) {\n *       result.push({\n *         type: 'element',\n *         tagName: 'sup',\n *         properties: {},\n *         children: [{type: 'text', value: String(rereferenceIndex)}]\n *       })\n *     }\n *\n *     return result\n *   }\n *   ```\n *\n *   This content is used in the `a` element of each backreference (the `\u21A9`\n *   links).\n * @property {FootnoteBackLabelTemplate | string | null | undefined} [footnoteBackLabel]\n *   Label to describe the backreference back to references (default:\n *   `defaultFootnoteBackLabel`).\n *\n *   The default value is:\n *\n *   ```js\n *   function defaultFootnoteBackLabel(referenceIndex, rereferenceIndex) {\n *    return (\n *      'Back to reference ' +\n *      (referenceIndex + 1) +\n *      (rereferenceIndex > 1 ? '-' + rereferenceIndex : '')\n *    )\n *   }\n *   ```\n *\n *   Change it when the markdown is not in English.\n *\n *   This label is used in the `ariaLabel` property on each backreference\n *   (the `\u21A9` links).\n *   It affects users of assistive technology.\n * @property {string | null | undefined} [footnoteLabel='Footnotes']\n *   Textual label to use for the footnotes section (default: `'Footnotes'`).\n *\n *   Change it when the markdown is not in English.\n *\n *   This label is typically hidden visually (assuming a `sr-only` CSS class\n *   is defined that does that) and so affects screen readers only.\n *   If you do have such a class, but want to show this section to everyone,\n *   pass different properties with the `footnoteLabelProperties` option.\n * @property {HastProperties | null | undefined} [footnoteLabelProperties={className: ['sr-only']}]\n *   Properties to use on the footnote label (default: `{className:\n *   ['sr-only']}`).\n *\n *   Change it to show the label and add other properties.\n *\n *   This label is typically hidden visually (assuming an `sr-only` CSS class\n *   is defined that does that) and so affects screen readers only.\n *   If you do have such a class, but want to show this section to everyone,\n *   pass an empty string.\n *   You can also add different properties.\n *\n *   > **Note**: `id: 'footnote-label'` is always added, because footnote\n *   > calls use it with `aria-describedby` to provide an accessible label.\n * @property {string | null | undefined} [footnoteLabelTagName='h2']\n *   HTML tag name to use for the footnote label element (default: `'h2'`).\n *\n *   Change it to match your document structure.\n *\n *   This label is typically hidden visually (assuming a `sr-only` CSS class\n *   is defined that does that) and so affects screen readers only.\n *   If you do have such a class, but want to show this section to everyone,\n *   pass different properties with the `footnoteLabelProperties` option.\n * @property {Handlers | null | undefined} [handlers]\n *   Extra handlers for nodes (optional).\n * @property {Array<MdastNodes['type']> | null | undefined} [passThrough]\n *   List of custom mdast node types to pass through (keep) in hast (note that\n *   the node itself is passed, but eventual children are transformed)\n *   (optional).\n * @property {Handler | null | undefined} [unknownHandler]\n *   Handler for all unknown nodes (optional).\n *\n * @typedef State\n *   Info passed around.\n * @property {(node: MdastNodes) => Array<HastElementContent>} all\n *   Transform the children of an mdast parent to hast.\n * @property {<Type extends HastNodes>(from: MdastNodes, to: Type) => HastElement | Type} applyData\n *   Honor the `data` of `from`, and generate an element instead of `node`.\n * @property {Map<string, MdastDefinition>} definitionById\n *   Definitions by their identifier.\n * @property {Map<string, MdastFootnoteDefinition>} footnoteById\n *   Footnote definitions by their identifier.\n * @property {Map<string, number>} footnoteCounts\n *   Counts for how often the same footnote was called.\n * @property {Array<string>} footnoteOrder\n *   Identifiers of order when footnote calls first appear in tree order.\n * @property {Handlers} handlers\n *   Applied handlers.\n * @property {(node: MdastNodes, parent: MdastParents | undefined) => Array<HastElementContent> | HastElementContent | undefined} one\n *   Transform an mdast node to hast.\n * @property {Options} options\n *   Configuration.\n * @property {(from: MdastNodes, node: HastNodes) => undefined} patch\n *   Copy a node\u2019s positional info.\n * @property {<Type extends HastRootContent>(nodes: Array<Type>, loose?: boolean | undefined) => Array<HastText | Type>} wrap\n *   Wrap `nodes` with line endings between each node, adds initial/final line endings when `loose`.\n */\n\nimport structuredClone from '@ungap/structured-clone'\nimport {visit} from 'unist-util-visit'\nimport {position} from 'unist-util-position'\nimport {handlers as defaultHandlers} from './handlers/index.js'\n\nconst own = {}.hasOwnProperty\n\n/** @type {Options} */\nconst emptyOptions = {}\n\n/**\n * Create `state` from an mdast tree.\n *\n * @param {MdastNodes} tree\n *   mdast node to transform.\n * @param {Options | null | undefined} [options]\n *   Configuration (optional).\n * @returns {State}\n *   `state` function.\n */\nexport function createState(tree, options) {\n  const settings = options || emptyOptions\n  /** @type {Map<string, MdastDefinition>} */\n  const definitionById = new Map()\n  /** @type {Map<string, MdastFootnoteDefinition>} */\n  const footnoteById = new Map()\n  /** @type {Map<string, number>} */\n  const footnoteCounts = new Map()\n  /** @type {Handlers} */\n  // @ts-expect-error: the root handler returns a root.\n  // Hard to type.\n  const handlers = {...defaultHandlers, ...settings.handlers}\n\n  /** @type {State} */\n  const state = {\n    all,\n    applyData,\n    definitionById,\n    footnoteById,\n    footnoteCounts,\n    footnoteOrder: [],\n    handlers,\n    one,\n    options: settings,\n    patch,\n    wrap\n  }\n\n  visit(tree, function (node) {\n    if (node.type === 'definition' || node.type === 'footnoteDefinition') {\n      const map = node.type === 'definition' ? definitionById : footnoteById\n      const id = String(node.identifier).toUpperCase()\n\n      // Mimick CM behavior of link definitions.\n      // See: <https://github.com/syntax-tree/mdast-util-definitions/blob/9032189/lib/index.js#L20-L21>.\n      if (!map.has(id)) {\n        // @ts-expect-error: node type matches map.\n        map.set(id, node)\n      }\n    }\n  })\n\n  return state\n\n  /**\n   * Transform an mdast node into a hast node.\n   *\n   * @param {MdastNodes} node\n   *   mdast node.\n   * @param {MdastParents | undefined} [parent]\n   *   Parent of `node`.\n   * @returns {Array<HastElementContent> | HastElementContent | undefined}\n   *   Resulting hast node.\n   */\n  function one(node, parent) {\n    const type = node.type\n    const handle = state.handlers[type]\n\n    if (own.call(state.handlers, type) && handle) {\n      return handle(state, node, parent)\n    }\n\n    if (state.options.passThrough && state.options.passThrough.includes(type)) {\n      if ('children' in node) {\n        const {children, ...shallow} = node\n        const result = structuredClone(shallow)\n        // @ts-expect-error: TS doesn\u2019t understand\u2026\n        result.children = state.all(node)\n        // @ts-expect-error: TS doesn\u2019t understand\u2026\n        return result\n      }\n\n      // @ts-expect-error: it\u2019s custom.\n      return structuredClone(node)\n    }\n\n    const unknown = state.options.unknownHandler || defaultUnknownHandler\n\n    return unknown(state, node, parent)\n  }\n\n  /**\n   * Transform the children of an mdast node into hast nodes.\n   *\n   * @param {MdastNodes} parent\n   *   mdast node to compile\n   * @returns {Array<HastElementContent>}\n   *   Resulting hast nodes.\n   */\n  function all(parent) {\n    /** @type {Array<HastElementContent>} */\n    const values = []\n\n    if ('children' in parent) {\n      const nodes = parent.children\n      let index = -1\n      while (++index < nodes.length) {\n        const result = state.one(nodes[index], parent)\n\n        // To do: see if we van clean this? Can we merge texts?\n        if (result) {\n          if (index && nodes[index - 1].type === 'break') {\n            if (!Array.isArray(result) && result.type === 'text') {\n              result.value = trimMarkdownSpaceStart(result.value)\n            }\n\n            if (!Array.isArray(result) && result.type === 'element') {\n              const head = result.children[0]\n\n              if (head && head.type === 'text') {\n                head.value = trimMarkdownSpaceStart(head.value)\n              }\n            }\n          }\n\n          if (Array.isArray(result)) {\n            values.push(...result)\n          } else {\n            values.push(result)\n          }\n        }\n      }\n    }\n\n    return values\n  }\n}\n\n/**\n * Copy a node\u2019s positional info.\n *\n * @param {MdastNodes} from\n *   mdast node to copy from.\n * @param {HastNodes} to\n *   hast node to copy into.\n * @returns {undefined}\n *   Nothing.\n */\nfunction patch(from, to) {\n  if (from.position) to.position = position(from)\n}\n\n/**\n * Honor the `data` of `from` and maybe generate an element instead of `to`.\n *\n * @template {HastNodes} Type\n *   Node type.\n * @param {MdastNodes} from\n *   mdast node to use data from.\n * @param {Type} to\n *   hast node to change.\n * @returns {HastElement | Type}\n *   Nothing.\n */\nfunction applyData(from, to) {\n  /** @type {HastElement | Type} */\n  let result = to\n\n  // Handle `data.hName`, `data.hProperties, `data.hChildren`.\n  if (from && from.data) {\n    const hName = from.data.hName\n    const hChildren = from.data.hChildren\n    const hProperties = from.data.hProperties\n\n    if (typeof hName === 'string') {\n      // Transforming the node resulted in an element with a different name\n      // than wanted:\n      if (result.type === 'element') {\n        result.tagName = hName\n      }\n      // Transforming the node resulted in a non-element, which happens for\n      // raw, text, and root nodes (unless custom handlers are passed).\n      // The intent of `hName` is to create an element, but likely also to keep\n      // the content around (otherwise: pass `hChildren`).\n      else {\n        /** @type {Array<HastElementContent>} */\n        // @ts-expect-error: assume no doctypes in `root`.\n        const children = 'children' in result ? result.children : [result]\n        result = {type: 'element', tagName: hName, properties: {}, children}\n      }\n    }\n\n    if (result.type === 'element' && hProperties) {\n      Object.assign(result.properties, structuredClone(hProperties))\n    }\n\n    if (\n      'children' in result &&\n      result.children &&\n      hChildren !== null &&\n      hChildren !== undefined\n    ) {\n      result.children = hChildren\n    }\n  }\n\n  return result\n}\n\n/**\n * Transform an unknown node.\n *\n * @param {State} state\n *   Info passed around.\n * @param {MdastNodes} node\n *   Unknown mdast node.\n * @returns {HastElement | HastText}\n *   Resulting hast node.\n */\nfunction defaultUnknownHandler(state, node) {\n  const data = node.data || {}\n  /** @type {HastElement | HastText} */\n  const result =\n    'value' in node &&\n    !(own.call(data, 'hProperties') || own.call(data, 'hChildren'))\n      ? {type: 'text', value: node.value}\n      : {\n          type: 'element',\n          tagName: 'div',\n          properties: {},\n          children: state.all(node)\n        }\n\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n\n/**\n * Wrap `nodes` with line endings between each node.\n *\n * @template {HastRootContent} Type\n *   Node type.\n * @param {Array<Type>} nodes\n *   List of nodes to wrap.\n * @param {boolean | undefined} [loose=false]\n *   Whether to add line endings at start and end (default: `false`).\n * @returns {Array<HastText | Type>}\n *   Wrapped nodes.\n */\nexport function wrap(nodes, loose) {\n  /** @type {Array<HastText | Type>} */\n  const result = []\n  let index = -1\n\n  if (loose) {\n    result.push({type: 'text', value: '\\n'})\n  }\n\n  while (++index < nodes.length) {\n    if (index) result.push({type: 'text', value: '\\n'})\n    result.push(nodes[index])\n  }\n\n  if (loose && nodes.length > 0) {\n    result.push({type: 'text', value: '\\n'})\n  }\n\n  return result\n}\n\n/**\n * Trim spaces and tabs at the start of `value`.\n *\n * @param {string} value\n *   Value to trim.\n * @returns {string}\n *   Result.\n */\nfunction trimMarkdownSpaceStart(value) {\n  let index = 0\n  let code = value.charCodeAt(index)\n\n  while (code === 9 || code === 32) {\n    index++\n    code = value.charCodeAt(index)\n  }\n\n  return value.slice(index)\n}\n", "/**\n * @typedef {import('hast').Nodes} HastNodes\n * @typedef {import('mdast').Nodes} MdastNodes\n * @typedef {import('./state.js').Options} Options\n */\n\nimport {ok as assert} from 'devlop'\nimport {footer} from './footer.js'\nimport {createState} from './state.js'\n\n/**\n * Transform mdast to hast.\n *\n * ##### Notes\n *\n * ###### HTML\n *\n * Raw HTML is available in mdast as `html` nodes and can be embedded in hast\n * as semistandard `raw` nodes.\n * Most utilities ignore `raw` nodes but two notable ones don\u2019t:\n *\n * *   `hast-util-to-html` also has an option `allowDangerousHtml` which will\n *     output the raw HTML.\n *     This is typically discouraged as noted by the option name but is useful\n *     if you completely trust authors\n * *   `hast-util-raw` can handle the raw embedded HTML strings by parsing them\n *     into standard hast nodes (`element`, `text`, etc).\n *     This is a heavy task as it needs a full HTML parser, but it is the only\n *     way to support untrusted content\n *\n * ###### Footnotes\n *\n * Many options supported here relate to footnotes.\n * Footnotes are not specified by CommonMark, which we follow by default.\n * They are supported by GitHub, so footnotes can be enabled in markdown with\n * `mdast-util-gfm`.\n *\n * The options `footnoteBackLabel` and `footnoteLabel` define natural language\n * that explains footnotes, which is hidden for sighted users but shown to\n * assistive technology.\n * When your page is not in English, you must define translated values.\n *\n * Back references use ARIA attributes, but the section label itself uses a\n * heading that is hidden with an `sr-only` class.\n * To show it to sighted users, define different attributes in\n * `footnoteLabelProperties`.\n *\n * ###### Clobbering\n *\n * Footnotes introduces a problem, as it links footnote calls to footnote\n * definitions on the page through `id` attributes generated from user content,\n * which results in DOM clobbering.\n *\n * DOM clobbering is this:\n *\n * ```html\n * <p id=x></p>\n * <script>alert(x) // `x` now refers to the DOM `p#x` element</script>\n * ```\n *\n * Elements by their ID are made available by browsers on the `window` object,\n * which is a security risk.\n * Using a prefix solves this problem.\n *\n * More information on how to handle clobbering and the prefix is explained in\n * Example: headings (DOM clobbering) in `rehype-sanitize`.\n *\n * ###### Unknown nodes\n *\n * Unknown nodes are nodes with a type that isn\u2019t in `handlers` or `passThrough`.\n * The default behavior for unknown nodes is:\n *\n * *   when the node has a `value` (and doesn\u2019t have `data.hName`,\n *     `data.hProperties`, or `data.hChildren`, see later), create a hast `text`\n *     node\n * *   otherwise, create a `<div>` element (which could be changed with\n *     `data.hName`), with its children mapped from mdast to hast as well\n *\n * This behavior can be changed by passing an `unknownHandler`.\n *\n * @param {MdastNodes} tree\n *   mdast tree.\n * @param {Options | null | undefined} [options]\n *   Configuration (optional).\n * @returns {HastNodes}\n *   hast tree.\n */\nexport function toHast(tree, options) {\n  const state = createState(tree, options)\n  const node = state.one(tree, undefined)\n  const foot = footer(state)\n  /** @type {HastNodes} */\n  const result = Array.isArray(node)\n    ? {type: 'root', children: node}\n    : node || {type: 'root', children: []}\n\n  if (foot) {\n    // If there\u2019s a footer, there were definitions, meaning block\n    // content.\n    // So `result` is a parent node.\n    assert('children' in result)\n    result.children.push({type: 'text', value: '\\n'}, foot)\n  }\n\n  return result\n}\n", "// Include `data` fields in mdast and `raw` nodes in hast.\n/// <reference types=\"mdast-util-to-hast\" />\n\n/**\n * @import {Root as HastRoot} from 'hast'\n * @import {Root as MdastRoot} from 'mdast'\n * @import {Options as ToHastOptions} from 'mdast-util-to-hast'\n * @import {Processor} from 'unified'\n * @import {VFile} from 'vfile'\n */\n\n/**\n * @typedef {Omit<ToHastOptions, 'file'>} Options\n *\n * @callback TransformBridge\n *   Bridge-mode.\n *\n *   Runs the destination with the new hast tree.\n *   Discards result.\n * @param {MdastRoot} tree\n *   Tree.\n * @param {VFile} file\n *   File.\n * @returns {Promise<undefined>}\n *   Nothing.\n *\n * @callback TransformMutate\n *  Mutate-mode.\n *\n *  Further transformers run on the hast tree.\n * @param {MdastRoot} tree\n *   Tree.\n * @param {VFile} file\n *   File.\n * @returns {HastRoot}\n *   Tree (hast).\n */\n\nimport {toHast} from 'mdast-util-to-hast'\n\n/**\n * Turn markdown into HTML.\n *\n * ##### Notes\n *\n * ###### Signature\n *\n * *   if a processor is given, runs the (rehype) plugins used on it with a\n *     hast tree, then discards the result (*bridge mode*)\n * *   otherwise, returns a hast tree, the plugins used after `remarkRehype`\n *     are rehype plugins (*mutate mode*)\n *\n * > \uD83D\uDC49 **Note**: It\u2019s highly unlikely that you want to pass a `processor`.\n *\n * ###### HTML\n *\n * Raw HTML is available in mdast as `html` nodes and can be embedded in hast\n * as semistandard `raw` nodes.\n * Most plugins ignore `raw` nodes but two notable ones don\u2019t:\n *\n * *   `rehype-stringify` also has an option `allowDangerousHtml` which will\n *     output the raw HTML.\n *     This is typically discouraged as noted by the option name but is useful if\n *     you completely trust authors\n * *   `rehype-raw` can handle the raw embedded HTML strings by parsing them\n *     into standard hast nodes (`element`, `text`, etc).\n *     This is a heavy task as it needs a full HTML parser, but it is the only way\n *     to support untrusted content\n *\n * ###### Footnotes\n *\n * Many options supported here relate to footnotes.\n * Footnotes are not specified by CommonMark, which we follow by default.\n * They are supported by GitHub, so footnotes can be enabled in markdown with\n * `remark-gfm`.\n *\n * The options `footnoteBackLabel` and `footnoteLabel` define natural language\n * that explains footnotes, which is hidden for sighted users but shown to\n * assistive technology.\n * When your page is not in English, you must define translated values.\n *\n * Back references use ARIA attributes, but the section label itself uses a\n * heading that is hidden with an `sr-only` class.\n * To show it to sighted users, define different attributes in\n * `footnoteLabelProperties`.\n *\n * ###### Clobbering\n *\n * Footnotes introduces a problem, as it links footnote calls to footnote\n * definitions on the page through `id` attributes generated from user content,\n * which results in DOM clobbering.\n *\n * DOM clobbering is this:\n *\n * ```html\n * <p id=x></p>\n * <script>alert(x) // `x` now refers to the DOM `p#x` element</script>\n * ```\n *\n * Elements by their ID are made available by browsers on the `window` object,\n * which is a security risk.\n * Using a prefix solves this problem.\n *\n * More information on how to handle clobbering and the prefix is explained in\n * *Example: headings (DOM clobbering)* in `rehype-sanitize`.\n *\n * ###### Unknown nodes\n *\n * Unknown nodes are nodes with a type that isn\u2019t in `handlers` or `passThrough`.\n * The default behavior for unknown nodes is:\n *\n * *   when the node has a `value` (and doesn\u2019t have `data.hName`,\n *     `data.hProperties`, or `data.hChildren`, see later), create a hast `text`\n *     node\n * *   otherwise, create a `<div>` element (which could be changed with\n *     `data.hName`), with its children mapped from mdast to hast as well\n *\n * This behavior can be changed by passing an `unknownHandler`.\n *\n * @overload\n * @param {Processor} processor\n * @param {Readonly<Options> | null | undefined} [options]\n * @returns {TransformBridge}\n *\n * @overload\n * @param {Readonly<Options> | null | undefined} [options]\n * @returns {TransformMutate}\n *\n * @param {Readonly<Options> | Processor | null | undefined} [destination]\n *   Processor or configuration (optional).\n * @param {Readonly<Options> | null | undefined} [options]\n *   When a processor was given, configuration (optional).\n * @returns {TransformBridge | TransformMutate}\n *   Transform.\n */\nexport default function remarkRehype(destination, options) {\n  if (destination && 'run' in destination) {\n    /**\n     * @type {TransformBridge}\n     */\n    return async function (tree, file) {\n      // Cast because root in -> root out.\n      const hastTree = /** @type {HastRoot} */ (\n        toHast(tree, {file, ...options})\n      )\n      await destination.run(hastTree, file)\n    }\n  }\n\n  /**\n   * @type {TransformMutate}\n   */\n  return function (tree, file) {\n    // Cast because root in -> root out.\n    // To do: in the future, disallow ` || options` fallback.\n    // With `unified-engine`, `destination` can be `undefined` but\n    // `options` will be the file set.\n    // We should not pass that as `options`.\n    return /** @type {HastRoot} */ (\n      toHast(tree, {file, ...(destination || options)})\n    )\n  }\n}\n", "/**\n * Throw a given error.\n *\n * @param {Error|null|undefined} [error]\n *   Maybe error.\n * @returns {asserts error is null|undefined}\n */\nexport function bail(error) {\n  if (error) {\n    throw error\n  }\n}\n", "/**\n * @typedef {import('trough').Pipeline} Pipeline\n *\n * @typedef {import('unist').Node} Node\n *\n * @typedef {import('vfile').Compatible} Compatible\n * @typedef {import('vfile').Value} Value\n *\n * @typedef {import('../index.js').CompileResultMap} CompileResultMap\n * @typedef {import('../index.js').Data} Data\n * @typedef {import('../index.js').Settings} Settings\n */\n\n/**\n * @typedef {CompileResultMap[keyof CompileResultMap]} CompileResults\n *   Acceptable results from compilers.\n *\n *   To register custom results, add them to\n *   {@linkcode CompileResultMap}.\n */\n\n/**\n * @template {Node} [Tree=Node]\n *   The node that the compiler receives (default: `Node`).\n * @template {CompileResults} [Result=CompileResults]\n *   The thing that the compiler yields (default: `CompileResults`).\n * @callback Compiler\n *   A **compiler** handles the compiling of a syntax tree to something else\n *   (in most cases, text) (TypeScript type).\n *\n *   It is used in the stringify phase and called with a {@linkcode Node}\n *   and {@linkcode VFile} representation of the document to compile.\n *   It should return the textual representation of the given tree (typically\n *   `string`).\n *\n *   > **Note**: unified typically compiles by serializing: most compilers\n *   > return `string` (or `Uint8Array`).\n *   > Some compilers, such as the one configured with\n *   > [`rehype-react`][rehype-react], return other values (in this case, a\n *   > React tree).\n *   > If you\u2019re using a compiler that doesn\u2019t serialize, expect different\n *   > result values.\n *   >\n *   > To register custom results in TypeScript, add them to\n *   > {@linkcode CompileResultMap}.\n *\n *   [rehype-react]: https://github.com/rehypejs/rehype-react\n * @param {Tree} tree\n *   Tree to compile.\n * @param {VFile} file\n *   File associated with `tree`.\n * @returns {Result}\n *   New content: compiled text (`string` or `Uint8Array`, for `file.value`) or\n *   something else (for `file.result`).\n */\n\n/**\n * @template {Node} [Tree=Node]\n *   The node that the parser yields (default: `Node`)\n * @callback Parser\n *   A **parser** handles the parsing of text to a syntax tree.\n *\n *   It is used in the parse phase and is called with a `string` and\n *   {@linkcode VFile} of the document to parse.\n *   It must return the syntax tree representation of the given file\n *   ({@linkcode Node}).\n * @param {string} document\n *   Document to parse.\n * @param {VFile} file\n *   File associated with `document`.\n * @returns {Tree}\n *   Node representing the given file.\n */\n\n/**\n * @typedef {(\n *   Plugin<Array<any>, any, any> |\n *   PluginTuple<Array<any>, any, any> |\n *   Preset\n * )} Pluggable\n *   Union of the different ways to add plugins and settings.\n */\n\n/**\n * @typedef {Array<Pluggable>} PluggableList\n *   List of plugins and presets.\n */\n\n// Note: we can\u2019t use `callback` yet as it messes up `this`:\n//  <https://github.com/microsoft/TypeScript/issues/55197>.\n/**\n * @template {Array<unknown>} [PluginParameters=[]]\n *   Arguments passed to the plugin (default: `[]`, the empty tuple).\n * @template {Node | string | undefined} [Input=Node]\n *   Value that is expected as input (default: `Node`).\n *\n *   *   If the plugin returns a {@linkcode Transformer}, this\n *       should be the node it expects.\n *   *   If the plugin sets a {@linkcode Parser}, this should be\n *       `string`.\n *   *   If the plugin sets a {@linkcode Compiler}, this should be the\n *       node it expects.\n * @template [Output=Input]\n *   Value that is yielded as output (default: `Input`).\n *\n *   *   If the plugin returns a {@linkcode Transformer}, this\n *       should be the node that that yields.\n *   *   If the plugin sets a {@linkcode Parser}, this should be the\n *       node that it yields.\n *   *   If the plugin sets a {@linkcode Compiler}, this should be\n *       result it yields.\n * @typedef {(\n *   (this: Processor, ...parameters: PluginParameters) =>\n *     Input extends string ? // Parser.\n *        Output extends Node | undefined ? undefined | void : never :\n *     Output extends CompileResults ? // Compiler.\n *        Input extends Node | undefined ? undefined | void : never :\n *     Transformer<\n *       Input extends Node ? Input : Node,\n *       Output extends Node ? Output : Node\n *     > | undefined | void\n * )} Plugin\n *   Single plugin.\n *\n *   Plugins configure the processors they are applied on in the following\n *   ways:\n *\n *   *   they change the processor, such as the parser, the compiler, or by\n *       configuring data\n *   *   they specify how to handle trees and files\n *\n *   In practice, they are functions that can receive options and configure the\n *   processor (`this`).\n *\n *   > **Note**: plugins are called when the processor is *frozen*, not when\n *   > they are applied.\n */\n\n/**\n * Tuple of a plugin and its configuration.\n *\n * The first item is a plugin, the rest are its parameters.\n *\n * @template {Array<unknown>} [TupleParameters=[]]\n *   Arguments passed to the plugin (default: `[]`, the empty tuple).\n * @template {Node | string | undefined} [Input=undefined]\n *   Value that is expected as input (optional).\n *\n *   *   If the plugin returns a {@linkcode Transformer}, this\n *       should be the node it expects.\n *   *   If the plugin sets a {@linkcode Parser}, this should be\n *       `string`.\n *   *   If the plugin sets a {@linkcode Compiler}, this should be the\n *       node it expects.\n * @template [Output=undefined] (optional).\n *   Value that is yielded as output.\n *\n *   *   If the plugin returns a {@linkcode Transformer}, this\n *       should be the node that that yields.\n *   *   If the plugin sets a {@linkcode Parser}, this should be the\n *       node that it yields.\n *   *   If the plugin sets a {@linkcode Compiler}, this should be\n *       result it yields.\n * @typedef {(\n *   [\n *     plugin: Plugin<TupleParameters, Input, Output>,\n *     ...parameters: TupleParameters\n *   ]\n * )} PluginTuple\n */\n\n/**\n * @typedef Preset\n *   Sharable configuration.\n *\n *   They can contain plugins and settings.\n * @property {PluggableList | undefined} [plugins]\n *   List of plugins and presets (optional).\n * @property {Settings | undefined} [settings]\n *   Shared settings for parsers and compilers (optional).\n */\n\n/**\n * @template {VFile} [File=VFile]\n *   The file that the callback receives (default: `VFile`).\n * @callback ProcessCallback\n *   Callback called when the process is done.\n *\n *   Called with either an error or a result.\n * @param {Error | undefined} [error]\n *   Fatal error (optional).\n * @param {File | undefined} [file]\n *   Processed file (optional).\n * @returns {undefined}\n *   Nothing.\n */\n\n/**\n * @template {Node} [Tree=Node]\n *   The tree that the callback receives (default: `Node`).\n * @callback RunCallback\n *   Callback called when transformers are done.\n *\n *   Called with either an error or results.\n * @param {Error | undefined} [error]\n *   Fatal error (optional).\n * @param {Tree | undefined} [tree]\n *   Transformed tree (optional).\n * @param {VFile | undefined} [file]\n *   File (optional).\n * @returns {undefined}\n *   Nothing.\n */\n\n/**\n * @template {Node} [Output=Node]\n *   Node type that the transformer yields (default: `Node`).\n * @callback TransformCallback\n *   Callback passed to transforms.\n *\n *   If the signature of a `transformer` accepts a third argument, the\n *   transformer may perform asynchronous operations, and must call it.\n * @param {Error | undefined} [error]\n *   Fatal error to stop the process (optional).\n * @param {Output | undefined} [tree]\n *   New, changed, tree (optional).\n * @param {VFile | undefined} [file]\n *   New, changed, file (optional).\n * @returns {undefined}\n *   Nothing.\n */\n\n/**\n * @template {Node} [Input=Node]\n *   Node type that the transformer expects (default: `Node`).\n * @template {Node} [Output=Input]\n *   Node type that the transformer yields (default: `Input`).\n * @callback Transformer\n *   Transformers handle syntax trees and files.\n *\n *   They are functions that are called each time a syntax tree and file are\n *   passed through the run phase.\n *   When an error occurs in them (either because it\u2019s thrown, returned,\n *   rejected, or passed to `next`), the process stops.\n *\n *   The run phase is handled by [`trough`][trough], see its documentation for\n *   the exact semantics of these functions.\n *\n *   > **Note**: you should likely ignore `next`: don\u2019t accept it.\n *   > it supports callback-style async work.\n *   > But promises are likely easier to reason about.\n *\n *   [trough]: https://github.com/wooorm/trough#function-fninput-next\n * @param {Input} tree\n *   Tree to handle.\n * @param {VFile} file\n *   File to handle.\n * @param {TransformCallback<Output>} next\n *   Callback.\n * @returns {(\n *   Promise<Output | undefined | void> |\n *   Promise<never> | // For some reason this is needed separately.\n *   Output |\n *   Error |\n *   undefined |\n *   void\n * )}\n *   If you accept `next`, nothing.\n *   Otherwise:\n *\n *   *   `Error` \u2014 fatal error to stop the process\n *   *   `Promise<undefined>` or `undefined` \u2014 the next transformer keeps using\n *       same tree\n *   *   `Promise<Node>` or `Node` \u2014 new, changed, tree\n */\n\n/**\n * @template {Node | undefined} ParseTree\n *   Output of `parse`.\n * @template {Node | undefined} HeadTree\n *   Input for `run`.\n * @template {Node | undefined} TailTree\n *   Output for `run`.\n * @template {Node | undefined} CompileTree\n *   Input of `stringify`.\n * @template {CompileResults | undefined} CompileResult\n *   Output of `stringify`.\n * @template {Node | string | undefined} Input\n *   Input of plugin.\n * @template Output\n *   Output of plugin (optional).\n * @typedef {(\n *   Input extends string\n *     ? Output extends Node | undefined\n *       ? // Parser.\n *         Processor<\n *           Output extends undefined ? ParseTree : Output,\n *           HeadTree,\n *           TailTree,\n *           CompileTree,\n *           CompileResult\n *         >\n *       : // Unknown.\n *         Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>\n *     : Output extends CompileResults\n *     ? Input extends Node | undefined\n *       ? // Compiler.\n *         Processor<\n *           ParseTree,\n *           HeadTree,\n *           TailTree,\n *           Input extends undefined ? CompileTree : Input,\n *           Output extends undefined ? CompileResult : Output\n *         >\n *       : // Unknown.\n *         Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>\n *     : Input extends Node | undefined\n *     ? Output extends Node | undefined\n *       ? // Transform.\n *         Processor<\n *           ParseTree,\n *           HeadTree extends undefined ? Input : HeadTree,\n *           Output extends undefined ? TailTree : Output,\n *           CompileTree,\n *           CompileResult\n *         >\n *       : // Unknown.\n *         Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>\n *     : // Unknown.\n *       Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>\n * )} UsePlugin\n *   Create a processor based on the input/output of a {@link Plugin plugin}.\n */\n\n/**\n * @template {CompileResults | undefined} Result\n *   Node type that the transformer yields.\n * @typedef {(\n *   Result extends Value | undefined ?\n *     VFile :\n *     VFile & {result: Result}\n *   )} VFileWithOutput\n *   Type to generate a {@linkcode VFile} corresponding to a compiler result.\n *\n *   If a result that is not acceptable on a `VFile` is used, that will\n *   be stored on the `result` field of {@linkcode VFile}.\n */\n\nimport {bail} from 'bail'\nimport extend from 'extend'\nimport {ok as assert} from 'devlop'\nimport isPlainObj from 'is-plain-obj'\nimport {trough} from 'trough'\nimport {VFile} from 'vfile'\nimport {CallableInstance} from './callable-instance.js'\n\n// To do: next major: drop `Compiler`, `Parser`: prefer lowercase.\n\n// To do: we could start yielding `never` in TS when a parser is missing and\n// `parse` is called.\n// Currently, we allow directly setting `processor.parser`, which is untyped.\n\nconst own = {}.hasOwnProperty\n\n/**\n * @template {Node | undefined} [ParseTree=undefined]\n *   Output of `parse` (optional).\n * @template {Node | undefined} [HeadTree=undefined]\n *   Input for `run` (optional).\n * @template {Node | undefined} [TailTree=undefined]\n *   Output for `run` (optional).\n * @template {Node | undefined} [CompileTree=undefined]\n *   Input of `stringify` (optional).\n * @template {CompileResults | undefined} [CompileResult=undefined]\n *   Output of `stringify` (optional).\n * @extends {CallableInstance<[], Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>>}\n */\nexport class Processor extends CallableInstance {\n  /**\n   * Create a processor.\n   */\n  constructor() {\n    // If `Processor()` is called (w/o new), `copy` is called instead.\n    super('copy')\n\n    /**\n     * Compiler to use (deprecated).\n     *\n     * @deprecated\n     *   Use `compiler` instead.\n     * @type {(\n     *   Compiler<\n     *     CompileTree extends undefined ? Node : CompileTree,\n     *     CompileResult extends undefined ? CompileResults : CompileResult\n     *   > |\n     *   undefined\n     * )}\n     */\n    this.Compiler = undefined\n\n    /**\n     * Parser to use (deprecated).\n     *\n     * @deprecated\n     *   Use `parser` instead.\n     * @type {(\n     *   Parser<ParseTree extends undefined ? Node : ParseTree> |\n     *   undefined\n     * )}\n     */\n    this.Parser = undefined\n\n    // Note: the following fields are considered private.\n    // However, they are needed for tests, and TSC generates an untyped\n    // `private freezeIndex` field for, which trips `type-coverage` up.\n    // Instead, we use `@deprecated` to visualize that they shouldn\u2019t be used.\n    /**\n     * Internal list of configured plugins.\n     *\n     * @deprecated\n     *   This is a private internal property and should not be used.\n     * @type {Array<PluginTuple<Array<unknown>>>}\n     */\n    this.attachers = []\n\n    /**\n     * Compiler to use.\n     *\n     * @type {(\n     *   Compiler<\n     *     CompileTree extends undefined ? Node : CompileTree,\n     *     CompileResult extends undefined ? CompileResults : CompileResult\n     *   > |\n     *   undefined\n     * )}\n     */\n    this.compiler = undefined\n\n    /**\n     * Internal state to track where we are while freezing.\n     *\n     * @deprecated\n     *   This is a private internal property and should not be used.\n     * @type {number}\n     */\n    this.freezeIndex = -1\n\n    /**\n     * Internal state to track whether we\u2019re frozen.\n     *\n     * @deprecated\n     *   This is a private internal property and should not be used.\n     * @type {boolean | undefined}\n     */\n    this.frozen = undefined\n\n    /**\n     * Internal state.\n     *\n     * @deprecated\n     *   This is a private internal property and should not be used.\n     * @type {Data}\n     */\n    this.namespace = {}\n\n    /**\n     * Parser to use.\n     *\n     * @type {(\n     *   Parser<ParseTree extends undefined ? Node : ParseTree> |\n     *   undefined\n     * )}\n     */\n    this.parser = undefined\n\n    /**\n     * Internal list of configured transformers.\n     *\n     * @deprecated\n     *   This is a private internal property and should not be used.\n     * @type {Pipeline}\n     */\n    this.transformers = trough()\n  }\n\n  /**\n   * Copy a processor.\n   *\n   * @deprecated\n   *   This is a private internal method and should not be used.\n   * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n   *   New *unfrozen* processor ({@linkcode Processor}) that is\n   *   configured to work the same as its ancestor.\n   *   When the descendant processor is configured in the future it does not\n   *   affect the ancestral processor.\n   */\n  copy() {\n    // Cast as the type parameters will be the same after attaching.\n    const destination =\n      /** @type {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>} */ (\n        new Processor()\n      )\n    let index = -1\n\n    while (++index < this.attachers.length) {\n      const attacher = this.attachers[index]\n      destination.use(...attacher)\n    }\n\n    destination.data(extend(true, {}, this.namespace))\n\n    return destination\n  }\n\n  /**\n   * Configure the processor with info available to all plugins.\n   * Information is stored in an object.\n   *\n   * Typically, options can be given to a specific plugin, but sometimes it\n   * makes sense to have information shared with several plugins.\n   * For example, a list of HTML elements that are self-closing, which is\n   * needed during all phases.\n   *\n   * > **Note**: setting information cannot occur on *frozen* processors.\n   * > Call the processor first to create a new unfrozen processor.\n   *\n   * > **Note**: to register custom data in TypeScript, augment the\n   * > {@linkcode Data} interface.\n   *\n   * @example\n   *   This example show how to get and set info:\n   *\n   *   ```js\n   *   import {unified} from 'unified'\n   *\n   *   const processor = unified().data('alpha', 'bravo')\n   *\n   *   processor.data('alpha') // => 'bravo'\n   *\n   *   processor.data() // => {alpha: 'bravo'}\n   *\n   *   processor.data({charlie: 'delta'})\n   *\n   *   processor.data() // => {charlie: 'delta'}\n   *   ```\n   *\n   * @template {keyof Data} Key\n   *\n   * @overload\n   * @returns {Data}\n   *\n   * @overload\n   * @param {Data} dataset\n   * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n   *\n   * @overload\n   * @param {Key} key\n   * @returns {Data[Key]}\n   *\n   * @overload\n   * @param {Key} key\n   * @param {Data[Key]} value\n   * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n   *\n   * @param {Data | Key} [key]\n   *   Key to get or set, or entire dataset to set, or nothing to get the\n   *   entire dataset (optional).\n   * @param {Data[Key]} [value]\n   *   Value to set (optional).\n   * @returns {unknown}\n   *   The current processor when setting, the value at `key` when getting, or\n   *   the entire dataset when getting without key.\n   */\n  data(key, value) {\n    if (typeof key === 'string') {\n      // Set `key`.\n      if (arguments.length === 2) {\n        assertUnfrozen('data', this.frozen)\n        this.namespace[key] = value\n        return this\n      }\n\n      // Get `key`.\n      return (own.call(this.namespace, key) && this.namespace[key]) || undefined\n    }\n\n    // Set space.\n    if (key) {\n      assertUnfrozen('data', this.frozen)\n      this.namespace = key\n      return this\n    }\n\n    // Get space.\n    return this.namespace\n  }\n\n  /**\n   * Freeze a processor.\n   *\n   * Frozen processors are meant to be extended and not to be configured\n   * directly.\n   *\n   * When a processor is frozen it cannot be unfrozen.\n   * New processors working the same way can be created by calling the\n   * processor.\n   *\n   * It\u2019s possible to freeze processors explicitly by calling `.freeze()`.\n   * Processors freeze automatically when `.parse()`, `.run()`, `.runSync()`,\n   * `.stringify()`, `.process()`, or `.processSync()` are called.\n   *\n   * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n   *   The current processor.\n   */\n  freeze() {\n    if (this.frozen) {\n      return this\n    }\n\n    // Cast so that we can type plugins easier.\n    // Plugins are supposed to be usable on different processors, not just on\n    // this exact processor.\n    const self = /** @type {Processor} */ (/** @type {unknown} */ (this))\n\n    while (++this.freezeIndex < this.attachers.length) {\n      const [attacher, ...options] = this.attachers[this.freezeIndex]\n\n      if (options[0] === false) {\n        continue\n      }\n\n      if (options[0] === true) {\n        options[0] = undefined\n      }\n\n      const transformer = attacher.call(self, ...options)\n\n      if (typeof transformer === 'function') {\n        this.transformers.use(transformer)\n      }\n    }\n\n    this.frozen = true\n    this.freezeIndex = Number.POSITIVE_INFINITY\n\n    return this\n  }\n\n  /**\n   * Parse text to a syntax tree.\n   *\n   * > **Note**: `parse` freezes the processor if not already *frozen*.\n   *\n   * > **Note**: `parse` performs the parse phase, not the run phase or other\n   * > phases.\n   *\n   * @param {Compatible | undefined} [file]\n   *   file to parse (optional); typically `string` or `VFile`; any value\n   *   accepted as `x` in `new VFile(x)`.\n   * @returns {ParseTree extends undefined ? Node : ParseTree}\n   *   Syntax tree representing `file`.\n   */\n  parse(file) {\n    this.freeze()\n    const realFile = vfile(file)\n    const parser = this.parser || this.Parser\n    assertParser('parse', parser)\n    return parser(String(realFile), realFile)\n  }\n\n  /**\n   * Process the given file as configured on the processor.\n   *\n   * > **Note**: `process` freezes the processor if not already *frozen*.\n   *\n   * > **Note**: `process` performs the parse, run, and stringify phases.\n   *\n   * @overload\n   * @param {Compatible | undefined} file\n   * @param {ProcessCallback<VFileWithOutput<CompileResult>>} done\n   * @returns {undefined}\n   *\n   * @overload\n   * @param {Compatible | undefined} [file]\n   * @returns {Promise<VFileWithOutput<CompileResult>>}\n   *\n   * @param {Compatible | undefined} [file]\n   *   File (optional); typically `string` or `VFile`]; any value accepted as\n   *   `x` in `new VFile(x)`.\n   * @param {ProcessCallback<VFileWithOutput<CompileResult>> | undefined} [done]\n   *   Callback (optional).\n   * @returns {Promise<VFile> | undefined}\n   *   Nothing if `done` is given.\n   *   Otherwise a promise, rejected with a fatal error or resolved with the\n   *   processed file.\n   *\n   *   The parsed, transformed, and compiled value is available at\n   *   `file.value` (see note).\n   *\n   *   > **Note**: unified typically compiles by serializing: most\n   *   > compilers return `string` (or `Uint8Array`).\n   *   > Some compilers, such as the one configured with\n   *   > [`rehype-react`][rehype-react], return other values (in this case, a\n   *   > React tree).\n   *   > If you\u2019re using a compiler that doesn\u2019t serialize, expect different\n   *   > result values.\n   *   >\n   *   > To register custom results in TypeScript, add them to\n   *   > {@linkcode CompileResultMap}.\n   *\n   *   [rehype-react]: https://github.com/rehypejs/rehype-react\n   */\n  process(file, done) {\n    const self = this\n\n    this.freeze()\n    assertParser('process', this.parser || this.Parser)\n    assertCompiler('process', this.compiler || this.Compiler)\n\n    return done ? executor(undefined, done) : new Promise(executor)\n\n    // Note: `void`s needed for TS.\n    /**\n     * @param {((file: VFileWithOutput<CompileResult>) => undefined | void) | undefined} resolve\n     * @param {(error: Error | undefined) => undefined | void} reject\n     * @returns {undefined}\n     */\n    function executor(resolve, reject) {\n      const realFile = vfile(file)\n      // Assume `ParseTree` (the result of the parser) matches `HeadTree` (the\n      // input of the first transform).\n      const parseTree =\n        /** @type {HeadTree extends undefined ? Node : HeadTree} */ (\n          /** @type {unknown} */ (self.parse(realFile))\n        )\n\n      self.run(parseTree, realFile, function (error, tree, file) {\n        if (error || !tree || !file) {\n          return realDone(error)\n        }\n\n        // Assume `TailTree` (the output of the last transform) matches\n        // `CompileTree` (the input of the compiler).\n        const compileTree =\n          /** @type {CompileTree extends undefined ? Node : CompileTree} */ (\n            /** @type {unknown} */ (tree)\n          )\n\n        const compileResult = self.stringify(compileTree, file)\n\n        if (looksLikeAValue(compileResult)) {\n          file.value = compileResult\n        } else {\n          file.result = compileResult\n        }\n\n        realDone(error, /** @type {VFileWithOutput<CompileResult>} */ (file))\n      })\n\n      /**\n       * @param {Error | undefined} error\n       * @param {VFileWithOutput<CompileResult> | undefined} [file]\n       * @returns {undefined}\n       */\n      function realDone(error, file) {\n        if (error || !file) {\n          reject(error)\n        } else if (resolve) {\n          resolve(file)\n        } else {\n          assert(done, '`done` is defined if `resolve` is not')\n          done(undefined, file)\n        }\n      }\n    }\n  }\n\n  /**\n   * Process the given file as configured on the processor.\n   *\n   * An error is thrown if asynchronous transforms are configured.\n   *\n   * > **Note**: `processSync` freezes the processor if not already *frozen*.\n   *\n   * > **Note**: `processSync` performs the parse, run, and stringify phases.\n   *\n   * @param {Compatible | undefined} [file]\n   *   File (optional); typically `string` or `VFile`; any value accepted as\n   *   `x` in `new VFile(x)`.\n   * @returns {VFileWithOutput<CompileResult>}\n   *   The processed file.\n   *\n   *   The parsed, transformed, and compiled value is available at\n   *   `file.value` (see note).\n   *\n   *   > **Note**: unified typically compiles by serializing: most\n   *   > compilers return `string` (or `Uint8Array`).\n   *   > Some compilers, such as the one configured with\n   *   > [`rehype-react`][rehype-react], return other values (in this case, a\n   *   > React tree).\n   *   > If you\u2019re using a compiler that doesn\u2019t serialize, expect different\n   *   > result values.\n   *   >\n   *   > To register custom results in TypeScript, add them to\n   *   > {@linkcode CompileResultMap}.\n   *\n   *   [rehype-react]: https://github.com/rehypejs/rehype-react\n   */\n  processSync(file) {\n    /** @type {boolean} */\n    let complete = false\n    /** @type {VFileWithOutput<CompileResult> | undefined} */\n    let result\n\n    this.freeze()\n    assertParser('processSync', this.parser || this.Parser)\n    assertCompiler('processSync', this.compiler || this.Compiler)\n\n    this.process(file, realDone)\n    assertDone('processSync', 'process', complete)\n    assert(result, 'we either bailed on an error or have a tree')\n\n    return result\n\n    /**\n     * @type {ProcessCallback<VFileWithOutput<CompileResult>>}\n     */\n    function realDone(error, file) {\n      complete = true\n      bail(error)\n      result = file\n    }\n  }\n\n  /**\n   * Run *transformers* on a syntax tree.\n   *\n   * > **Note**: `run` freezes the processor if not already *frozen*.\n   *\n   * > **Note**: `run` performs the run phase, not other phases.\n   *\n   * @overload\n   * @param {HeadTree extends undefined ? Node : HeadTree} tree\n   * @param {RunCallback<TailTree extends undefined ? Node : TailTree>} done\n   * @returns {undefined}\n   *\n   * @overload\n   * @param {HeadTree extends undefined ? Node : HeadTree} tree\n   * @param {Compatible | undefined} file\n   * @param {RunCallback<TailTree extends undefined ? Node : TailTree>} done\n   * @returns {undefined}\n   *\n   * @overload\n   * @param {HeadTree extends undefined ? Node : HeadTree} tree\n   * @param {Compatible | undefined} [file]\n   * @returns {Promise<TailTree extends undefined ? Node : TailTree>}\n   *\n   * @param {HeadTree extends undefined ? Node : HeadTree} tree\n   *   Tree to transform and inspect.\n   * @param {(\n   *   RunCallback<TailTree extends undefined ? Node : TailTree> |\n   *   Compatible\n   * )} [file]\n   *   File associated with `node` (optional); any value accepted as `x` in\n   *   `new VFile(x)`.\n   * @param {RunCallback<TailTree extends undefined ? Node : TailTree>} [done]\n   *   Callback (optional).\n   * @returns {Promise<TailTree extends undefined ? Node : TailTree> | undefined}\n   *   Nothing if `done` is given.\n   *   Otherwise, a promise rejected with a fatal error or resolved with the\n   *   transformed tree.\n   */\n  run(tree, file, done) {\n    assertNode(tree)\n    this.freeze()\n\n    const transformers = this.transformers\n\n    if (!done && typeof file === 'function') {\n      done = file\n      file = undefined\n    }\n\n    return done ? executor(undefined, done) : new Promise(executor)\n\n    // Note: `void`s needed for TS.\n    /**\n     * @param {(\n     *   ((tree: TailTree extends undefined ? Node : TailTree) => undefined | void) |\n     *   undefined\n     * )} resolve\n     * @param {(error: Error) => undefined | void} reject\n     * @returns {undefined}\n     */\n    function executor(resolve, reject) {\n      assert(\n        typeof file !== 'function',\n        '`file` can\u2019t be a `done` anymore, we checked'\n      )\n      const realFile = vfile(file)\n      transformers.run(tree, realFile, realDone)\n\n      /**\n       * @param {Error | undefined} error\n       * @param {Node} outputTree\n       * @param {VFile} file\n       * @returns {undefined}\n       */\n      function realDone(error, outputTree, file) {\n        const resultingTree =\n          /** @type {TailTree extends undefined ? Node : TailTree} */ (\n            outputTree || tree\n          )\n\n        if (error) {\n          reject(error)\n        } else if (resolve) {\n          resolve(resultingTree)\n        } else {\n          assert(done, '`done` is defined if `resolve` is not')\n          done(undefined, resultingTree, file)\n        }\n      }\n    }\n  }\n\n  /**\n   * Run *transformers* on a syntax tree.\n   *\n   * An error is thrown if asynchronous transforms are configured.\n   *\n   * > **Note**: `runSync` freezes the processor if not already *frozen*.\n   *\n   * > **Note**: `runSync` performs the run phase, not other phases.\n   *\n   * @param {HeadTree extends undefined ? Node : HeadTree} tree\n   *   Tree to transform and inspect.\n   * @param {Compatible | undefined} [file]\n   *   File associated with `node` (optional); any value accepted as `x` in\n   *   `new VFile(x)`.\n   * @returns {TailTree extends undefined ? Node : TailTree}\n   *   Transformed tree.\n   */\n  runSync(tree, file) {\n    /** @type {boolean} */\n    let complete = false\n    /** @type {(TailTree extends undefined ? Node : TailTree) | undefined} */\n    let result\n\n    this.run(tree, file, realDone)\n\n    assertDone('runSync', 'run', complete)\n    assert(result, 'we either bailed on an error or have a tree')\n    return result\n\n    /**\n     * @type {RunCallback<TailTree extends undefined ? Node : TailTree>}\n     */\n    function realDone(error, tree) {\n      bail(error)\n      result = tree\n      complete = true\n    }\n  }\n\n  /**\n   * Compile a syntax tree.\n   *\n   * > **Note**: `stringify` freezes the processor if not already *frozen*.\n   *\n   * > **Note**: `stringify` performs the stringify phase, not the run phase\n   * > or other phases.\n   *\n   * @param {CompileTree extends undefined ? Node : CompileTree} tree\n   *   Tree to compile.\n   * @param {Compatible | undefined} [file]\n   *   File associated with `node` (optional); any value accepted as `x` in\n   *   `new VFile(x)`.\n   * @returns {CompileResult extends undefined ? Value : CompileResult}\n   *   Textual representation of the tree (see note).\n   *\n   *   > **Note**: unified typically compiles by serializing: most compilers\n   *   > return `string` (or `Uint8Array`).\n   *   > Some compilers, such as the one configured with\n   *   > [`rehype-react`][rehype-react], return other values (in this case, a\n   *   > React tree).\n   *   > If you\u2019re using a compiler that doesn\u2019t serialize, expect different\n   *   > result values.\n   *   >\n   *   > To register custom results in TypeScript, add them to\n   *   > {@linkcode CompileResultMap}.\n   *\n   *   [rehype-react]: https://github.com/rehypejs/rehype-react\n   */\n  stringify(tree, file) {\n    this.freeze()\n    const realFile = vfile(file)\n    const compiler = this.compiler || this.Compiler\n    assertCompiler('stringify', compiler)\n    assertNode(tree)\n\n    return compiler(tree, realFile)\n  }\n\n  /**\n   * Configure the processor to use a plugin, a list of usable values, or a\n   * preset.\n   *\n   * If the processor is already using a plugin, the previous plugin\n   * configuration is changed based on the options that are passed in.\n   * In other words, the plugin is not added a second time.\n   *\n   * > **Note**: `use` cannot be called on *frozen* processors.\n   * > Call the processor first to create a new unfrozen processor.\n   *\n   * @example\n   *   There are many ways to pass plugins to `.use()`.\n   *   This example gives an overview:\n   *\n   *   ```js\n   *   import {unified} from 'unified'\n   *\n   *   unified()\n   *     // Plugin with options:\n   *     .use(pluginA, {x: true, y: true})\n   *     // Passing the same plugin again merges configuration (to `{x: true, y: false, z: true}`):\n   *     .use(pluginA, {y: false, z: true})\n   *     // Plugins:\n   *     .use([pluginB, pluginC])\n   *     // Two plugins, the second with options:\n   *     .use([pluginD, [pluginE, {}]])\n   *     // Preset with plugins and settings:\n   *     .use({plugins: [pluginF, [pluginG, {}]], settings: {position: false}})\n   *     // Settings only:\n   *     .use({settings: {position: false}})\n   *   ```\n   *\n   * @template {Array<unknown>} [Parameters=[]]\n   * @template {Node | string | undefined} [Input=undefined]\n   * @template [Output=Input]\n   *\n   * @overload\n   * @param {Preset | null | undefined} [preset]\n   * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n   *\n   * @overload\n   * @param {PluggableList} list\n   * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n   *\n   * @overload\n   * @param {Plugin<Parameters, Input, Output>} plugin\n   * @param {...(Parameters | [boolean])} parameters\n   * @returns {UsePlugin<ParseTree, HeadTree, TailTree, CompileTree, CompileResult, Input, Output>}\n   *\n   * @param {PluggableList | Plugin | Preset | null | undefined} value\n   *   Usable value.\n   * @param {...unknown} parameters\n   *   Parameters, when a plugin is given as a usable value.\n   * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n   *   Current processor.\n   */\n  use(value, ...parameters) {\n    const attachers = this.attachers\n    const namespace = this.namespace\n\n    assertUnfrozen('use', this.frozen)\n\n    if (value === null || value === undefined) {\n      // Empty.\n    } else if (typeof value === 'function') {\n      addPlugin(value, parameters)\n    } else if (typeof value === 'object') {\n      if (Array.isArray(value)) {\n        addList(value)\n      } else {\n        addPreset(value)\n      }\n    } else {\n      throw new TypeError('Expected usable value, not `' + value + '`')\n    }\n\n    return this\n\n    /**\n     * @param {Pluggable} value\n     * @returns {undefined}\n     */\n    function add(value) {\n      if (typeof value === 'function') {\n        addPlugin(value, [])\n      } else if (typeof value === 'object') {\n        if (Array.isArray(value)) {\n          const [plugin, ...parameters] =\n            /** @type {PluginTuple<Array<unknown>>} */ (value)\n          addPlugin(plugin, parameters)\n        } else {\n          addPreset(value)\n        }\n      } else {\n        throw new TypeError('Expected usable value, not `' + value + '`')\n      }\n    }\n\n    /**\n     * @param {Preset} result\n     * @returns {undefined}\n     */\n    function addPreset(result) {\n      if (!('plugins' in result) && !('settings' in result)) {\n        throw new Error(\n          'Expected usable value but received an empty preset, which is probably a mistake: presets typically come with `plugins` and sometimes with `settings`, but this has neither'\n        )\n      }\n\n      addList(result.plugins)\n\n      if (result.settings) {\n        namespace.settings = extend(true, namespace.settings, result.settings)\n      }\n    }\n\n    /**\n     * @param {PluggableList | null | undefined} plugins\n     * @returns {undefined}\n     */\n    function addList(plugins) {\n      let index = -1\n\n      if (plugins === null || plugins === undefined) {\n        // Empty.\n      } else if (Array.isArray(plugins)) {\n        while (++index < plugins.length) {\n          const thing = plugins[index]\n          add(thing)\n        }\n      } else {\n        throw new TypeError('Expected a list of plugins, not `' + plugins + '`')\n      }\n    }\n\n    /**\n     * @param {Plugin} plugin\n     * @param {Array<unknown>} parameters\n     * @returns {undefined}\n     */\n    function addPlugin(plugin, parameters) {\n      let index = -1\n      let entryIndex = -1\n\n      while (++index < attachers.length) {\n        if (attachers[index][0] === plugin) {\n          entryIndex = index\n          break\n        }\n      }\n\n      if (entryIndex === -1) {\n        attachers.push([plugin, ...parameters])\n      }\n      // Only set if there was at least a `primary` value, otherwise we\u2019d change\n      // `arguments.length`.\n      else if (parameters.length > 0) {\n        let [primary, ...rest] = parameters\n        const currentPrimary = attachers[entryIndex][1]\n        if (isPlainObj(currentPrimary) && isPlainObj(primary)) {\n          primary = extend(true, currentPrimary, primary)\n        }\n\n        attachers[entryIndex] = [plugin, primary, ...rest]\n      }\n    }\n  }\n}\n\n// Note: this returns a *callable* instance.\n// That\u2019s why it\u2019s documented as a function.\n/**\n * Create a new processor.\n *\n * @example\n *   This example shows how a new processor can be created (from `remark`) and linked\n *   to **stdin**(4) and **stdout**(4).\n *\n *   ```js\n *   import process from 'node:process'\n *   import concatStream from 'concat-stream'\n *   import {remark} from 'remark'\n *\n *   process.stdin.pipe(\n *     concatStream(function (buf) {\n *       process.stdout.write(String(remark().processSync(buf)))\n *     })\n *   )\n *   ```\n *\n * @returns\n *   New *unfrozen* processor (`processor`).\n *\n *   This processor is configured to work the same as its ancestor.\n *   When the descendant processor is configured in the future it does not\n *   affect the ancestral processor.\n */\nexport const unified = new Processor().freeze()\n\n/**\n * Assert a parser is available.\n *\n * @param {string} name\n * @param {unknown} value\n * @returns {asserts value is Parser}\n */\nfunction assertParser(name, value) {\n  if (typeof value !== 'function') {\n    throw new TypeError('Cannot `' + name + '` without `parser`')\n  }\n}\n\n/**\n * Assert a compiler is available.\n *\n * @param {string} name\n * @param {unknown} value\n * @returns {asserts value is Compiler}\n */\nfunction assertCompiler(name, value) {\n  if (typeof value !== 'function') {\n    throw new TypeError('Cannot `' + name + '` without `compiler`')\n  }\n}\n\n/**\n * Assert the processor is not frozen.\n *\n * @param {string} name\n * @param {unknown} frozen\n * @returns {asserts frozen is false}\n */\nfunction assertUnfrozen(name, frozen) {\n  if (frozen) {\n    throw new Error(\n      'Cannot call `' +\n        name +\n        '` on a frozen processor.\\nCreate a new processor first, by calling it: use `processor()` instead of `processor`.'\n    )\n  }\n}\n\n/**\n * Assert `node` is a unist node.\n *\n * @param {unknown} node\n * @returns {asserts node is Node}\n */\nfunction assertNode(node) {\n  // `isPlainObj` unfortunately uses `any` instead of `unknown`.\n  // type-coverage:ignore-next-line\n  if (!isPlainObj(node) || typeof node.type !== 'string') {\n    throw new TypeError('Expected node, got `' + node + '`')\n    // Fine.\n  }\n}\n\n/**\n * Assert that `complete` is `true`.\n *\n * @param {string} name\n * @param {string} asyncName\n * @param {unknown} complete\n * @returns {asserts complete is true}\n */\nfunction assertDone(name, asyncName, complete) {\n  if (!complete) {\n    throw new Error(\n      '`' + name + '` finished async. Use `' + asyncName + '` instead'\n    )\n  }\n}\n\n/**\n * @param {Compatible | undefined} [value]\n * @returns {VFile}\n */\nfunction vfile(value) {\n  return looksLikeAVFile(value) ? value : new VFile(value)\n}\n\n/**\n * @param {Compatible | undefined} [value]\n * @returns {value is VFile}\n */\nfunction looksLikeAVFile(value) {\n  return Boolean(\n    value &&\n      typeof value === 'object' &&\n      'message' in value &&\n      'messages' in value\n  )\n}\n\n/**\n * @param {unknown} [value]\n * @returns {value is Value}\n */\nfunction looksLikeAValue(value) {\n  return typeof value === 'string' || isUint8Array(value)\n}\n\n/**\n * Assert `value` is an `Uint8Array`.\n *\n * @param {unknown} value\n *   thing.\n * @returns {value is Uint8Array}\n *   Whether `value` is an `Uint8Array`.\n */\nfunction isUint8Array(value) {\n  return Boolean(\n    value &&\n      typeof value === 'object' &&\n      'byteLength' in value &&\n      'byteOffset' in value\n  )\n}\n", "export default function isPlainObject(value) {\n\tif (typeof value !== 'object' || value === null) {\n\t\treturn false;\n\t}\n\n\tconst prototype = Object.getPrototypeOf(value);\n\treturn (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in value) && !(Symbol.iterator in value);\n}\n", "/**\n * @typedef {(error?: Error|null|undefined, ...output: Array<any>) => void} Callback\n * @typedef {(...input: Array<any>) => any} Middleware\n *\n * @typedef {(...input: Array<any>) => void} Run\n *   Call all middleware.\n * @typedef {(fn: Middleware) => Pipeline} Use\n *   Add `fn` (middleware) to the list.\n * @typedef {{run: Run, use: Use}} Pipeline\n *   Middleware.\n */\n\n/**\n * Create new middleware.\n *\n * @returns {Pipeline}\n */\nexport function trough() {\n  /** @type {Array<Middleware>} */\n  const fns = []\n  /** @type {Pipeline} */\n  const pipeline = {run, use}\n\n  return pipeline\n\n  /** @type {Run} */\n  function run(...values) {\n    let middlewareIndex = -1\n    /** @type {Callback} */\n    const callback = values.pop()\n\n    if (typeof callback !== 'function') {\n      throw new TypeError('Expected function as last argument, not ' + callback)\n    }\n\n    next(null, ...values)\n\n    /**\n     * Run the next `fn`, or we\u2019re done.\n     *\n     * @param {Error|null|undefined} error\n     * @param {Array<any>} output\n     */\n    function next(error, ...output) {\n      const fn = fns[++middlewareIndex]\n      let index = -1\n\n      if (error) {\n        callback(error)\n        return\n      }\n\n      // Copy non-nullish input into values.\n      while (++index < values.length) {\n        if (output[index] === null || output[index] === undefined) {\n          output[index] = values[index]\n        }\n      }\n\n      // Save the newly created `output` for the next call.\n      values = output\n\n      // Next or done.\n      if (fn) {\n        wrap(fn, next)(...output)\n      } else {\n        callback(null, ...output)\n      }\n    }\n  }\n\n  /** @type {Use} */\n  function use(middelware) {\n    if (typeof middelware !== 'function') {\n      throw new TypeError(\n        'Expected `middelware` to be a function, not ' + middelware\n      )\n    }\n\n    fns.push(middelware)\n    return pipeline\n  }\n}\n\n/**\n * Wrap `middleware`.\n * Can be sync or async; return a promise, receive a callback, or return new\n * values and errors.\n *\n * @param {Middleware} middleware\n * @param {Callback} callback\n */\nexport function wrap(middleware, callback) {\n  /** @type {boolean} */\n  let called\n\n  return wrapped\n\n  /**\n   * Call `middleware`.\n   * @this {any}\n   * @param {Array<any>} parameters\n   * @returns {void}\n   */\n  function wrapped(...parameters) {\n    const fnExpectsCallback = middleware.length > parameters.length\n    /** @type {any} */\n    let result\n\n    if (fnExpectsCallback) {\n      parameters.push(done)\n    }\n\n    try {\n      result = middleware.apply(this, parameters)\n    } catch (error) {\n      const exception = /** @type {Error} */ (error)\n\n      // Well, this is quite the pickle.\n      // `middleware` received a callback and called it synchronously, but that\n      // threw an error.\n      // The only thing left to do is to throw the thing instead.\n      if (fnExpectsCallback && called) {\n        throw exception\n      }\n\n      return done(exception)\n    }\n\n    if (!fnExpectsCallback) {\n      if (result instanceof Promise) {\n        result.then(then, done)\n      } else if (result instanceof Error) {\n        done(result)\n      } else {\n        then(result)\n      }\n    }\n  }\n\n  /**\n   * Call `callback`, only once.\n   * @type {Callback}\n   */\n  function done(error, ...output) {\n    if (!called) {\n      called = true\n      callback(error, ...output)\n    }\n  }\n\n  /**\n   * Call `done` with one value.\n   *\n   * @param {any} [value]\n   */\n  function then(value) {\n    done(null, value)\n  }\n}\n", "export {default as minpath} from 'node:path'\n", "export {default as minproc} from 'node:process'\n", "export {fileURLToPath as urlToPath} from 'node:url'\nexport {isUrl} from './minurl.shared.js'\n", "/**\n * Checks if a value has the shape of a WHATWG URL object.\n *\n * Using a symbol or instanceof would not be able to recognize URL objects\n * coming from other implementations (e.g. in Electron), so instead we are\n * checking some well known properties for a lack of a better test.\n *\n * We use `href` and `protocol` as they are the only properties that are\n * easy to retrieve and calculate due to the lazy nature of the getters.\n *\n * We check for auth attribute to distinguish legacy url instance with\n * WHATWG URL instance.\n *\n * @param {unknown} fileUrlOrPath\n *   File path or URL.\n * @returns {fileUrlOrPath is URL}\n *   Whether it\u2019s a URL.\n */\n// From: <https://github.com/nodejs/node/blob/6a3403c/lib/internal/url.js#L720>\nexport function isUrl(fileUrlOrPath) {\n  return Boolean(\n    fileUrlOrPath !== null &&\n      typeof fileUrlOrPath === 'object' &&\n      'href' in fileUrlOrPath &&\n      fileUrlOrPath.href &&\n      'protocol' in fileUrlOrPath &&\n      fileUrlOrPath.protocol &&\n      // @ts-expect-error: indexing is fine.\n      fileUrlOrPath.auth === undefined\n  )\n}\n", "/**\n * @import {Node, Point, Position} from 'unist'\n * @import {Options as MessageOptions} from 'vfile-message'\n * @import {Compatible, Data, Map, Options, Value} from 'vfile'\n */\n\n/**\n * @typedef {object & {type: string, position?: Position | undefined}} NodeLike\n */\n\nimport {VFileMessage} from 'vfile-message'\nimport {minpath} from '#minpath'\nimport {minproc} from '#minproc'\nimport {urlToPath, isUrl} from '#minurl'\n\n/**\n * Order of setting (least specific to most), we need this because otherwise\n * `{stem: 'a', path: '~/b.js'}` would throw, as a path is needed before a\n * stem can be set.\n */\nconst order = /** @type {const} */ ([\n  'history',\n  'path',\n  'basename',\n  'stem',\n  'extname',\n  'dirname'\n])\n\nexport class VFile {\n  /**\n   * Create a new virtual file.\n   *\n   * `options` is treated as:\n   *\n   * *   `string` or `Uint8Array` \u2014 `{value: options}`\n   * *   `URL` \u2014 `{path: options}`\n   * *   `VFile` \u2014 shallow copies its data over to the new file\n   * *   `object` \u2014 all fields are shallow copied over to the new file\n   *\n   * Path related fields are set in the following order (least specific to\n   * most specific): `history`, `path`, `basename`, `stem`, `extname`,\n   * `dirname`.\n   *\n   * You cannot set `dirname` or `extname` without setting either `history`,\n   * `path`, `basename`, or `stem` too.\n   *\n   * @param {Compatible | null | undefined} [value]\n   *   File value.\n   * @returns\n   *   New instance.\n   */\n  constructor(value) {\n    /** @type {Options | VFile} */\n    let options\n\n    if (!value) {\n      options = {}\n    } else if (isUrl(value)) {\n      options = {path: value}\n    } else if (typeof value === 'string' || isUint8Array(value)) {\n      options = {value}\n    } else {\n      options = value\n    }\n\n    /* eslint-disable no-unused-expressions */\n\n    /**\n     * Base of `path` (default: `process.cwd()` or `'/'` in browsers).\n     *\n     * @type {string}\n     */\n    // Prevent calling `cwd` (which could be expensive) if it\u2019s not needed;\n    // the empty string will be overridden in the next block.\n    this.cwd = 'cwd' in options ? '' : minproc.cwd()\n\n    /**\n     * Place to store custom info (default: `{}`).\n     *\n     * It\u2019s OK to store custom data directly on the file but moving it to\n     * `data` is recommended.\n     *\n     * @type {Data}\n     */\n    this.data = {}\n\n    /**\n     * List of file paths the file moved between.\n     *\n     * The first is the original path and the last is the current path.\n     *\n     * @type {Array<string>}\n     */\n    this.history = []\n\n    /**\n     * List of messages associated with the file.\n     *\n     * @type {Array<VFileMessage>}\n     */\n    this.messages = []\n\n    /**\n     * Raw value.\n     *\n     * @type {Value}\n     */\n    this.value\n\n    // The below are non-standard, they are \u201Cwell-known\u201D.\n    // As in, used in several tools.\n    /**\n     * Source map.\n     *\n     * This type is equivalent to the `RawSourceMap` type from the `source-map`\n     * module.\n     *\n     * @type {Map | null | undefined}\n     */\n    this.map\n\n    /**\n     * Custom, non-string, compiled, representation.\n     *\n     * This is used by unified to store non-string results.\n     * One example is when turning markdown into React nodes.\n     *\n     * @type {unknown}\n     */\n    this.result\n\n    /**\n     * Whether a file was saved to disk.\n     *\n     * This is used by vfile reporters.\n     *\n     * @type {boolean}\n     */\n    this.stored\n    /* eslint-enable no-unused-expressions */\n\n    // Set path related properties in the correct order.\n    let index = -1\n\n    while (++index < order.length) {\n      const field = order[index]\n\n      // Note: we specifically use `in` instead of `hasOwnProperty` to accept\n      // `vfile`s too.\n      if (\n        field in options &&\n        options[field] !== undefined &&\n        options[field] !== null\n      ) {\n        // @ts-expect-error: TS doesn\u2019t understand basic reality.\n        this[field] = field === 'history' ? [...options[field]] : options[field]\n      }\n    }\n\n    /** @type {string} */\n    let field\n\n    // Set non-path related properties.\n    for (field in options) {\n      // @ts-expect-error: fine to set other things.\n      if (!order.includes(field)) {\n        // @ts-expect-error: fine to set other things.\n        this[field] = options[field]\n      }\n    }\n  }\n\n  /**\n   * Get the basename (including extname) (example: `'index.min.js'`).\n   *\n   * @returns {string | undefined}\n   *   Basename.\n   */\n  get basename() {\n    return typeof this.path === 'string'\n      ? minpath.basename(this.path)\n      : undefined\n  }\n\n  /**\n   * Set basename (including extname) (`'index.min.js'`).\n   *\n   * Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\\'`\n   * on windows).\n   * Cannot be nullified (use `file.path = file.dirname` instead).\n   *\n   * @param {string} basename\n   *   Basename.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  set basename(basename) {\n    assertNonEmpty(basename, 'basename')\n    assertPart(basename, 'basename')\n    this.path = minpath.join(this.dirname || '', basename)\n  }\n\n  /**\n   * Get the parent path (example: `'~'`).\n   *\n   * @returns {string | undefined}\n   *   Dirname.\n   */\n  get dirname() {\n    return typeof this.path === 'string'\n      ? minpath.dirname(this.path)\n      : undefined\n  }\n\n  /**\n   * Set the parent path (example: `'~'`).\n   *\n   * Cannot be set if there\u2019s no `path` yet.\n   *\n   * @param {string | undefined} dirname\n   *   Dirname.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  set dirname(dirname) {\n    assertPath(this.basename, 'dirname')\n    this.path = minpath.join(dirname || '', this.basename)\n  }\n\n  /**\n   * Get the extname (including dot) (example: `'.js'`).\n   *\n   * @returns {string | undefined}\n   *   Extname.\n   */\n  get extname() {\n    return typeof this.path === 'string'\n      ? minpath.extname(this.path)\n      : undefined\n  }\n\n  /**\n   * Set the extname (including dot) (example: `'.js'`).\n   *\n   * Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\\'`\n   * on windows).\n   * Cannot be set if there\u2019s no `path` yet.\n   *\n   * @param {string | undefined} extname\n   *   Extname.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  set extname(extname) {\n    assertPart(extname, 'extname')\n    assertPath(this.dirname, 'extname')\n\n    if (extname) {\n      if (extname.codePointAt(0) !== 46 /* `.` */) {\n        throw new Error('`extname` must start with `.`')\n      }\n\n      if (extname.includes('.', 1)) {\n        throw new Error('`extname` cannot contain multiple dots')\n      }\n    }\n\n    this.path = minpath.join(this.dirname, this.stem + (extname || ''))\n  }\n\n  /**\n   * Get the full path (example: `'~/index.min.js'`).\n   *\n   * @returns {string}\n   *   Path.\n   */\n  get path() {\n    return this.history[this.history.length - 1]\n  }\n\n  /**\n   * Set the full path (example: `'~/index.min.js'`).\n   *\n   * Cannot be nullified.\n   * You can set a file URL (a `URL` object with a `file:` protocol) which will\n   * be turned into a path with `url.fileURLToPath`.\n   *\n   * @param {URL | string} path\n   *   Path.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  set path(path) {\n    if (isUrl(path)) {\n      path = urlToPath(path)\n    }\n\n    assertNonEmpty(path, 'path')\n\n    if (this.path !== path) {\n      this.history.push(path)\n    }\n  }\n\n  /**\n   * Get the stem (basename w/o extname) (example: `'index.min'`).\n   *\n   * @returns {string | undefined}\n   *   Stem.\n   */\n  get stem() {\n    return typeof this.path === 'string'\n      ? minpath.basename(this.path, this.extname)\n      : undefined\n  }\n\n  /**\n   * Set the stem (basename w/o extname) (example: `'index.min'`).\n   *\n   * Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\\'`\n   * on windows).\n   * Cannot be nullified (use `file.path = file.dirname` instead).\n   *\n   * @param {string} stem\n   *   Stem.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  set stem(stem) {\n    assertNonEmpty(stem, 'stem')\n    assertPart(stem, 'stem')\n    this.path = minpath.join(this.dirname || '', stem + (this.extname || ''))\n  }\n\n  // Normal prototypal methods.\n  /**\n   * Create a fatal message for `reason` associated with the file.\n   *\n   * The `fatal` field of the message is set to `true` (error; file not usable)\n   * and the `file` field is set to the current file path.\n   * The message is added to the `messages` field on `file`.\n   *\n   * > \uD83E\uDEA6 **Note**: also has obsolete signatures.\n   *\n   * @overload\n   * @param {string} reason\n   * @param {MessageOptions | null | undefined} [options]\n   * @returns {never}\n   *\n   * @overload\n   * @param {string} reason\n   * @param {Node | NodeLike | null | undefined} parent\n   * @param {string | null | undefined} [origin]\n   * @returns {never}\n   *\n   * @overload\n   * @param {string} reason\n   * @param {Point | Position | null | undefined} place\n   * @param {string | null | undefined} [origin]\n   * @returns {never}\n   *\n   * @overload\n   * @param {string} reason\n   * @param {string | null | undefined} [origin]\n   * @returns {never}\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {Node | NodeLike | null | undefined} parent\n   * @param {string | null | undefined} [origin]\n   * @returns {never}\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {Point | Position | null | undefined} place\n   * @param {string | null | undefined} [origin]\n   * @returns {never}\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {string | null | undefined} [origin]\n   * @returns {never}\n   *\n   * @param {Error | VFileMessage | string} causeOrReason\n   *   Reason for message, should use markdown.\n   * @param {Node | NodeLike | MessageOptions | Point | Position | string | null | undefined} [optionsOrParentOrPlace]\n   *   Configuration (optional).\n   * @param {string | null | undefined} [origin]\n   *   Place in code where the message originates (example:\n   *   `'my-package:my-rule'` or `'my-rule'`).\n   * @returns {never}\n   *   Never.\n   * @throws {VFileMessage}\n   *   Message.\n   */\n  fail(causeOrReason, optionsOrParentOrPlace, origin) {\n    // @ts-expect-error: the overloads are fine.\n    const message = this.message(causeOrReason, optionsOrParentOrPlace, origin)\n\n    message.fatal = true\n\n    throw message\n  }\n\n  /**\n   * Create an info message for `reason` associated with the file.\n   *\n   * The `fatal` field of the message is set to `undefined` (info; change\n   * likely not needed) and the `file` field is set to the current file path.\n   * The message is added to the `messages` field on `file`.\n   *\n   * > \uD83E\uDEA6 **Note**: also has obsolete signatures.\n   *\n   * @overload\n   * @param {string} reason\n   * @param {MessageOptions | null | undefined} [options]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {string} reason\n   * @param {Node | NodeLike | null | undefined} parent\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {string} reason\n   * @param {Point | Position | null | undefined} place\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {string} reason\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {Node | NodeLike | null | undefined} parent\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {Point | Position | null | undefined} place\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @param {Error | VFileMessage | string} causeOrReason\n   *   Reason for message, should use markdown.\n   * @param {Node | NodeLike | MessageOptions | Point | Position | string | null | undefined} [optionsOrParentOrPlace]\n   *   Configuration (optional).\n   * @param {string | null | undefined} [origin]\n   *   Place in code where the message originates (example:\n   *   `'my-package:my-rule'` or `'my-rule'`).\n   * @returns {VFileMessage}\n   *   Message.\n   */\n  info(causeOrReason, optionsOrParentOrPlace, origin) {\n    // @ts-expect-error: the overloads are fine.\n    const message = this.message(causeOrReason, optionsOrParentOrPlace, origin)\n\n    message.fatal = undefined\n\n    return message\n  }\n\n  /**\n   * Create a message for `reason` associated with the file.\n   *\n   * The `fatal` field of the message is set to `false` (warning; change may be\n   * needed) and the `file` field is set to the current file path.\n   * The message is added to the `messages` field on `file`.\n   *\n   * > \uD83E\uDEA6 **Note**: also has obsolete signatures.\n   *\n   * @overload\n   * @param {string} reason\n   * @param {MessageOptions | null | undefined} [options]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {string} reason\n   * @param {Node | NodeLike | null | undefined} parent\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {string} reason\n   * @param {Point | Position | null | undefined} place\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {string} reason\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {Node | NodeLike | null | undefined} parent\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {Point | Position | null | undefined} place\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @param {Error | VFileMessage | string} causeOrReason\n   *   Reason for message, should use markdown.\n   * @param {Node | NodeLike | MessageOptions | Point | Position | string | null | undefined} [optionsOrParentOrPlace]\n   *   Configuration (optional).\n   * @param {string | null | undefined} [origin]\n   *   Place in code where the message originates (example:\n   *   `'my-package:my-rule'` or `'my-rule'`).\n   * @returns {VFileMessage}\n   *   Message.\n   */\n  message(causeOrReason, optionsOrParentOrPlace, origin) {\n    const message = new VFileMessage(\n      // @ts-expect-error: the overloads are fine.\n      causeOrReason,\n      optionsOrParentOrPlace,\n      origin\n    )\n\n    if (this.path) {\n      message.name = this.path + ':' + message.name\n      message.file = this.path\n    }\n\n    message.fatal = false\n\n    this.messages.push(message)\n\n    return message\n  }\n\n  /**\n   * Serialize the file.\n   *\n   * > **Note**: which encodings are supported depends on the engine.\n   * > For info on Node.js, see:\n   * > <https://nodejs.org/api/util.html#whatwg-supported-encodings>.\n   *\n   * @param {string | null | undefined} [encoding='utf8']\n   *   Character encoding to understand `value` as when it\u2019s a `Uint8Array`\n   *   (default: `'utf-8'`).\n   * @returns {string}\n   *   Serialized file.\n   */\n  toString(encoding) {\n    if (this.value === undefined) {\n      return ''\n    }\n\n    if (typeof this.value === 'string') {\n      return this.value\n    }\n\n    const decoder = new TextDecoder(encoding || undefined)\n    return decoder.decode(this.value)\n  }\n}\n\n/**\n * Assert that `part` is not a path (as in, does not contain `path.sep`).\n *\n * @param {string | null | undefined} part\n *   File path part.\n * @param {string} name\n *   Part name.\n * @returns {undefined}\n *   Nothing.\n */\nfunction assertPart(part, name) {\n  if (part && part.includes(minpath.sep)) {\n    throw new Error(\n      '`' + name + '` cannot be a path: did not expect `' + minpath.sep + '`'\n    )\n  }\n}\n\n/**\n * Assert that `part` is not empty.\n *\n * @param {string | undefined} part\n *   Thing.\n * @param {string} name\n *   Part name.\n * @returns {asserts part is string}\n *   Nothing.\n */\nfunction assertNonEmpty(part, name) {\n  if (!part) {\n    throw new Error('`' + name + '` cannot be empty')\n  }\n}\n\n/**\n * Assert `path` exists.\n *\n * @param {string | undefined} path\n *   Path.\n * @param {string} name\n *   Dependency name.\n * @returns {asserts path is string}\n *   Nothing.\n */\nfunction assertPath(path, name) {\n  if (!path) {\n    throw new Error('Setting `' + name + '` requires `path` to be set too')\n  }\n}\n\n/**\n * Assert `value` is an `Uint8Array`.\n *\n * @param {unknown} value\n *   thing.\n * @returns {value is Uint8Array}\n *   Whether `value` is an `Uint8Array`.\n */\nfunction isUint8Array(value) {\n  return Boolean(\n    value &&\n      typeof value === 'object' &&\n      'byteLength' in value &&\n      'byteOffset' in value\n  )\n}\n", "export const CallableInstance =\n  /**\n   * @type {new <Parameters extends Array<unknown>, Result>(property: string | symbol) => (...parameters: Parameters) => Result}\n   */\n  (\n    /** @type {unknown} */\n    (\n      /**\n       * @this {Function}\n       * @param {string | symbol} property\n       * @returns {(...parameters: Array<unknown>) => unknown}\n       */\n      function (property) {\n        const self = this\n        const constr = self.constructor\n        const proto = /** @type {Record<string | symbol, Function>} */ (\n          // Prototypes do exist.\n          // type-coverage:ignore-next-line\n          constr.prototype\n        )\n        const value = proto[property]\n        /** @type {(...parameters: Array<unknown>) => unknown} */\n        const apply = function () {\n          return value.apply(apply, arguments)\n        }\n\n        Object.setPrototypeOf(apply, proto)\n\n        // Not needed for us in `unified`: we only call this on the `copy`\n        // function,\n        // and we don't need to add its fields (`length`, `name`)\n        // over.\n        // See also: GH-246.\n        // const names = Object.getOwnPropertyNames(value)\n        //\n        // for (const p of names) {\n        //   const descriptor = Object.getOwnPropertyDescriptor(value, p)\n        //   if (descriptor) Object.defineProperty(apply, p, descriptor)\n        // }\n\n        return apply\n      }\n    )\n  )\n", "/**\n * Count how often a character (or substring) is used in a string.\n *\n * @param {string} value\n *   Value to search in.\n * @param {string} character\n *   Character (or substring) to look for.\n * @return {number}\n *   Number of times `character` occurred in `value`.\n */\nexport function ccount(value, character) {\n  const source = String(value)\n\n  if (typeof character !== 'string') {\n    throw new TypeError('Expected character')\n  }\n\n  let count = 0\n  let index = source.indexOf(character)\n\n  while (index !== -1) {\n    count++\n    index = source.indexOf(character, index + character.length)\n  }\n\n  return count\n}\n", "export default function escapeStringRegexp(string) {\n\tif (typeof string !== 'string') {\n\t\tthrow new TypeError('Expected a string');\n\t}\n\n\t// Escape characters with special meaning either inside or outside character sets.\n\t// Use a simple backslash escape when it\u2019s always valid, and a `\\xnn` escape when the simpler form would be disallowed by Unicode patterns\u2019 stricter grammar.\n\treturn string\n\t\t.replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&')\n\t\t.replace(/-/g, '\\\\x2d');\n}\n", "/**\n * @import {Nodes, Parents, PhrasingContent, Root, Text} from 'mdast'\n * @import {BuildVisitor, Test, VisitorResult} from 'unist-util-visit-parents'\n */\n\n/**\n * @typedef RegExpMatchObject\n *   Info on the match.\n * @property {number} index\n *   The index of the search at which the result was found.\n * @property {string} input\n *   A copy of the search string in the text node.\n * @property {[...Array<Parents>, Text]} stack\n *   All ancestors of the text node, where the last node is the text itself.\n *\n * @typedef {RegExp | string} Find\n *   Pattern to find.\n *\n *   Strings are escaped and then turned into global expressions.\n *\n * @typedef {Array<FindAndReplaceTuple>} FindAndReplaceList\n *   Several find and replaces, in array form.\n *\n * @typedef {[Find, Replace?]} FindAndReplaceTuple\n *   Find and replace in tuple form.\n *\n * @typedef {ReplaceFunction | string | null | undefined} Replace\n *   Thing to replace with.\n *\n * @callback ReplaceFunction\n *   Callback called when a search matches.\n * @param {...any} parameters\n *   The parameters are the result of corresponding search expression:\n *\n *   * `value` (`string`) \u2014 whole match\n *   * `...capture` (`Array<string>`) \u2014 matches from regex capture groups\n *   * `match` (`RegExpMatchObject`) \u2014 info on the match\n * @returns {Array<PhrasingContent> | PhrasingContent | string | false | null | undefined}\n *   Thing to replace with.\n *\n *   * when `null`, `undefined`, `''`, remove the match\n *   * \u2026or when `false`, do not replace at all\n *   * \u2026or when `string`, replace with a text node of that value\n *   * \u2026or when `Node` or `Array<Node>`, replace with those nodes\n *\n * @typedef {[RegExp, ReplaceFunction]} Pair\n *   Normalized find and replace.\n *\n * @typedef {Array<Pair>} Pairs\n *   All find and replaced.\n *\n * @typedef Options\n *   Configuration.\n * @property {Test | null | undefined} [ignore]\n *   Test for which nodes to ignore (optional).\n */\n\nimport escape from 'escape-string-regexp'\nimport {visitParents} from 'unist-util-visit-parents'\nimport {convert} from 'unist-util-is'\n\n/**\n * Find patterns in a tree and replace them.\n *\n * The algorithm searches the tree in *preorder* for complete values in `Text`\n * nodes.\n * Partial matches are not supported.\n *\n * @param {Nodes} tree\n *   Tree to change.\n * @param {FindAndReplaceList | FindAndReplaceTuple} list\n *   Patterns to find.\n * @param {Options | null | undefined} [options]\n *   Configuration (when `find` is not `Find`).\n * @returns {undefined}\n *   Nothing.\n */\nexport function findAndReplace(tree, list, options) {\n  const settings = options || {}\n  const ignored = convert(settings.ignore || [])\n  const pairs = toPairs(list)\n  let pairIndex = -1\n\n  while (++pairIndex < pairs.length) {\n    visitParents(tree, 'text', visitor)\n  }\n\n  /** @type {BuildVisitor<Root, 'text'>} */\n  function visitor(node, parents) {\n    let index = -1\n    /** @type {Parents | undefined} */\n    let grandparent\n\n    while (++index < parents.length) {\n      const parent = parents[index]\n      /** @type {Array<Nodes> | undefined} */\n      const siblings = grandparent ? grandparent.children : undefined\n\n      if (\n        ignored(\n          parent,\n          siblings ? siblings.indexOf(parent) : undefined,\n          grandparent\n        )\n      ) {\n        return\n      }\n\n      grandparent = parent\n    }\n\n    if (grandparent) {\n      return handler(node, parents)\n    }\n  }\n\n  /**\n   * Handle a text node which is not in an ignored parent.\n   *\n   * @param {Text} node\n   *   Text node.\n   * @param {Array<Parents>} parents\n   *   Parents.\n   * @returns {VisitorResult}\n   *   Result.\n   */\n  function handler(node, parents) {\n    const parent = parents[parents.length - 1]\n    const find = pairs[pairIndex][0]\n    const replace = pairs[pairIndex][1]\n    let start = 0\n    /** @type {Array<Nodes>} */\n    const siblings = parent.children\n    const index = siblings.indexOf(node)\n    let change = false\n    /** @type {Array<PhrasingContent>} */\n    let nodes = []\n\n    find.lastIndex = 0\n\n    let match = find.exec(node.value)\n\n    while (match) {\n      const position = match.index\n      /** @type {RegExpMatchObject} */\n      const matchObject = {\n        index: match.index,\n        input: match.input,\n        stack: [...parents, node]\n      }\n      let value = replace(...match, matchObject)\n\n      if (typeof value === 'string') {\n        value = value.length > 0 ? {type: 'text', value} : undefined\n      }\n\n      // It wasn\u2019t a match after all.\n      if (value === false) {\n        // False acts as if there was no match.\n        // So we need to reset `lastIndex`, which currently being at the end of\n        // the current match, to the beginning.\n        find.lastIndex = position + 1\n      } else {\n        if (start !== position) {\n          nodes.push({\n            type: 'text',\n            value: node.value.slice(start, position)\n          })\n        }\n\n        if (Array.isArray(value)) {\n          nodes.push(...value)\n        } else if (value) {\n          nodes.push(value)\n        }\n\n        start = position + match[0].length\n        change = true\n      }\n\n      if (!find.global) {\n        break\n      }\n\n      match = find.exec(node.value)\n    }\n\n    if (change) {\n      if (start < node.value.length) {\n        nodes.push({type: 'text', value: node.value.slice(start)})\n      }\n\n      parent.children.splice(index, 1, ...nodes)\n    } else {\n      nodes = [node]\n    }\n\n    return index + nodes.length\n  }\n}\n\n/**\n * Turn a tuple or a list of tuples into pairs.\n *\n * @param {FindAndReplaceList | FindAndReplaceTuple} tupleOrList\n *   Schema.\n * @returns {Pairs}\n *   Clean pairs.\n */\nfunction toPairs(tupleOrList) {\n  /** @type {Pairs} */\n  const result = []\n\n  if (!Array.isArray(tupleOrList)) {\n    throw new TypeError('Expected find and replace tuple or list of tuples')\n  }\n\n  /** @type {FindAndReplaceList} */\n  // @ts-expect-error: correct.\n  const list =\n    !tupleOrList[0] || Array.isArray(tupleOrList[0])\n      ? tupleOrList\n      : [tupleOrList]\n\n  let index = -1\n\n  while (++index < list.length) {\n    const tuple = list[index]\n    result.push([toExpression(tuple[0]), toFunction(tuple[1])])\n  }\n\n  return result\n}\n\n/**\n * Turn a find into an expression.\n *\n * @param {Find} find\n *   Find.\n * @returns {RegExp}\n *   Expression.\n */\nfunction toExpression(find) {\n  return typeof find === 'string' ? new RegExp(escape(find), 'g') : find\n}\n\n/**\n * Turn a replace into a function.\n *\n * @param {Replace} replace\n *   Replace.\n * @returns {ReplaceFunction}\n *   Function.\n */\nfunction toFunction(replace) {\n  return typeof replace === 'function'\n    ? replace\n    : function () {\n        return replace\n      }\n}\n", "/**\n * @import {RegExpMatchObject, ReplaceFunction} from 'mdast-util-find-and-replace'\n * @import {CompileContext, Extension as FromMarkdownExtension, Handle as FromMarkdownHandle, Transform as FromMarkdownTransform} from 'mdast-util-from-markdown'\n * @import {ConstructName, Options as ToMarkdownExtension} from 'mdast-util-to-markdown'\n * @import {Link, PhrasingContent} from 'mdast'\n */\n\nimport {ccount} from 'ccount'\nimport {ok as assert} from 'devlop'\nimport {unicodePunctuation, unicodeWhitespace} from 'micromark-util-character'\nimport {findAndReplace} from 'mdast-util-find-and-replace'\n\n/** @type {ConstructName} */\nconst inConstruct = 'phrasing'\n/** @type {Array<ConstructName>} */\nconst notInConstruct = ['autolink', 'link', 'image', 'label']\n\n/**\n * Create an extension for `mdast-util-from-markdown` to enable GFM autolink\n * literals in markdown.\n *\n * @returns {FromMarkdownExtension}\n *   Extension for `mdast-util-to-markdown` to enable GFM autolink literals.\n */\nexport function gfmAutolinkLiteralFromMarkdown() {\n  return {\n    transforms: [transformGfmAutolinkLiterals],\n    enter: {\n      literalAutolink: enterLiteralAutolink,\n      literalAutolinkEmail: enterLiteralAutolinkValue,\n      literalAutolinkHttp: enterLiteralAutolinkValue,\n      literalAutolinkWww: enterLiteralAutolinkValue\n    },\n    exit: {\n      literalAutolink: exitLiteralAutolink,\n      literalAutolinkEmail: exitLiteralAutolinkEmail,\n      literalAutolinkHttp: exitLiteralAutolinkHttp,\n      literalAutolinkWww: exitLiteralAutolinkWww\n    }\n  }\n}\n\n/**\n * Create an extension for `mdast-util-to-markdown` to enable GFM autolink\n * literals in markdown.\n *\n * @returns {ToMarkdownExtension}\n *   Extension for `mdast-util-to-markdown` to enable GFM autolink literals.\n */\nexport function gfmAutolinkLiteralToMarkdown() {\n  return {\n    unsafe: [\n      {\n        character: '@',\n        before: '[+\\\\-.\\\\w]',\n        after: '[\\\\-.\\\\w]',\n        inConstruct,\n        notInConstruct\n      },\n      {\n        character: '.',\n        before: '[Ww]',\n        after: '[\\\\-.\\\\w]',\n        inConstruct,\n        notInConstruct\n      },\n      {\n        character: ':',\n        before: '[ps]',\n        after: '\\\\/',\n        inConstruct,\n        notInConstruct\n      }\n    ]\n  }\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterLiteralAutolink(token) {\n  this.enter({type: 'link', title: null, url: '', children: []}, token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterLiteralAutolinkValue(token) {\n  this.config.enter.autolinkProtocol.call(this, token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitLiteralAutolinkHttp(token) {\n  this.config.exit.autolinkProtocol.call(this, token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitLiteralAutolinkWww(token) {\n  this.config.exit.data.call(this, token)\n  const node = this.stack[this.stack.length - 1]\n  assert(node.type === 'link')\n  node.url = 'http://' + this.sliceSerialize(token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitLiteralAutolinkEmail(token) {\n  this.config.exit.autolinkEmail.call(this, token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitLiteralAutolink(token) {\n  this.exit(token)\n}\n\n/** @type {FromMarkdownTransform} */\nfunction transformGfmAutolinkLiterals(tree) {\n  findAndReplace(\n    tree,\n    [\n      [/(https?:\\/\\/|www(?=\\.))([-.\\w]+)([^ \\t\\r\\n]*)/gi, findUrl],\n      [/(?<=^|\\s|\\p{P}|\\p{S})([-.\\w+]+)@([-\\w]+(?:\\.[-\\w]+)+)/gu, findEmail]\n    ],\n    {ignore: ['link', 'linkReference']}\n  )\n}\n\n/**\n * @type {ReplaceFunction}\n * @param {string} _\n * @param {string} protocol\n * @param {string} domain\n * @param {string} path\n * @param {RegExpMatchObject} match\n * @returns {Array<PhrasingContent> | Link | false}\n */\n// eslint-disable-next-line max-params\nfunction findUrl(_, protocol, domain, path, match) {\n  let prefix = ''\n\n  // Not an expected previous character.\n  if (!previous(match)) {\n    return false\n  }\n\n  // Treat `www` as part of the domain.\n  if (/^w/i.test(protocol)) {\n    domain = protocol + domain\n    protocol = ''\n    prefix = 'http://'\n  }\n\n  if (!isCorrectDomain(domain)) {\n    return false\n  }\n\n  const parts = splitUrl(domain + path)\n\n  if (!parts[0]) return false\n\n  /** @type {Link} */\n  const result = {\n    type: 'link',\n    title: null,\n    url: prefix + protocol + parts[0],\n    children: [{type: 'text', value: protocol + parts[0]}]\n  }\n\n  if (parts[1]) {\n    return [result, {type: 'text', value: parts[1]}]\n  }\n\n  return result\n}\n\n/**\n * @type {ReplaceFunction}\n * @param {string} _\n * @param {string} atext\n * @param {string} label\n * @param {RegExpMatchObject} match\n * @returns {Link | false}\n */\nfunction findEmail(_, atext, label, match) {\n  if (\n    // Not an expected previous character.\n    !previous(match, true) ||\n    // Label ends in not allowed character.\n    /[-\\d_]$/.test(label)\n  ) {\n    return false\n  }\n\n  return {\n    type: 'link',\n    title: null,\n    url: 'mailto:' + atext + '@' + label,\n    children: [{type: 'text', value: atext + '@' + label}]\n  }\n}\n\n/**\n * @param {string} domain\n * @returns {boolean}\n */\nfunction isCorrectDomain(domain) {\n  const parts = domain.split('.')\n\n  if (\n    parts.length < 2 ||\n    (parts[parts.length - 1] &&\n      (/_/.test(parts[parts.length - 1]) ||\n        !/[a-zA-Z\\d]/.test(parts[parts.length - 1]))) ||\n    (parts[parts.length - 2] &&\n      (/_/.test(parts[parts.length - 2]) ||\n        !/[a-zA-Z\\d]/.test(parts[parts.length - 2])))\n  ) {\n    return false\n  }\n\n  return true\n}\n\n/**\n * @param {string} url\n * @returns {[string, string | undefined]}\n */\nfunction splitUrl(url) {\n  const trailExec = /[!\"&'),.:;<>?\\]}]+$/.exec(url)\n\n  if (!trailExec) {\n    return [url, undefined]\n  }\n\n  url = url.slice(0, trailExec.index)\n\n  let trail = trailExec[0]\n  let closingParenIndex = trail.indexOf(')')\n  const openingParens = ccount(url, '(')\n  let closingParens = ccount(url, ')')\n\n  while (closingParenIndex !== -1 && openingParens > closingParens) {\n    url += trail.slice(0, closingParenIndex + 1)\n    trail = trail.slice(closingParenIndex + 1)\n    closingParenIndex = trail.indexOf(')')\n    closingParens++\n  }\n\n  return [url, trail]\n}\n\n/**\n * @param {RegExpMatchObject} match\n * @param {boolean | null | undefined} [email=false]\n * @returns {boolean}\n */\nfunction previous(match, email) {\n  const code = match.input.charCodeAt(match.index - 1)\n\n  return (\n    (match.index === 0 ||\n      unicodeWhitespace(code) ||\n      unicodePunctuation(code)) &&\n    // If it\u2019s an email, the previous character should not be a slash.\n    (!email || code !== 47)\n  )\n}\n", "/**\n * @import {\n *   CompileContext,\n *   Extension as FromMarkdownExtension,\n *   Handle as FromMarkdownHandle\n * } from 'mdast-util-from-markdown'\n * @import {ToMarkdownOptions} from 'mdast-util-gfm-footnote'\n * @import {\n *   Handle as ToMarkdownHandle,\n *   Map,\n *   Options as ToMarkdownExtension\n * } from 'mdast-util-to-markdown'\n * @import {FootnoteDefinition, FootnoteReference} from 'mdast'\n */\n\nimport {ok as assert} from 'devlop'\nimport {normalizeIdentifier} from 'micromark-util-normalize-identifier'\n\nfootnoteReference.peek = footnoteReferencePeek\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterFootnoteCallString() {\n  this.buffer()\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterFootnoteCall(token) {\n  this.enter({type: 'footnoteReference', identifier: '', label: ''}, token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterFootnoteDefinitionLabelString() {\n  this.buffer()\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterFootnoteDefinition(token) {\n  this.enter(\n    {type: 'footnoteDefinition', identifier: '', label: '', children: []},\n    token\n  )\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitFootnoteCallString(token) {\n  const label = this.resume()\n  const node = this.stack[this.stack.length - 1]\n  assert(node.type === 'footnoteReference')\n  node.identifier = normalizeIdentifier(\n    this.sliceSerialize(token)\n  ).toLowerCase()\n  node.label = label\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitFootnoteCall(token) {\n  this.exit(token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitFootnoteDefinitionLabelString(token) {\n  const label = this.resume()\n  const node = this.stack[this.stack.length - 1]\n  assert(node.type === 'footnoteDefinition')\n  node.identifier = normalizeIdentifier(\n    this.sliceSerialize(token)\n  ).toLowerCase()\n  node.label = label\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitFootnoteDefinition(token) {\n  this.exit(token)\n}\n\n/** @type {ToMarkdownHandle} */\nfunction footnoteReferencePeek() {\n  return '['\n}\n\n/**\n * @type {ToMarkdownHandle}\n * @param {FootnoteReference} node\n */\nfunction footnoteReference(node, _, state, info) {\n  const tracker = state.createTracker(info)\n  let value = tracker.move('[^')\n  const exit = state.enter('footnoteReference')\n  const subexit = state.enter('reference')\n  value += tracker.move(\n    state.safe(state.associationId(node), {after: ']', before: value})\n  )\n  subexit()\n  exit()\n  value += tracker.move(']')\n  return value\n}\n\n/**\n * Create an extension for `mdast-util-from-markdown` to enable GFM footnotes\n * in markdown.\n *\n * @returns {FromMarkdownExtension}\n *   Extension for `mdast-util-from-markdown`.\n */\nexport function gfmFootnoteFromMarkdown() {\n  return {\n    enter: {\n      gfmFootnoteCallString: enterFootnoteCallString,\n      gfmFootnoteCall: enterFootnoteCall,\n      gfmFootnoteDefinitionLabelString: enterFootnoteDefinitionLabelString,\n      gfmFootnoteDefinition: enterFootnoteDefinition\n    },\n    exit: {\n      gfmFootnoteCallString: exitFootnoteCallString,\n      gfmFootnoteCall: exitFootnoteCall,\n      gfmFootnoteDefinitionLabelString: exitFootnoteDefinitionLabelString,\n      gfmFootnoteDefinition: exitFootnoteDefinition\n    }\n  }\n}\n\n/**\n * Create an extension for `mdast-util-to-markdown` to enable GFM footnotes\n * in markdown.\n *\n * @param {ToMarkdownOptions | null | undefined} [options]\n *   Configuration (optional).\n * @returns {ToMarkdownExtension}\n *   Extension for `mdast-util-to-markdown`.\n */\nexport function gfmFootnoteToMarkdown(options) {\n  // To do: next major: change default.\n  let firstLineBlank = false\n\n  if (options && options.firstLineBlank) {\n    firstLineBlank = true\n  }\n\n  return {\n    handlers: {footnoteDefinition, footnoteReference},\n    // This is on by default already.\n    unsafe: [{character: '[', inConstruct: ['label', 'phrasing', 'reference']}]\n  }\n\n  /**\n   * @type {ToMarkdownHandle}\n   * @param {FootnoteDefinition} node\n   */\n  function footnoteDefinition(node, _, state, info) {\n    const tracker = state.createTracker(info)\n    let value = tracker.move('[^')\n    const exit = state.enter('footnoteDefinition')\n    const subexit = state.enter('label')\n    value += tracker.move(\n      state.safe(state.associationId(node), {before: value, after: ']'})\n    )\n    subexit()\n\n    value += tracker.move(']:')\n\n    if (node.children && node.children.length > 0) {\n      tracker.shift(4)\n\n      value += tracker.move(\n        (firstLineBlank ? '\\n' : ' ') +\n          state.indentLines(\n            state.containerFlow(node, tracker.current()),\n            firstLineBlank ? mapAll : mapExceptFirst\n          )\n      )\n    }\n\n    exit()\n\n    return value\n  }\n}\n\n/** @type {Map} */\nfunction mapExceptFirst(line, index, blank) {\n  return index === 0 ? line : mapAll(line, index, blank)\n}\n\n/** @type {Map} */\nfunction mapAll(line, index, blank) {\n  return (blank ? '' : '    ') + line\n}\n", "/**\n * @typedef {import('mdast').Delete} Delete\n *\n * @typedef {import('mdast-util-from-markdown').CompileContext} CompileContext\n * @typedef {import('mdast-util-from-markdown').Extension} FromMarkdownExtension\n * @typedef {import('mdast-util-from-markdown').Handle} FromMarkdownHandle\n *\n * @typedef {import('mdast-util-to-markdown').ConstructName} ConstructName\n * @typedef {import('mdast-util-to-markdown').Handle} ToMarkdownHandle\n * @typedef {import('mdast-util-to-markdown').Options} ToMarkdownExtension\n */\n\n/**\n * List of constructs that occur in phrasing (paragraphs, headings), but cannot\n * contain strikethrough.\n * So they sort of cancel each other out.\n * Note: could use a better name.\n *\n * Note: keep in sync with: <https://github.com/syntax-tree/mdast-util-to-markdown/blob/8ce8dbf/lib/unsafe.js#L14>\n *\n * @type {Array<ConstructName>}\n */\nconst constructsWithoutStrikethrough = [\n  'autolink',\n  'destinationLiteral',\n  'destinationRaw',\n  'reference',\n  'titleQuote',\n  'titleApostrophe'\n]\n\nhandleDelete.peek = peekDelete\n\n/**\n * Create an extension for `mdast-util-from-markdown` to enable GFM\n * strikethrough in markdown.\n *\n * @returns {FromMarkdownExtension}\n *   Extension for `mdast-util-from-markdown` to enable GFM strikethrough.\n */\nexport function gfmStrikethroughFromMarkdown() {\n  return {\n    canContainEols: ['delete'],\n    enter: {strikethrough: enterStrikethrough},\n    exit: {strikethrough: exitStrikethrough}\n  }\n}\n\n/**\n * Create an extension for `mdast-util-to-markdown` to enable GFM\n * strikethrough in markdown.\n *\n * @returns {ToMarkdownExtension}\n *   Extension for `mdast-util-to-markdown` to enable GFM strikethrough.\n */\nexport function gfmStrikethroughToMarkdown() {\n  return {\n    unsafe: [\n      {\n        character: '~',\n        inConstruct: 'phrasing',\n        notInConstruct: constructsWithoutStrikethrough\n      }\n    ],\n    handlers: {delete: handleDelete}\n  }\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterStrikethrough(token) {\n  this.enter({type: 'delete', children: []}, token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitStrikethrough(token) {\n  this.exit(token)\n}\n\n/**\n * @type {ToMarkdownHandle}\n * @param {Delete} node\n */\nfunction handleDelete(node, _, state, info) {\n  const tracker = state.createTracker(info)\n  const exit = state.enter('strikethrough')\n  let value = tracker.move('~~')\n  value += state.containerPhrasing(node, {\n    ...tracker.current(),\n    before: value,\n    after: '~'\n  })\n  value += tracker.move('~~')\n  exit()\n  return value\n}\n\n/** @type {ToMarkdownHandle} */\nfunction peekDelete() {\n  return '~'\n}\n", "/**\n * @typedef Options\n *   Configuration (optional).\n * @property {string|null|Array<string|null|undefined>} [align]\n *   One style for all columns, or styles for their respective columns.\n *   Each style is either `'l'` (left), `'r'` (right), or `'c'` (center).\n *   Other values are treated as `''`, which doesn\u2019t place the colon in the\n *   alignment row but does align left.\n *   *Only the lowercased first character is used, so `Right` is fine.*\n * @property {boolean} [padding=true]\n *   Whether to add a space of padding between delimiters and cells.\n *\n *   When `true`, there is padding:\n *\n *   ```markdown\n *   | Alpha | B     |\n *   | ----- | ----- |\n *   | C     | Delta |\n *   ```\n *\n *   When `false`, there is no padding:\n *\n *   ```markdown\n *   |Alpha|B    |\n *   |-----|-----|\n *   |C    |Delta|\n *   ```\n * @property {boolean} [delimiterStart=true]\n *   Whether to begin each row with the delimiter.\n *\n *   > \uD83D\uDC49 **Note**: please don\u2019t use this: it could create fragile structures\n *   > that aren\u2019t understandable to some markdown parsers.\n *\n *   When `true`, there are starting delimiters:\n *\n *   ```markdown\n *   | Alpha | B     |\n *   | ----- | ----- |\n *   | C     | Delta |\n *   ```\n *\n *   When `false`, there are no starting delimiters:\n *\n *   ```markdown\n *   Alpha | B     |\n *   ----- | ----- |\n *   C     | Delta |\n *   ```\n * @property {boolean} [delimiterEnd=true]\n *   Whether to end each row with the delimiter.\n *\n *   > \uD83D\uDC49 **Note**: please don\u2019t use this: it could create fragile structures\n *   > that aren\u2019t understandable to some markdown parsers.\n *\n *   When `true`, there are ending delimiters:\n *\n *   ```markdown\n *   | Alpha | B     |\n *   | ----- | ----- |\n *   | C     | Delta |\n *   ```\n *\n *   When `false`, there are no ending delimiters:\n *\n *   ```markdown\n *   | Alpha | B\n *   | ----- | -----\n *   | C     | Delta\n *   ```\n * @property {boolean} [alignDelimiters=true]\n *   Whether to align the delimiters.\n *   By default, they are aligned:\n *\n *   ```markdown\n *   | Alpha | B     |\n *   | ----- | ----- |\n *   | C     | Delta |\n *   ```\n *\n *   Pass `false` to make them staggered:\n *\n *   ```markdown\n *   | Alpha | B |\n *   | - | - |\n *   | C | Delta |\n *   ```\n * @property {(value: string) => number} [stringLength]\n *   Function to detect the length of table cell content.\n *   This is used when aligning the delimiters (`|`) between table cells.\n *   Full-width characters and emoji mess up delimiter alignment when viewing\n *   the markdown source.\n *   To fix this, you can pass this function, which receives the cell content\n *   and returns its \u201Cvisible\u201D size.\n *   Note that what is and isn\u2019t visible depends on where the text is displayed.\n *\n *   Without such a function, the following:\n *\n *   ```js\n *   markdownTable([\n *     ['Alpha', 'Bravo'],\n *     ['\u4E2D\u6587', 'Charlie'],\n *     ['\uD83D\uDC69\u200D\u2764\uFE0F\u200D\uD83D\uDC69', 'Delta']\n *   ])\n *   ```\n *\n *   Yields:\n *\n *   ```markdown\n *   | Alpha | Bravo |\n *   | - | - |\n *   | \u4E2D\u6587 | Charlie |\n *   | \uD83D\uDC69\u200D\u2764\uFE0F\u200D\uD83D\uDC69 | Delta |\n *   ```\n *\n *   With [`string-width`](https://github.com/sindresorhus/string-width):\n *\n *   ```js\n *   import stringWidth from 'string-width'\n *\n *   markdownTable(\n *     [\n *       ['Alpha', 'Bravo'],\n *       ['\u4E2D\u6587', 'Charlie'],\n *       ['\uD83D\uDC69\u200D\u2764\uFE0F\u200D\uD83D\uDC69', 'Delta']\n *     ],\n *     {stringLength: stringWidth}\n *   )\n *   ```\n *\n *   Yields:\n *\n *   ```markdown\n *   | Alpha | Bravo   |\n *   | ----- | ------- |\n *   | \u4E2D\u6587  | Charlie |\n *   | \uD83D\uDC69\u200D\u2764\uFE0F\u200D\uD83D\uDC69    | Delta   |\n *   ```\n */\n\n/**\n * @typedef {Options} MarkdownTableOptions\n * @todo\n *   Remove next major.\n */\n\n/**\n * Generate a markdown ([GFM](https://docs.github.com/en/github/writing-on-github/working-with-advanced-formatting/organizing-information-with-tables)) table..\n *\n * @param {Array<Array<string|null|undefined>>} table\n *   Table data (matrix of strings).\n * @param {Options} [options]\n *   Configuration (optional).\n * @returns {string}\n */\nexport function markdownTable(table, options = {}) {\n  const align = (options.align || []).concat()\n  const stringLength = options.stringLength || defaultStringLength\n  /** @type {Array<number>} Character codes as symbols for alignment per column. */\n  const alignments = []\n  /** @type {Array<Array<string>>} Cells per row. */\n  const cellMatrix = []\n  /** @type {Array<Array<number>>} Sizes of each cell per row. */\n  const sizeMatrix = []\n  /** @type {Array<number>} */\n  const longestCellByColumn = []\n  let mostCellsPerRow = 0\n  let rowIndex = -1\n\n  // This is a superfluous loop if we don\u2019t align delimiters, but otherwise we\u2019d\n  // do superfluous work when aligning, so optimize for aligning.\n  while (++rowIndex < table.length) {\n    /** @type {Array<string>} */\n    const row = []\n    /** @type {Array<number>} */\n    const sizes = []\n    let columnIndex = -1\n\n    if (table[rowIndex].length > mostCellsPerRow) {\n      mostCellsPerRow = table[rowIndex].length\n    }\n\n    while (++columnIndex < table[rowIndex].length) {\n      const cell = serialize(table[rowIndex][columnIndex])\n\n      if (options.alignDelimiters !== false) {\n        const size = stringLength(cell)\n        sizes[columnIndex] = size\n\n        if (\n          longestCellByColumn[columnIndex] === undefined ||\n          size > longestCellByColumn[columnIndex]\n        ) {\n          longestCellByColumn[columnIndex] = size\n        }\n      }\n\n      row.push(cell)\n    }\n\n    cellMatrix[rowIndex] = row\n    sizeMatrix[rowIndex] = sizes\n  }\n\n  // Figure out which alignments to use.\n  let columnIndex = -1\n\n  if (typeof align === 'object' && 'length' in align) {\n    while (++columnIndex < mostCellsPerRow) {\n      alignments[columnIndex] = toAlignment(align[columnIndex])\n    }\n  } else {\n    const code = toAlignment(align)\n\n    while (++columnIndex < mostCellsPerRow) {\n      alignments[columnIndex] = code\n    }\n  }\n\n  // Inject the alignment row.\n  columnIndex = -1\n  /** @type {Array<string>} */\n  const row = []\n  /** @type {Array<number>} */\n  const sizes = []\n\n  while (++columnIndex < mostCellsPerRow) {\n    const code = alignments[columnIndex]\n    let before = ''\n    let after = ''\n\n    if (code === 99 /* `c` */) {\n      before = ':'\n      after = ':'\n    } else if (code === 108 /* `l` */) {\n      before = ':'\n    } else if (code === 114 /* `r` */) {\n      after = ':'\n    }\n\n    // There *must* be at least one hyphen-minus in each alignment cell.\n    let size =\n      options.alignDelimiters === false\n        ? 1\n        : Math.max(\n            1,\n            longestCellByColumn[columnIndex] - before.length - after.length\n          )\n\n    const cell = before + '-'.repeat(size) + after\n\n    if (options.alignDelimiters !== false) {\n      size = before.length + size + after.length\n\n      if (size > longestCellByColumn[columnIndex]) {\n        longestCellByColumn[columnIndex] = size\n      }\n\n      sizes[columnIndex] = size\n    }\n\n    row[columnIndex] = cell\n  }\n\n  // Inject the alignment row.\n  cellMatrix.splice(1, 0, row)\n  sizeMatrix.splice(1, 0, sizes)\n\n  rowIndex = -1\n  /** @type {Array<string>} */\n  const lines = []\n\n  while (++rowIndex < cellMatrix.length) {\n    const row = cellMatrix[rowIndex]\n    const sizes = sizeMatrix[rowIndex]\n    columnIndex = -1\n    /** @type {Array<string>} */\n    const line = []\n\n    while (++columnIndex < mostCellsPerRow) {\n      const cell = row[columnIndex] || ''\n      let before = ''\n      let after = ''\n\n      if (options.alignDelimiters !== false) {\n        const size =\n          longestCellByColumn[columnIndex] - (sizes[columnIndex] || 0)\n        const code = alignments[columnIndex]\n\n        if (code === 114 /* `r` */) {\n          before = ' '.repeat(size)\n        } else if (code === 99 /* `c` */) {\n          if (size % 2) {\n            before = ' '.repeat(size / 2 + 0.5)\n            after = ' '.repeat(size / 2 - 0.5)\n          } else {\n            before = ' '.repeat(size / 2)\n            after = before\n          }\n        } else {\n          after = ' '.repeat(size)\n        }\n      }\n\n      if (options.delimiterStart !== false && !columnIndex) {\n        line.push('|')\n      }\n\n      if (\n        options.padding !== false &&\n        // Don\u2019t add the opening space if we\u2019re not aligning and the cell is\n        // empty: there will be a closing space.\n        !(options.alignDelimiters === false && cell === '') &&\n        (options.delimiterStart !== false || columnIndex)\n      ) {\n        line.push(' ')\n      }\n\n      if (options.alignDelimiters !== false) {\n        line.push(before)\n      }\n\n      line.push(cell)\n\n      if (options.alignDelimiters !== false) {\n        line.push(after)\n      }\n\n      if (options.padding !== false) {\n        line.push(' ')\n      }\n\n      if (\n        options.delimiterEnd !== false ||\n        columnIndex !== mostCellsPerRow - 1\n      ) {\n        line.push('|')\n      }\n    }\n\n    lines.push(\n      options.delimiterEnd === false\n        ? line.join('').replace(/ +$/, '')\n        : line.join('')\n    )\n  }\n\n  return lines.join('\\n')\n}\n\n/**\n * @param {string|null|undefined} [value]\n * @returns {string}\n */\nfunction serialize(value) {\n  return value === null || value === undefined ? '' : String(value)\n}\n\n/**\n * @param {string} value\n * @returns {number}\n */\nfunction defaultStringLength(value) {\n  return value.length\n}\n\n/**\n * @param {string|null|undefined} value\n * @returns {number}\n */\nfunction toAlignment(value) {\n  const code = typeof value === 'string' ? value.codePointAt(0) : 0\n\n  return code === 67 /* `C` */ || code === 99 /* `c` */\n    ? 99 /* `c` */\n    : code === 76 /* `L` */ || code === 108 /* `l` */\n    ? 108 /* `l` */\n    : code === 82 /* `R` */ || code === 114 /* `r` */\n    ? 114 /* `r` */\n    : 0\n}\n", "/**\n * @import {Blockquote, Parents} from 'mdast'\n * @import {Info, Map, State} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {Blockquote} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function blockquote(node, _, state, info) {\n  const exit = state.enter('blockquote')\n  const tracker = state.createTracker(info)\n  tracker.move('> ')\n  tracker.shift(2)\n  const value = state.indentLines(\n    state.containerFlow(node, tracker.current()),\n    map\n  )\n  exit()\n  return value\n}\n\n/** @type {Map} */\nfunction map(line, _, blank) {\n  return '>' + (blank ? '' : ' ') + line\n}\n", "/**\n * @import {ConstructName, Unsafe} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {Array<ConstructName>} stack\n * @param {Unsafe} pattern\n * @returns {boolean}\n */\nexport function patternInScope(stack, pattern) {\n  return (\n    listInScope(stack, pattern.inConstruct, true) &&\n    !listInScope(stack, pattern.notInConstruct, false)\n  )\n}\n\n/**\n * @param {Array<ConstructName>} stack\n * @param {Unsafe['inConstruct']} list\n * @param {boolean} none\n * @returns {boolean}\n */\nfunction listInScope(stack, list, none) {\n  if (typeof list === 'string') {\n    list = [list]\n  }\n\n  if (!list || list.length === 0) {\n    return none\n  }\n\n  let index = -1\n\n  while (++index < list.length) {\n    if (stack.includes(list[index])) {\n      return true\n    }\n  }\n\n  return false\n}\n", "/**\n * @import {Break, Parents} from 'mdast'\n * @import {Info, State} from 'mdast-util-to-markdown'\n */\n\nimport {patternInScope} from '../util/pattern-in-scope.js'\n\n/**\n * @param {Break} _\n * @param {Parents | undefined} _1\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function hardBreak(_, _1, state, info) {\n  let index = -1\n\n  while (++index < state.unsafe.length) {\n    // If we can\u2019t put eols in this construct (setext headings, tables), use a\n    // space instead.\n    if (\n      state.unsafe[index].character === '\\n' &&\n      patternInScope(state.stack, state.unsafe[index])\n    ) {\n      return /[ \\t]/.test(info.before) ? '' : ' '\n    }\n  }\n\n  return '\\\\\\n'\n}\n", "/**\n * Get the count of the longest repeating streak of `character` in `value`.\n *\n * @param {string} value\n *   Content to search in.\n * @param {string} character\n *   Single character to look for.\n * @returns {number}\n *   Count of most frequent adjacent `character`s in `value`.\n */\nexport function longestStreak(value, character) {\n  const source = String(value)\n  let index = source.indexOf(character)\n  let expected = index\n  let count = 0\n  let max = 0\n\n  if (typeof character !== 'string' || character.length !== 1) {\n    throw new Error('Expected character')\n  }\n\n  while (index !== -1) {\n    if (index === expected) {\n      if (++count > max) {\n        max = count\n      }\n    } else {\n      count = 1\n    }\n\n    expected = index + 1\n    index = source.indexOf(character, expected)\n  }\n\n  return max\n}\n", "/**\n * @import {State} from 'mdast-util-to-markdown'\n * @import {Code} from 'mdast'\n */\n\n/**\n * @param {Code} node\n * @param {State} state\n * @returns {boolean}\n */\nexport function formatCodeAsIndented(node, state) {\n  return Boolean(\n    state.options.fences === false &&\n      node.value &&\n      // If there\u2019s no info\u2026\n      !node.lang &&\n      // And there\u2019s a non-whitespace character\u2026\n      /[^ \\r\\n]/.test(node.value) &&\n      // And the value doesn\u2019t start or end in a blank\u2026\n      !/^[\\t ]*(?:[\\r\\n]|$)|(?:^|[\\r\\n])[\\t ]*$/.test(node.value)\n  )\n}\n", "/**\n * @import {Options, State} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['fence'], null | undefined>}\n */\nexport function checkFence(state) {\n  const marker = state.options.fence || '`'\n\n  if (marker !== '`' && marker !== '~') {\n    throw new Error(\n      'Cannot serialize code with `' +\n        marker +\n        '` for `options.fence`, expected `` ` `` or `~`'\n    )\n  }\n\n  return marker\n}\n", "/**\n * @import {Info, Map, State} from 'mdast-util-to-markdown'\n * @import {Code, Parents} from 'mdast'\n */\n\nimport {longestStreak} from 'longest-streak'\nimport {formatCodeAsIndented} from '../util/format-code-as-indented.js'\nimport {checkFence} from '../util/check-fence.js'\n\n/**\n * @param {Code} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function code(node, _, state, info) {\n  const marker = checkFence(state)\n  const raw = node.value || ''\n  const suffix = marker === '`' ? 'GraveAccent' : 'Tilde'\n\n  if (formatCodeAsIndented(node, state)) {\n    const exit = state.enter('codeIndented')\n    const value = state.indentLines(raw, map)\n    exit()\n    return value\n  }\n\n  const tracker = state.createTracker(info)\n  const sequence = marker.repeat(Math.max(longestStreak(raw, marker) + 1, 3))\n  const exit = state.enter('codeFenced')\n  let value = tracker.move(sequence)\n\n  if (node.lang) {\n    const subexit = state.enter(`codeFencedLang${suffix}`)\n    value += tracker.move(\n      state.safe(node.lang, {\n        before: value,\n        after: ' ',\n        encode: ['`'],\n        ...tracker.current()\n      })\n    )\n    subexit()\n  }\n\n  if (node.lang && node.meta) {\n    const subexit = state.enter(`codeFencedMeta${suffix}`)\n    value += tracker.move(' ')\n    value += tracker.move(\n      state.safe(node.meta, {\n        before: value,\n        after: '\\n',\n        encode: ['`'],\n        ...tracker.current()\n      })\n    )\n    subexit()\n  }\n\n  value += tracker.move('\\n')\n\n  if (raw) {\n    value += tracker.move(raw + '\\n')\n  }\n\n  value += tracker.move(sequence)\n  exit()\n  return value\n}\n\n/** @type {Map} */\nfunction map(line, _, blank) {\n  return (blank ? '' : '    ') + line\n}\n", "/**\n * @import {Options, State} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['quote'], null | undefined>}\n */\nexport function checkQuote(state) {\n  const marker = state.options.quote || '\"'\n\n  if (marker !== '\"' && marker !== \"'\") {\n    throw new Error(\n      'Cannot serialize title with `' +\n        marker +\n        '` for `options.quote`, expected `\"`, or `\\'`'\n    )\n  }\n\n  return marker\n}\n", "/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {Definition, Parents} from 'mdast'\n */\n\nimport {checkQuote} from '../util/check-quote.js'\n\n/**\n * @param {Definition} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function definition(node, _, state, info) {\n  const quote = checkQuote(state)\n  const suffix = quote === '\"' ? 'Quote' : 'Apostrophe'\n  const exit = state.enter('definition')\n  let subexit = state.enter('label')\n  const tracker = state.createTracker(info)\n  let value = tracker.move('[')\n  value += tracker.move(\n    state.safe(state.associationId(node), {\n      before: value,\n      after: ']',\n      ...tracker.current()\n    })\n  )\n  value += tracker.move(']: ')\n\n  subexit()\n\n  if (\n    // If there\u2019s no url, or\u2026\n    !node.url ||\n    // If there are control characters or whitespace.\n    /[\\0- \\u007F]/.test(node.url)\n  ) {\n    subexit = state.enter('destinationLiteral')\n    value += tracker.move('<')\n    value += tracker.move(\n      state.safe(node.url, {before: value, after: '>', ...tracker.current()})\n    )\n    value += tracker.move('>')\n  } else {\n    // No whitespace, raw is prettier.\n    subexit = state.enter('destinationRaw')\n    value += tracker.move(\n      state.safe(node.url, {\n        before: value,\n        after: node.title ? ' ' : '\\n',\n        ...tracker.current()\n      })\n    )\n  }\n\n  subexit()\n\n  if (node.title) {\n    subexit = state.enter(`title${suffix}`)\n    value += tracker.move(' ' + quote)\n    value += tracker.move(\n      state.safe(node.title, {\n        before: value,\n        after: quote,\n        ...tracker.current()\n      })\n    )\n    value += tracker.move(quote)\n    subexit()\n  }\n\n  exit()\n\n  return value\n}\n", "/**\n * @import {Options, State} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['emphasis'], null | undefined>}\n */\nexport function checkEmphasis(state) {\n  const marker = state.options.emphasis || '*'\n\n  if (marker !== '*' && marker !== '_') {\n    throw new Error(\n      'Cannot serialize emphasis with `' +\n        marker +\n        '` for `options.emphasis`, expected `*`, or `_`'\n    )\n  }\n\n  return marker\n}\n", "/**\n * Encode a code point as a character reference.\n *\n * @param {number} code\n *   Code point to encode.\n * @returns {string}\n *   Encoded character reference.\n */\nexport function encodeCharacterReference(code) {\n  return '&#x' + code.toString(16).toUpperCase() + ';'\n}\n", "/**\n * @import {EncodeSides} from '../types.js'\n */\n\nimport {classifyCharacter} from 'micromark-util-classify-character'\n\n/**\n * Check whether to encode (as a character reference) the characters\n * surrounding an attention run.\n *\n * Which characters are around an attention run influence whether it works or\n * not.\n *\n * See <https://github.com/orgs/syntax-tree/discussions/60> for more info.\n * See this markdown in a particular renderer to see what works:\n *\n * ```markdown\n * |                         | A (letter inside) | B (punctuation inside) | C (whitespace inside) | D (nothing inside) |\n * | ----------------------- | ----------------- | ---------------------- | --------------------- | ------------------ |\n * | 1 (letter outside)      | x*y*z             | x*.*z                  | x* *z                 | x**z               |\n * | 2 (punctuation outside) | .*y*.             | .*.*.                  | .* *.                 | .**.               |\n * | 3 (whitespace outside)  | x *y* z           | x *.* z                | x * * z               | x ** z             |\n * | 4 (nothing outside)     | *x*               | *.*                    | * *                   | **                 |\n * ```\n *\n * @param {number} outside\n *   Code point on the outer side of the run.\n * @param {number} inside\n *   Code point on the inner side of the run.\n * @param {'*' | '_'} marker\n *   Marker of the run.\n *   Underscores are handled more strictly (they form less often) than\n *   asterisks.\n * @returns {EncodeSides}\n *   Whether to encode characters.\n */\n// Important: punctuation must never be encoded.\n// Punctuation is solely used by markdown constructs.\n// And by encoding itself.\n// Encoding them will break constructs or double encode things.\nexport function encodeInfo(outside, inside, marker) {\n  const outsideKind = classifyCharacter(outside)\n  const insideKind = classifyCharacter(inside)\n\n  // Letter outside:\n  if (outsideKind === undefined) {\n    return insideKind === undefined\n      ? // Letter inside:\n        // we have to encode *both* letters for `_` as it is looser.\n        // it already forms for `*` (and GFMs `~`).\n        marker === '_'\n        ? {inside: true, outside: true}\n        : {inside: false, outside: false}\n      : insideKind === 1\n        ? // Whitespace inside: encode both (letter, whitespace).\n          {inside: true, outside: true}\n        : // Punctuation inside: encode outer (letter)\n          {inside: false, outside: true}\n  }\n\n  // Whitespace outside:\n  if (outsideKind === 1) {\n    return insideKind === undefined\n      ? // Letter inside: already forms.\n        {inside: false, outside: false}\n      : insideKind === 1\n        ? // Whitespace inside: encode both (whitespace).\n          {inside: true, outside: true}\n        : // Punctuation inside: already forms.\n          {inside: false, outside: false}\n  }\n\n  // Punctuation outside:\n  return insideKind === undefined\n    ? // Letter inside: already forms.\n      {inside: false, outside: false}\n    : insideKind === 1\n      ? // Whitespace inside: encode inner (whitespace).\n        {inside: true, outside: false}\n      : // Punctuation inside: already forms.\n        {inside: false, outside: false}\n}\n", "/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {Emphasis, Parents} from 'mdast'\n */\n\nimport {checkEmphasis} from '../util/check-emphasis.js'\nimport {encodeCharacterReference} from '../util/encode-character-reference.js'\nimport {encodeInfo} from '../util/encode-info.js'\n\nemphasis.peek = emphasisPeek\n\n/**\n * @param {Emphasis} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function emphasis(node, _, state, info) {\n  const marker = checkEmphasis(state)\n  const exit = state.enter('emphasis')\n  const tracker = state.createTracker(info)\n  const before = tracker.move(marker)\n\n  let between = tracker.move(\n    state.containerPhrasing(node, {\n      after: marker,\n      before,\n      ...tracker.current()\n    })\n  )\n  const betweenHead = between.charCodeAt(0)\n  const open = encodeInfo(\n    info.before.charCodeAt(info.before.length - 1),\n    betweenHead,\n    marker\n  )\n\n  if (open.inside) {\n    between = encodeCharacterReference(betweenHead) + between.slice(1)\n  }\n\n  const betweenTail = between.charCodeAt(between.length - 1)\n  const close = encodeInfo(info.after.charCodeAt(0), betweenTail, marker)\n\n  if (close.inside) {\n    between = between.slice(0, -1) + encodeCharacterReference(betweenTail)\n  }\n\n  const after = tracker.move(marker)\n\n  exit()\n\n  state.attentionEncodeSurroundingInfo = {\n    after: close.outside,\n    before: open.outside\n  }\n  return before + between + after\n}\n\n/**\n * @param {Emphasis} _\n * @param {Parents | undefined} _1\n * @param {State} state\n * @returns {string}\n */\nfunction emphasisPeek(_, _1, state) {\n  return state.options.emphasis || '*'\n}\n", "/**\n * @import {State} from 'mdast-util-to-markdown'\n * @import {Heading} from 'mdast'\n */\n\nimport {EXIT, visit} from 'unist-util-visit'\nimport {toString} from 'mdast-util-to-string'\n\n/**\n * @param {Heading} node\n * @param {State} state\n * @returns {boolean}\n */\nexport function formatHeadingAsSetext(node, state) {\n  let literalWithBreak = false\n\n  // Look for literals with a line break.\n  // Note that this also\n  visit(node, function (node) {\n    if (\n      ('value' in node && /\\r?\\n|\\r/.test(node.value)) ||\n      node.type === 'break'\n    ) {\n      literalWithBreak = true\n      return EXIT\n    }\n  })\n\n  return Boolean(\n    (!node.depth || node.depth < 3) &&\n      toString(node) &&\n      (state.options.setext || literalWithBreak)\n  )\n}\n", "/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {Heading, Parents} from 'mdast'\n */\n\nimport {encodeCharacterReference} from '../util/encode-character-reference.js'\nimport {formatHeadingAsSetext} from '../util/format-heading-as-setext.js'\n\n/**\n * @param {Heading} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function heading(node, _, state, info) {\n  const rank = Math.max(Math.min(6, node.depth || 1), 1)\n  const tracker = state.createTracker(info)\n\n  if (formatHeadingAsSetext(node, state)) {\n    const exit = state.enter('headingSetext')\n    const subexit = state.enter('phrasing')\n    const value = state.containerPhrasing(node, {\n      ...tracker.current(),\n      before: '\\n',\n      after: '\\n'\n    })\n    subexit()\n    exit()\n\n    return (\n      value +\n      '\\n' +\n      (rank === 1 ? '=' : '-').repeat(\n        // The whole size\u2026\n        value.length -\n          // Minus the position of the character after the last EOL (or\n          // 0 if there is none)\u2026\n          (Math.max(value.lastIndexOf('\\r'), value.lastIndexOf('\\n')) + 1)\n      )\n    )\n  }\n\n  const sequence = '#'.repeat(rank)\n  const exit = state.enter('headingAtx')\n  const subexit = state.enter('phrasing')\n\n  // Note: for proper tracking, we should reset the output positions when there\n  // is no content returned, because then the space is not output.\n  // Practically, in that case, there is no content, so it doesn\u2019t matter that\n  // we\u2019ve tracked one too many characters.\n  tracker.move(sequence + ' ')\n\n  let value = state.containerPhrasing(node, {\n    before: '# ',\n    after: '\\n',\n    ...tracker.current()\n  })\n\n  if (/^[\\t ]/.test(value)) {\n    // To do: what effect has the character reference on tracking?\n    value = encodeCharacterReference(value.charCodeAt(0)) + value.slice(1)\n  }\n\n  value = value ? sequence + ' ' + value : sequence\n\n  if (state.options.closeAtx) {\n    value += ' ' + sequence\n  }\n\n  subexit()\n  exit()\n\n  return value\n}\n", "/**\n * @import {Html} from 'mdast'\n */\n\nhtml.peek = htmlPeek\n\n/**\n * @param {Html} node\n * @returns {string}\n */\nexport function html(node) {\n  return node.value || ''\n}\n\n/**\n * @returns {string}\n */\nfunction htmlPeek() {\n  return '<'\n}\n", "/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {Image, Parents} from 'mdast'\n */\n\nimport {checkQuote} from '../util/check-quote.js'\n\nimage.peek = imagePeek\n\n/**\n * @param {Image} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function image(node, _, state, info) {\n  const quote = checkQuote(state)\n  const suffix = quote === '\"' ? 'Quote' : 'Apostrophe'\n  const exit = state.enter('image')\n  let subexit = state.enter('label')\n  const tracker = state.createTracker(info)\n  let value = tracker.move('![')\n  value += tracker.move(\n    state.safe(node.alt, {before: value, after: ']', ...tracker.current()})\n  )\n  value += tracker.move('](')\n\n  subexit()\n\n  if (\n    // If there\u2019s no url but there is a title\u2026\n    (!node.url && node.title) ||\n    // If there are control characters or whitespace.\n    /[\\0- \\u007F]/.test(node.url)\n  ) {\n    subexit = state.enter('destinationLiteral')\n    value += tracker.move('<')\n    value += tracker.move(\n      state.safe(node.url, {before: value, after: '>', ...tracker.current()})\n    )\n    value += tracker.move('>')\n  } else {\n    // No whitespace, raw is prettier.\n    subexit = state.enter('destinationRaw')\n    value += tracker.move(\n      state.safe(node.url, {\n        before: value,\n        after: node.title ? ' ' : ')',\n        ...tracker.current()\n      })\n    )\n  }\n\n  subexit()\n\n  if (node.title) {\n    subexit = state.enter(`title${suffix}`)\n    value += tracker.move(' ' + quote)\n    value += tracker.move(\n      state.safe(node.title, {\n        before: value,\n        after: quote,\n        ...tracker.current()\n      })\n    )\n    value += tracker.move(quote)\n    subexit()\n  }\n\n  value += tracker.move(')')\n  exit()\n\n  return value\n}\n\n/**\n * @returns {string}\n */\nfunction imagePeek() {\n  return '!'\n}\n", "/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {ImageReference, Parents} from 'mdast'\n */\n\nimageReference.peek = imageReferencePeek\n\n/**\n * @param {ImageReference} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function imageReference(node, _, state, info) {\n  const type = node.referenceType\n  const exit = state.enter('imageReference')\n  let subexit = state.enter('label')\n  const tracker = state.createTracker(info)\n  let value = tracker.move('![')\n  const alt = state.safe(node.alt, {\n    before: value,\n    after: ']',\n    ...tracker.current()\n  })\n  value += tracker.move(alt + '][')\n\n  subexit()\n  // Hide the fact that we\u2019re in phrasing, because escapes don\u2019t work.\n  const stack = state.stack\n  state.stack = []\n  subexit = state.enter('reference')\n  // Note: for proper tracking, we should reset the output positions when we end\n  // up making a `shortcut` reference, because then there is no brace output.\n  // Practically, in that case, there is no content, so it doesn\u2019t matter that\n  // we\u2019ve tracked one too many characters.\n  const reference = state.safe(state.associationId(node), {\n    before: value,\n    after: ']',\n    ...tracker.current()\n  })\n  subexit()\n  state.stack = stack\n  exit()\n\n  if (type === 'full' || !alt || alt !== reference) {\n    value += tracker.move(reference + ']')\n  } else if (type === 'shortcut') {\n    // Remove the unwanted `[`.\n    value = value.slice(0, -1)\n  } else {\n    value += tracker.move(']')\n  }\n\n  return value\n}\n\n/**\n * @returns {string}\n */\nfunction imageReferencePeek() {\n  return '!'\n}\n", "/**\n * @import {State} from 'mdast-util-to-markdown'\n * @import {InlineCode, Parents} from 'mdast'\n */\n\ninlineCode.peek = inlineCodePeek\n\n/**\n * @param {InlineCode} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @returns {string}\n */\nexport function inlineCode(node, _, state) {\n  let value = node.value || ''\n  let sequence = '`'\n  let index = -1\n\n  // If there is a single grave accent on its own in the code, use a fence of\n  // two.\n  // If there are two in a row, use one.\n  while (new RegExp('(^|[^`])' + sequence + '([^`]|$)').test(value)) {\n    sequence += '`'\n  }\n\n  // If this is not just spaces or eols (tabs don\u2019t count), and either the\n  // first or last character are a space, eol, or tick, then pad with spaces.\n  if (\n    /[^ \\r\\n]/.test(value) &&\n    ((/^[ \\r\\n]/.test(value) && /[ \\r\\n]$/.test(value)) || /^`|`$/.test(value))\n  ) {\n    value = ' ' + value + ' '\n  }\n\n  // We have a potential problem: certain characters after eols could result in\n  // blocks being seen.\n  // For example, if someone injected the string `'\\n# b'`, then that would\n  // result in an ATX heading.\n  // We can\u2019t escape characters in `inlineCode`, but because eols are\n  // transformed to spaces when going from markdown to HTML anyway, we can swap\n  // them out.\n  while (++index < state.unsafe.length) {\n    const pattern = state.unsafe[index]\n    const expression = state.compilePattern(pattern)\n    /** @type {RegExpExecArray | null} */\n    let match\n\n    // Only look for `atBreak`s.\n    // Btw: note that `atBreak` patterns will always start the regex at LF or\n    // CR.\n    if (!pattern.atBreak) continue\n\n    while ((match = expression.exec(value))) {\n      let position = match.index\n\n      // Support CRLF (patterns only look for one of the characters).\n      if (\n        value.charCodeAt(position) === 10 /* `\\n` */ &&\n        value.charCodeAt(position - 1) === 13 /* `\\r` */\n      ) {\n        position--\n      }\n\n      value = value.slice(0, position) + ' ' + value.slice(match.index + 1)\n    }\n  }\n\n  return sequence + value + sequence\n}\n\n/**\n * @returns {string}\n */\nfunction inlineCodePeek() {\n  return '`'\n}\n", "/**\n * @import {State} from 'mdast-util-to-markdown'\n * @import {Link} from 'mdast'\n */\n\nimport {toString} from 'mdast-util-to-string'\n\n/**\n * @param {Link} node\n * @param {State} state\n * @returns {boolean}\n */\nexport function formatLinkAsAutolink(node, state) {\n  const raw = toString(node)\n\n  return Boolean(\n    !state.options.resourceLink &&\n      // If there\u2019s a url\u2026\n      node.url &&\n      // And there\u2019s a no title\u2026\n      !node.title &&\n      // And the content of `node` is a single text node\u2026\n      node.children &&\n      node.children.length === 1 &&\n      node.children[0].type === 'text' &&\n      // And if the url is the same as the content\u2026\n      (raw === node.url || 'mailto:' + raw === node.url) &&\n      // And that starts w/ a protocol\u2026\n      /^[a-z][a-z+.-]+:/i.test(node.url) &&\n      // And that doesn\u2019t contain ASCII control codes (character escapes and\n      // references don\u2019t work), space, or angle brackets\u2026\n      !/[\\0- <>\\u007F]/.test(node.url)\n  )\n}\n", "/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {Link, Parents} from 'mdast'\n * @import {Exit} from '../types.js'\n */\n\nimport {checkQuote} from '../util/check-quote.js'\nimport {formatLinkAsAutolink} from '../util/format-link-as-autolink.js'\n\nlink.peek = linkPeek\n\n/**\n * @param {Link} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function link(node, _, state, info) {\n  const quote = checkQuote(state)\n  const suffix = quote === '\"' ? 'Quote' : 'Apostrophe'\n  const tracker = state.createTracker(info)\n  /** @type {Exit} */\n  let exit\n  /** @type {Exit} */\n  let subexit\n\n  if (formatLinkAsAutolink(node, state)) {\n    // Hide the fact that we\u2019re in phrasing, because escapes don\u2019t work.\n    const stack = state.stack\n    state.stack = []\n    exit = state.enter('autolink')\n    let value = tracker.move('<')\n    value += tracker.move(\n      state.containerPhrasing(node, {\n        before: value,\n        after: '>',\n        ...tracker.current()\n      })\n    )\n    value += tracker.move('>')\n    exit()\n    state.stack = stack\n    return value\n  }\n\n  exit = state.enter('link')\n  subexit = state.enter('label')\n  let value = tracker.move('[')\n  value += tracker.move(\n    state.containerPhrasing(node, {\n      before: value,\n      after: '](',\n      ...tracker.current()\n    })\n  )\n  value += tracker.move('](')\n  subexit()\n\n  if (\n    // If there\u2019s no url but there is a title\u2026\n    (!node.url && node.title) ||\n    // If there are control characters or whitespace.\n    /[\\0- \\u007F]/.test(node.url)\n  ) {\n    subexit = state.enter('destinationLiteral')\n    value += tracker.move('<')\n    value += tracker.move(\n      state.safe(node.url, {before: value, after: '>', ...tracker.current()})\n    )\n    value += tracker.move('>')\n  } else {\n    // No whitespace, raw is prettier.\n    subexit = state.enter('destinationRaw')\n    value += tracker.move(\n      state.safe(node.url, {\n        before: value,\n        after: node.title ? ' ' : ')',\n        ...tracker.current()\n      })\n    )\n  }\n\n  subexit()\n\n  if (node.title) {\n    subexit = state.enter(`title${suffix}`)\n    value += tracker.move(' ' + quote)\n    value += tracker.move(\n      state.safe(node.title, {\n        before: value,\n        after: quote,\n        ...tracker.current()\n      })\n    )\n    value += tracker.move(quote)\n    subexit()\n  }\n\n  value += tracker.move(')')\n\n  exit()\n  return value\n}\n\n/**\n * @param {Link} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @returns {string}\n */\nfunction linkPeek(node, _, state) {\n  return formatLinkAsAutolink(node, state) ? '<' : '['\n}\n", "/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {LinkReference, Parents} from 'mdast'\n */\n\nlinkReference.peek = linkReferencePeek\n\n/**\n * @param {LinkReference} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function linkReference(node, _, state, info) {\n  const type = node.referenceType\n  const exit = state.enter('linkReference')\n  let subexit = state.enter('label')\n  const tracker = state.createTracker(info)\n  let value = tracker.move('[')\n  const text = state.containerPhrasing(node, {\n    before: value,\n    after: ']',\n    ...tracker.current()\n  })\n  value += tracker.move(text + '][')\n\n  subexit()\n  // Hide the fact that we\u2019re in phrasing, because escapes don\u2019t work.\n  const stack = state.stack\n  state.stack = []\n  subexit = state.enter('reference')\n  // Note: for proper tracking, we should reset the output positions when we end\n  // up making a `shortcut` reference, because then there is no brace output.\n  // Practically, in that case, there is no content, so it doesn\u2019t matter that\n  // we\u2019ve tracked one too many characters.\n  const reference = state.safe(state.associationId(node), {\n    before: value,\n    after: ']',\n    ...tracker.current()\n  })\n  subexit()\n  state.stack = stack\n  exit()\n\n  if (type === 'full' || !text || text !== reference) {\n    value += tracker.move(reference + ']')\n  } else if (type === 'shortcut') {\n    // Remove the unwanted `[`.\n    value = value.slice(0, -1)\n  } else {\n    value += tracker.move(']')\n  }\n\n  return value\n}\n\n/**\n * @returns {string}\n */\nfunction linkReferencePeek() {\n  return '['\n}\n", "/**\n * @import {Options, State} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['bullet'], null | undefined>}\n */\nexport function checkBullet(state) {\n  const marker = state.options.bullet || '*'\n\n  if (marker !== '*' && marker !== '+' && marker !== '-') {\n    throw new Error(\n      'Cannot serialize items with `' +\n        marker +\n        '` for `options.bullet`, expected `*`, `+`, or `-`'\n    )\n  }\n\n  return marker\n}\n", "/**\n * @import {Options, State} from 'mdast-util-to-markdown'\n */\n\nimport {checkBullet} from './check-bullet.js'\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['bullet'], null | undefined>}\n */\nexport function checkBulletOther(state) {\n  const bullet = checkBullet(state)\n  const bulletOther = state.options.bulletOther\n\n  if (!bulletOther) {\n    return bullet === '*' ? '-' : '*'\n  }\n\n  if (bulletOther !== '*' && bulletOther !== '+' && bulletOther !== '-') {\n    throw new Error(\n      'Cannot serialize items with `' +\n        bulletOther +\n        '` for `options.bulletOther`, expected `*`, `+`, or `-`'\n    )\n  }\n\n  if (bulletOther === bullet) {\n    throw new Error(\n      'Expected `bullet` (`' +\n        bullet +\n        '`) and `bulletOther` (`' +\n        bulletOther +\n        '`) to be different'\n    )\n  }\n\n  return bulletOther\n}\n", "/**\n * @import {Options, State} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['bulletOrdered'], null | undefined>}\n */\nexport function checkBulletOrdered(state) {\n  const marker = state.options.bulletOrdered || '.'\n\n  if (marker !== '.' && marker !== ')') {\n    throw new Error(\n      'Cannot serialize items with `' +\n        marker +\n        '` for `options.bulletOrdered`, expected `.` or `)`'\n    )\n  }\n\n  return marker\n}\n", "/**\n * @import {Options, State} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['rule'], null | undefined>}\n */\nexport function checkRule(state) {\n  const marker = state.options.rule || '*'\n\n  if (marker !== '*' && marker !== '-' && marker !== '_') {\n    throw new Error(\n      'Cannot serialize rules with `' +\n        marker +\n        '` for `options.rule`, expected `*`, `-`, or `_`'\n    )\n  }\n\n  return marker\n}\n", "/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {List, Parents} from 'mdast'\n */\n\nimport {checkBullet} from '../util/check-bullet.js'\nimport {checkBulletOther} from '../util/check-bullet-other.js'\nimport {checkBulletOrdered} from '../util/check-bullet-ordered.js'\nimport {checkRule} from '../util/check-rule.js'\n\n/**\n * @param {List} node\n * @param {Parents | undefined} parent\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function list(node, parent, state, info) {\n  const exit = state.enter('list')\n  const bulletCurrent = state.bulletCurrent\n  /** @type {string} */\n  let bullet = node.ordered ? checkBulletOrdered(state) : checkBullet(state)\n  /** @type {string} */\n  const bulletOther = node.ordered\n    ? bullet === '.'\n      ? ')'\n      : '.'\n    : checkBulletOther(state)\n  let useDifferentMarker =\n    parent && state.bulletLastUsed ? bullet === state.bulletLastUsed : false\n\n  if (!node.ordered) {\n    const firstListItem = node.children ? node.children[0] : undefined\n\n    // If there\u2019s an empty first list item directly in two list items,\n    // we have to use a different bullet:\n    //\n    // ```markdown\n    // * - *\n    // ```\n    //\n    // \u2026because otherwise it would become one big thematic break.\n    if (\n      // Bullet could be used as a thematic break marker:\n      (bullet === '*' || bullet === '-') &&\n      // Empty first list item:\n      firstListItem &&\n      (!firstListItem.children || !firstListItem.children[0]) &&\n      // Directly in two other list items:\n      state.stack[state.stack.length - 1] === 'list' &&\n      state.stack[state.stack.length - 2] === 'listItem' &&\n      state.stack[state.stack.length - 3] === 'list' &&\n      state.stack[state.stack.length - 4] === 'listItem' &&\n      // That are each the first child.\n      state.indexStack[state.indexStack.length - 1] === 0 &&\n      state.indexStack[state.indexStack.length - 2] === 0 &&\n      state.indexStack[state.indexStack.length - 3] === 0\n    ) {\n      useDifferentMarker = true\n    }\n\n    // If there\u2019s a thematic break at the start of the first list item,\n    // we have to use a different bullet:\n    //\n    // ```markdown\n    // * ---\n    // ```\n    //\n    // \u2026because otherwise it would become one big thematic break.\n    if (checkRule(state) === bullet && firstListItem) {\n      let index = -1\n\n      while (++index < node.children.length) {\n        const item = node.children[index]\n\n        if (\n          item &&\n          item.type === 'listItem' &&\n          item.children &&\n          item.children[0] &&\n          item.children[0].type === 'thematicBreak'\n        ) {\n          useDifferentMarker = true\n          break\n        }\n      }\n    }\n  }\n\n  if (useDifferentMarker) {\n    bullet = bulletOther\n  }\n\n  state.bulletCurrent = bullet\n  const value = state.containerFlow(node, info)\n  state.bulletLastUsed = bullet\n  state.bulletCurrent = bulletCurrent\n  exit()\n  return value\n}\n", "/**\n * @import {Options, State} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['listItemIndent'], null | undefined>}\n */\nexport function checkListItemIndent(state) {\n  const style = state.options.listItemIndent || 'one'\n\n  if (style !== 'tab' && style !== 'one' && style !== 'mixed') {\n    throw new Error(\n      'Cannot serialize items with `' +\n        style +\n        '` for `options.listItemIndent`, expected `tab`, `one`, or `mixed`'\n    )\n  }\n\n  return style\n}\n", "/**\n * @import {Info, Map, State} from 'mdast-util-to-markdown'\n * @import {ListItem, Parents} from 'mdast'\n */\n\nimport {checkBullet} from '../util/check-bullet.js'\nimport {checkListItemIndent} from '../util/check-list-item-indent.js'\n\n/**\n * @param {ListItem} node\n * @param {Parents | undefined} parent\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function listItem(node, parent, state, info) {\n  const listItemIndent = checkListItemIndent(state)\n  let bullet = state.bulletCurrent || checkBullet(state)\n\n  // Add the marker value for ordered lists.\n  if (parent && parent.type === 'list' && parent.ordered) {\n    bullet =\n      (typeof parent.start === 'number' && parent.start > -1\n        ? parent.start\n        : 1) +\n      (state.options.incrementListMarker === false\n        ? 0\n        : parent.children.indexOf(node)) +\n      bullet\n  }\n\n  let size = bullet.length + 1\n\n  if (\n    listItemIndent === 'tab' ||\n    (listItemIndent === 'mixed' &&\n      ((parent && parent.type === 'list' && parent.spread) || node.spread))\n  ) {\n    size = Math.ceil(size / 4) * 4\n  }\n\n  const tracker = state.createTracker(info)\n  tracker.move(bullet + ' '.repeat(size - bullet.length))\n  tracker.shift(size)\n  const exit = state.enter('listItem')\n  const value = state.indentLines(\n    state.containerFlow(node, tracker.current()),\n    map\n  )\n  exit()\n\n  return value\n\n  /** @type {Map} */\n  function map(line, index, blank) {\n    if (index) {\n      return (blank ? '' : ' '.repeat(size)) + line\n    }\n\n    return (blank ? bullet : bullet + ' '.repeat(size - bullet.length)) + line\n  }\n}\n", "/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {Paragraph, Parents} from 'mdast'\n */\n\n/**\n * @param {Paragraph} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function paragraph(node, _, state, info) {\n  const exit = state.enter('paragraph')\n  const subexit = state.enter('phrasing')\n  const value = state.containerPhrasing(node, info)\n  subexit()\n  exit()\n  return value\n}\n", "/**\n * @typedef {import('mdast').Html} Html\n * @typedef {import('mdast').PhrasingContent} PhrasingContent\n */\n\nimport {convert} from 'unist-util-is'\n\n/**\n * Check if the given value is *phrasing content*.\n *\n * > \uD83D\uDC49 **Note**: Excludes `html`, which can be both phrasing or flow.\n *\n * @param node\n *   Thing to check, typically `Node`.\n * @returns\n *   Whether `value` is phrasing content.\n */\n\nexport const phrasing =\n  /** @type {(node?: unknown) => node is Exclude<PhrasingContent, Html>} */\n  (\n    convert([\n      'break',\n      'delete',\n      'emphasis',\n      // To do: next major: removed since footnotes were added to GFM.\n      'footnote',\n      'footnoteReference',\n      'image',\n      'imageReference',\n      'inlineCode',\n      // Enabled by `mdast-util-math`:\n      'inlineMath',\n      'link',\n      'linkReference',\n      // Enabled by `mdast-util-mdx`:\n      'mdxJsxTextElement',\n      // Enabled by `mdast-util-mdx`:\n      'mdxTextExpression',\n      'strong',\n      'text',\n      // Enabled by `mdast-util-directive`:\n      'textDirective'\n    ])\n  )\n", "/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {Parents, Root} from 'mdast'\n */\n\nimport {phrasing} from 'mdast-util-phrasing'\n\n/**\n * @param {Root} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function root(node, _, state, info) {\n  // Note: `html` nodes are ambiguous.\n  const hasPhrasing = node.children.some(function (d) {\n    return phrasing(d)\n  })\n\n  const container = hasPhrasing ? state.containerPhrasing : state.containerFlow\n  return container.call(state, node, info)\n}\n", "/**\n * @import {Options, State} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['strong'], null | undefined>}\n */\nexport function checkStrong(state) {\n  const marker = state.options.strong || '*'\n\n  if (marker !== '*' && marker !== '_') {\n    throw new Error(\n      'Cannot serialize strong with `' +\n        marker +\n        '` for `options.strong`, expected `*`, or `_`'\n    )\n  }\n\n  return marker\n}\n", "/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {Parents, Strong} from 'mdast'\n */\n\nimport {checkStrong} from '../util/check-strong.js'\nimport {encodeCharacterReference} from '../util/encode-character-reference.js'\nimport {encodeInfo} from '../util/encode-info.js'\n\nstrong.peek = strongPeek\n\n/**\n * @param {Strong} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function strong(node, _, state, info) {\n  const marker = checkStrong(state)\n  const exit = state.enter('strong')\n  const tracker = state.createTracker(info)\n  const before = tracker.move(marker + marker)\n\n  let between = tracker.move(\n    state.containerPhrasing(node, {\n      after: marker,\n      before,\n      ...tracker.current()\n    })\n  )\n  const betweenHead = between.charCodeAt(0)\n  const open = encodeInfo(\n    info.before.charCodeAt(info.before.length - 1),\n    betweenHead,\n    marker\n  )\n\n  if (open.inside) {\n    between = encodeCharacterReference(betweenHead) + between.slice(1)\n  }\n\n  const betweenTail = between.charCodeAt(between.length - 1)\n  const close = encodeInfo(info.after.charCodeAt(0), betweenTail, marker)\n\n  if (close.inside) {\n    between = between.slice(0, -1) + encodeCharacterReference(betweenTail)\n  }\n\n  const after = tracker.move(marker + marker)\n\n  exit()\n\n  state.attentionEncodeSurroundingInfo = {\n    after: close.outside,\n    before: open.outside\n  }\n  return before + between + after\n}\n\n/**\n * @param {Strong} _\n * @param {Parents | undefined} _1\n * @param {State} state\n * @returns {string}\n */\nfunction strongPeek(_, _1, state) {\n  return state.options.strong || '*'\n}\n", "/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {Parents, Text} from 'mdast'\n */\n\n/**\n * @param {Text} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function text(node, _, state, info) {\n  return state.safe(node.value, info)\n}\n", "/**\n * @import {Options, State} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['ruleRepetition'], null | undefined>}\n */\nexport function checkRuleRepetition(state) {\n  const repetition = state.options.ruleRepetition || 3\n\n  if (repetition < 3) {\n    throw new Error(\n      'Cannot serialize rules with repetition `' +\n        repetition +\n        '` for `options.ruleRepetition`, expected `3` or more'\n    )\n  }\n\n  return repetition\n}\n", "/**\n * @import {State} from 'mdast-util-to-markdown'\n * @import {Parents, ThematicBreak} from 'mdast'\n */\n\nimport {checkRuleRepetition} from '../util/check-rule-repetition.js'\nimport {checkRule} from '../util/check-rule.js'\n\n/**\n * @param {ThematicBreak} _\n * @param {Parents | undefined} _1\n * @param {State} state\n * @returns {string}\n */\nexport function thematicBreak(_, _1, state) {\n  const value = (\n    checkRule(state) + (state.options.ruleSpaces ? ' ' : '')\n  ).repeat(checkRuleRepetition(state))\n\n  return state.options.ruleSpaces ? value.slice(0, -1) : value\n}\n", "import {blockquote} from './blockquote.js'\nimport {hardBreak} from './break.js'\nimport {code} from './code.js'\nimport {definition} from './definition.js'\nimport {emphasis} from './emphasis.js'\nimport {heading} from './heading.js'\nimport {html} from './html.js'\nimport {image} from './image.js'\nimport {imageReference} from './image-reference.js'\nimport {inlineCode} from './inline-code.js'\nimport {link} from './link.js'\nimport {linkReference} from './link-reference.js'\nimport {list} from './list.js'\nimport {listItem} from './list-item.js'\nimport {paragraph} from './paragraph.js'\nimport {root} from './root.js'\nimport {strong} from './strong.js'\nimport {text} from './text.js'\nimport {thematicBreak} from './thematic-break.js'\n\n/**\n * Default (CommonMark) handlers.\n */\nexport const handle = {\n  blockquote,\n  break: hardBreak,\n  code,\n  definition,\n  emphasis,\n  hardBreak,\n  heading,\n  html,\n  image,\n  imageReference,\n  inlineCode,\n  link,\n  linkReference,\n  list,\n  listItem,\n  paragraph,\n  root,\n  strong,\n  text,\n  thematicBreak\n}\n", "/**\n * @typedef {import('mdast').InlineCode} InlineCode\n * @typedef {import('mdast').Table} Table\n * @typedef {import('mdast').TableCell} TableCell\n * @typedef {import('mdast').TableRow} TableRow\n *\n * @typedef {import('markdown-table').Options} MarkdownTableOptions\n *\n * @typedef {import('mdast-util-from-markdown').CompileContext} CompileContext\n * @typedef {import('mdast-util-from-markdown').Extension} FromMarkdownExtension\n * @typedef {import('mdast-util-from-markdown').Handle} FromMarkdownHandle\n *\n * @typedef {import('mdast-util-to-markdown').Options} ToMarkdownExtension\n * @typedef {import('mdast-util-to-markdown').Handle} ToMarkdownHandle\n * @typedef {import('mdast-util-to-markdown').State} State\n * @typedef {import('mdast-util-to-markdown').Info} Info\n */\n\n/**\n * @typedef Options\n *   Configuration.\n * @property {boolean | null | undefined} [tableCellPadding=true]\n *   Whether to add a space of padding between delimiters and cells (default:\n *   `true`).\n * @property {boolean | null | undefined} [tablePipeAlign=true]\n *   Whether to align the delimiters (default: `true`).\n * @property {MarkdownTableOptions['stringLength'] | null | undefined} [stringLength]\n *   Function to detect the length of table cell content, used when aligning\n *   the delimiters between cells (optional).\n */\n\nimport {ok as assert} from 'devlop'\nimport {markdownTable} from 'markdown-table'\nimport {defaultHandlers} from 'mdast-util-to-markdown'\n\n/**\n * Create an extension for `mdast-util-from-markdown` to enable GFM tables in\n * markdown.\n *\n * @returns {FromMarkdownExtension}\n *   Extension for `mdast-util-from-markdown` to enable GFM tables.\n */\nexport function gfmTableFromMarkdown() {\n  return {\n    enter: {\n      table: enterTable,\n      tableData: enterCell,\n      tableHeader: enterCell,\n      tableRow: enterRow\n    },\n    exit: {\n      codeText: exitCodeText,\n      table: exitTable,\n      tableData: exit,\n      tableHeader: exit,\n      tableRow: exit\n    }\n  }\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterTable(token) {\n  const align = token._align\n  assert(align, 'expected `_align` on table')\n  this.enter(\n    {\n      type: 'table',\n      align: align.map(function (d) {\n        return d === 'none' ? null : d\n      }),\n      children: []\n    },\n    token\n  )\n  this.data.inTable = true\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitTable(token) {\n  this.exit(token)\n  this.data.inTable = undefined\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterRow(token) {\n  this.enter({type: 'tableRow', children: []}, token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exit(token) {\n  this.exit(token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterCell(token) {\n  this.enter({type: 'tableCell', children: []}, token)\n}\n\n// Overwrite the default code text data handler to unescape escaped pipes when\n// they are in tables.\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitCodeText(token) {\n  let value = this.resume()\n\n  if (this.data.inTable) {\n    value = value.replace(/\\\\([\\\\|])/g, replace)\n  }\n\n  const node = this.stack[this.stack.length - 1]\n  assert(node.type === 'inlineCode')\n  node.value = value\n  this.exit(token)\n}\n\n/**\n * @param {string} $0\n * @param {string} $1\n * @returns {string}\n */\nfunction replace($0, $1) {\n  // Pipes work, backslashes don\u2019t (but can\u2019t escape pipes).\n  return $1 === '|' ? $1 : $0\n}\n\n/**\n * Create an extension for `mdast-util-to-markdown` to enable GFM tables in\n * markdown.\n *\n * @param {Options | null | undefined} [options]\n *   Configuration.\n * @returns {ToMarkdownExtension}\n *   Extension for `mdast-util-to-markdown` to enable GFM tables.\n */\nexport function gfmTableToMarkdown(options) {\n  const settings = options || {}\n  const padding = settings.tableCellPadding\n  const alignDelimiters = settings.tablePipeAlign\n  const stringLength = settings.stringLength\n  const around = padding ? ' ' : '|'\n\n  return {\n    unsafe: [\n      {character: '\\r', inConstruct: 'tableCell'},\n      {character: '\\n', inConstruct: 'tableCell'},\n      // A pipe, when followed by a tab or space (padding), or a dash or colon\n      // (unpadded delimiter row), could result in a table.\n      {atBreak: true, character: '|', after: '[\\t :-]'},\n      // A pipe in a cell must be encoded.\n      {character: '|', inConstruct: 'tableCell'},\n      // A colon must be followed by a dash, in which case it could start a\n      // delimiter row.\n      {atBreak: true, character: ':', after: '-'},\n      // A delimiter row can also start with a dash, when followed by more\n      // dashes, a colon, or a pipe.\n      // This is a stricter version than the built in check for lists, thematic\n      // breaks, and setex heading underlines though:\n      // <https://github.com/syntax-tree/mdast-util-to-markdown/blob/51a2038/lib/unsafe.js#L57>\n      {atBreak: true, character: '-', after: '[:|-]'}\n    ],\n    handlers: {\n      inlineCode: inlineCodeWithTable,\n      table: handleTable,\n      tableCell: handleTableCell,\n      tableRow: handleTableRow\n    }\n  }\n\n  /**\n   * @type {ToMarkdownHandle}\n   * @param {Table} node\n   */\n  function handleTable(node, _, state, info) {\n    return serializeData(handleTableAsData(node, state, info), node.align)\n  }\n\n  /**\n   * This function isn\u2019t really used normally, because we handle rows at the\n   * table level.\n   * But, if someone passes in a table row, this ensures we make somewhat sense.\n   *\n   * @type {ToMarkdownHandle}\n   * @param {TableRow} node\n   */\n  function handleTableRow(node, _, state, info) {\n    const row = handleTableRowAsData(node, state, info)\n    const value = serializeData([row])\n    // `markdown-table` will always add an align row\n    return value.slice(0, value.indexOf('\\n'))\n  }\n\n  /**\n   * @type {ToMarkdownHandle}\n   * @param {TableCell} node\n   */\n  function handleTableCell(node, _, state, info) {\n    const exit = state.enter('tableCell')\n    const subexit = state.enter('phrasing')\n    const value = state.containerPhrasing(node, {\n      ...info,\n      before: around,\n      after: around\n    })\n    subexit()\n    exit()\n    return value\n  }\n\n  /**\n   * @param {Array<Array<string>>} matrix\n   * @param {Array<string | null | undefined> | null | undefined} [align]\n   */\n  function serializeData(matrix, align) {\n    return markdownTable(matrix, {\n      align,\n      // @ts-expect-error: `markdown-table` types should support `null`.\n      alignDelimiters,\n      // @ts-expect-error: `markdown-table` types should support `null`.\n      padding,\n      // @ts-expect-error: `markdown-table` types should support `null`.\n      stringLength\n    })\n  }\n\n  /**\n   * @param {Table} node\n   * @param {State} state\n   * @param {Info} info\n   */\n  function handleTableAsData(node, state, info) {\n    const children = node.children\n    let index = -1\n    /** @type {Array<Array<string>>} */\n    const result = []\n    const subexit = state.enter('table')\n\n    while (++index < children.length) {\n      result[index] = handleTableRowAsData(children[index], state, info)\n    }\n\n    subexit()\n\n    return result\n  }\n\n  /**\n   * @param {TableRow} node\n   * @param {State} state\n   * @param {Info} info\n   */\n  function handleTableRowAsData(node, state, info) {\n    const children = node.children\n    let index = -1\n    /** @type {Array<string>} */\n    const result = []\n    const subexit = state.enter('tableRow')\n\n    while (++index < children.length) {\n      // Note: the positional info as used here is incorrect.\n      // Making it correct would be impossible due to aligning cells?\n      // And it would need copy/pasting `markdown-table` into this project.\n      result[index] = handleTableCell(children[index], node, state, info)\n    }\n\n    subexit()\n\n    return result\n  }\n\n  /**\n   * @type {ToMarkdownHandle}\n   * @param {InlineCode} node\n   */\n  function inlineCodeWithTable(node, parent, state) {\n    let value = defaultHandlers.inlineCode(node, parent, state)\n\n    if (state.stack.includes('tableCell')) {\n      value = value.replace(/\\|/g, '\\\\$&')\n    }\n\n    return value\n  }\n}\n", "/**\n * @typedef {import('mdast').ListItem} ListItem\n * @typedef {import('mdast').Paragraph} Paragraph\n * @typedef {import('mdast-util-from-markdown').CompileContext} CompileContext\n * @typedef {import('mdast-util-from-markdown').Extension} FromMarkdownExtension\n * @typedef {import('mdast-util-from-markdown').Handle} FromMarkdownHandle\n * @typedef {import('mdast-util-to-markdown').Options} ToMarkdownExtension\n * @typedef {import('mdast-util-to-markdown').Handle} ToMarkdownHandle\n */\n\nimport {ok as assert} from 'devlop'\nimport {defaultHandlers} from 'mdast-util-to-markdown'\n\n/**\n * Create an extension for `mdast-util-from-markdown` to enable GFM task\n * list items in markdown.\n *\n * @returns {FromMarkdownExtension}\n *   Extension for `mdast-util-from-markdown` to enable GFM task list items.\n */\nexport function gfmTaskListItemFromMarkdown() {\n  return {\n    exit: {\n      taskListCheckValueChecked: exitCheck,\n      taskListCheckValueUnchecked: exitCheck,\n      paragraph: exitParagraphWithTaskListItem\n    }\n  }\n}\n\n/**\n * Create an extension for `mdast-util-to-markdown` to enable GFM task list\n * items in markdown.\n *\n * @returns {ToMarkdownExtension}\n *   Extension for `mdast-util-to-markdown` to enable GFM task list items.\n */\nexport function gfmTaskListItemToMarkdown() {\n  return {\n    unsafe: [{atBreak: true, character: '-', after: '[:|-]'}],\n    handlers: {listItem: listItemWithTaskListItem}\n  }\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitCheck(token) {\n  // We\u2019re always in a paragraph, in a list item.\n  const node = this.stack[this.stack.length - 2]\n  assert(node.type === 'listItem')\n  node.checked = token.type === 'taskListCheckValueChecked'\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitParagraphWithTaskListItem(token) {\n  const parent = this.stack[this.stack.length - 2]\n\n  if (\n    parent &&\n    parent.type === 'listItem' &&\n    typeof parent.checked === 'boolean'\n  ) {\n    const node = this.stack[this.stack.length - 1]\n    assert(node.type === 'paragraph')\n    const head = node.children[0]\n\n    if (head && head.type === 'text') {\n      const siblings = parent.children\n      let index = -1\n      /** @type {Paragraph | undefined} */\n      let firstParaghraph\n\n      while (++index < siblings.length) {\n        const sibling = siblings[index]\n        if (sibling.type === 'paragraph') {\n          firstParaghraph = sibling\n          break\n        }\n      }\n\n      if (firstParaghraph === node) {\n        // Must start with a space or a tab.\n        head.value = head.value.slice(1)\n\n        if (head.value.length === 0) {\n          node.children.shift()\n        } else if (\n          node.position &&\n          head.position &&\n          typeof head.position.start.offset === 'number'\n        ) {\n          head.position.start.column++\n          head.position.start.offset++\n          node.position.start = Object.assign({}, head.position.start)\n        }\n      }\n    }\n  }\n\n  this.exit(token)\n}\n\n/**\n * @type {ToMarkdownHandle}\n * @param {ListItem} node\n */\nfunction listItemWithTaskListItem(node, parent, state, info) {\n  const head = node.children[0]\n  const checkable =\n    typeof node.checked === 'boolean' && head && head.type === 'paragraph'\n  const checkbox = '[' + (node.checked ? 'x' : ' ') + '] '\n  const tracker = state.createTracker(info)\n\n  if (checkable) {\n    tracker.move(checkbox)\n  }\n\n  let value = defaultHandlers.listItem(node, parent, state, {\n    ...info,\n    ...tracker.current()\n  })\n\n  if (checkable) {\n    value = value.replace(/^(?:[*+-]|\\d+\\.)([\\r\\n]| {1,3})/, check)\n  }\n\n  return value\n\n  /**\n   * @param {string} $0\n   * @returns {string}\n   */\n  function check($0) {\n    return $0 + checkbox\n  }\n}\n", "/**\n * @import {Extension as FromMarkdownExtension} from 'mdast-util-from-markdown'\n * @import {Options} from 'mdast-util-gfm'\n * @import {Options as ToMarkdownExtension} from 'mdast-util-to-markdown'\n */\n\nimport {\n  gfmAutolinkLiteralFromMarkdown,\n  gfmAutolinkLiteralToMarkdown\n} from 'mdast-util-gfm-autolink-literal'\nimport {\n  gfmFootnoteFromMarkdown,\n  gfmFootnoteToMarkdown\n} from 'mdast-util-gfm-footnote'\nimport {\n  gfmStrikethroughFromMarkdown,\n  gfmStrikethroughToMarkdown\n} from 'mdast-util-gfm-strikethrough'\nimport {gfmTableFromMarkdown, gfmTableToMarkdown} from 'mdast-util-gfm-table'\nimport {\n  gfmTaskListItemFromMarkdown,\n  gfmTaskListItemToMarkdown\n} from 'mdast-util-gfm-task-list-item'\n\n/**\n * Create an extension for `mdast-util-from-markdown` to enable GFM (autolink\n * literals, footnotes, strikethrough, tables, tasklists).\n *\n * @returns {Array<FromMarkdownExtension>}\n *   Extension for `mdast-util-from-markdown` to enable GFM (autolink literals,\n *   footnotes, strikethrough, tables, tasklists).\n */\nexport function gfmFromMarkdown() {\n  return [\n    gfmAutolinkLiteralFromMarkdown(),\n    gfmFootnoteFromMarkdown(),\n    gfmStrikethroughFromMarkdown(),\n    gfmTableFromMarkdown(),\n    gfmTaskListItemFromMarkdown()\n  ]\n}\n\n/**\n * Create an extension for `mdast-util-to-markdown` to enable GFM (autolink\n * literals, footnotes, strikethrough, tables, tasklists).\n *\n * @param {Options | null | undefined} [options]\n *   Configuration (optional).\n * @returns {ToMarkdownExtension}\n *   Extension for `mdast-util-to-markdown` to enable GFM (autolink literals,\n *   footnotes, strikethrough, tables, tasklists).\n */\nexport function gfmToMarkdown(options) {\n  return {\n    extensions: [\n      gfmAutolinkLiteralToMarkdown(),\n      gfmFootnoteToMarkdown(options),\n      gfmStrikethroughToMarkdown(),\n      gfmTableToMarkdown(options),\n      gfmTaskListItemToMarkdown()\n    ]\n  }\n}\n", "/**\n * @import {Code, ConstructRecord, Event, Extension, Previous, State, TokenizeContext, Tokenizer} from 'micromark-util-types'\n */\n\nimport { asciiAlpha, asciiAlphanumeric, asciiControl, markdownLineEndingOrSpace, unicodePunctuation, unicodeWhitespace } from 'micromark-util-character';\nconst wwwPrefix = {\n  tokenize: tokenizeWwwPrefix,\n  partial: true\n};\nconst domain = {\n  tokenize: tokenizeDomain,\n  partial: true\n};\nconst path = {\n  tokenize: tokenizePath,\n  partial: true\n};\nconst trail = {\n  tokenize: tokenizeTrail,\n  partial: true\n};\nconst emailDomainDotTrail = {\n  tokenize: tokenizeEmailDomainDotTrail,\n  partial: true\n};\nconst wwwAutolink = {\n  name: 'wwwAutolink',\n  tokenize: tokenizeWwwAutolink,\n  previous: previousWww\n};\nconst protocolAutolink = {\n  name: 'protocolAutolink',\n  tokenize: tokenizeProtocolAutolink,\n  previous: previousProtocol\n};\nconst emailAutolink = {\n  name: 'emailAutolink',\n  tokenize: tokenizeEmailAutolink,\n  previous: previousEmail\n};\n\n/** @type {ConstructRecord} */\nconst text = {};\n\n/**\n * Create an extension for `micromark` to support GitHub autolink literal\n * syntax.\n *\n * @returns {Extension}\n *   Extension for `micromark` that can be passed in `extensions` to enable GFM\n *   autolink literal syntax.\n */\nexport function gfmAutolinkLiteral() {\n  return {\n    text\n  };\n}\n\n/** @type {Code} */\nlet code = 48;\n\n// Add alphanumerics.\nwhile (code < 123) {\n  text[code] = emailAutolink;\n  code++;\n  if (code === 58) code = 65;else if (code === 91) code = 97;\n}\ntext[43] = emailAutolink;\ntext[45] = emailAutolink;\ntext[46] = emailAutolink;\ntext[95] = emailAutolink;\ntext[72] = [emailAutolink, protocolAutolink];\ntext[104] = [emailAutolink, protocolAutolink];\ntext[87] = [emailAutolink, wwwAutolink];\ntext[119] = [emailAutolink, wwwAutolink];\n\n// To do: perform email autolink literals on events, afterwards.\n// That\u2019s where `markdown-rs` and `cmark-gfm` perform it.\n// It should look for `@`, then for atext backwards, and then for a label\n// forwards.\n// To do: `mailto:`, `xmpp:` protocol as prefix.\n\n/**\n * Email autolink literal.\n *\n * ```markdown\n * > | a contact@example.org b\n *       ^^^^^^^^^^^^^^^^^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeEmailAutolink(effects, ok, nok) {\n  const self = this;\n  /** @type {boolean | undefined} */\n  let dot;\n  /** @type {boolean} */\n  let data;\n  return start;\n\n  /**\n   * Start of email autolink literal.\n   *\n   * ```markdown\n   * > | a contact@example.org b\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    if (!gfmAtext(code) || !previousEmail.call(self, self.previous) || previousUnbalanced(self.events)) {\n      return nok(code);\n    }\n    effects.enter('literalAutolink');\n    effects.enter('literalAutolinkEmail');\n    return atext(code);\n  }\n\n  /**\n   * In email atext.\n   *\n   * ```markdown\n   * > | a contact@example.org b\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function atext(code) {\n    if (gfmAtext(code)) {\n      effects.consume(code);\n      return atext;\n    }\n    if (code === 64) {\n      effects.consume(code);\n      return emailDomain;\n    }\n    return nok(code);\n  }\n\n  /**\n   * In email domain.\n   *\n   * The reference code is a bit overly complex as it handles the `@`, of which\n   * there may be just one.\n   * Source: <https://github.com/github/cmark-gfm/blob/ef1cfcb/extensions/autolink.c#L318>\n   *\n   * ```markdown\n   * > | a contact@example.org b\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function emailDomain(code) {\n    // Dot followed by alphanumerical (not `-` or `_`).\n    if (code === 46) {\n      return effects.check(emailDomainDotTrail, emailDomainAfter, emailDomainDot)(code);\n    }\n\n    // Alphanumerical, `-`, and `_`.\n    if (code === 45 || code === 95 || asciiAlphanumeric(code)) {\n      data = true;\n      effects.consume(code);\n      return emailDomain;\n    }\n\n    // To do: `/` if xmpp.\n\n    // Note: normally we\u2019d truncate trailing punctuation from the link.\n    // However, email autolink literals cannot contain any of those markers,\n    // except for `.`, but that can only occur if it isn\u2019t trailing.\n    // So we can ignore truncating!\n    return emailDomainAfter(code);\n  }\n\n  /**\n   * In email domain, on dot that is not a trail.\n   *\n   * ```markdown\n   * > | a contact@example.org b\n   *                      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function emailDomainDot(code) {\n    effects.consume(code);\n    dot = true;\n    return emailDomain;\n  }\n\n  /**\n   * After email domain.\n   *\n   * ```markdown\n   * > | a contact@example.org b\n   *                          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function emailDomainAfter(code) {\n    // Domain must not be empty, must include a dot, and must end in alphabetical.\n    // Source: <https://github.com/github/cmark-gfm/blob/ef1cfcb/extensions/autolink.c#L332>.\n    if (data && dot && asciiAlpha(self.previous)) {\n      effects.exit('literalAutolinkEmail');\n      effects.exit('literalAutolink');\n      return ok(code);\n    }\n    return nok(code);\n  }\n}\n\n/**\n * `www` autolink literal.\n *\n * ```markdown\n * > | a www.example.org b\n *       ^^^^^^^^^^^^^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeWwwAutolink(effects, ok, nok) {\n  const self = this;\n  return wwwStart;\n\n  /**\n   * Start of www autolink literal.\n   *\n   * ```markdown\n   * > | www.example.com/a?b#c\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function wwwStart(code) {\n    if (code !== 87 && code !== 119 || !previousWww.call(self, self.previous) || previousUnbalanced(self.events)) {\n      return nok(code);\n    }\n    effects.enter('literalAutolink');\n    effects.enter('literalAutolinkWww');\n    // Note: we *check*, so we can discard the `www.` we parsed.\n    // If it worked, we consider it as a part of the domain.\n    return effects.check(wwwPrefix, effects.attempt(domain, effects.attempt(path, wwwAfter), nok), nok)(code);\n  }\n\n  /**\n   * After a www autolink literal.\n   *\n   * ```markdown\n   * > | www.example.com/a?b#c\n   *                          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function wwwAfter(code) {\n    effects.exit('literalAutolinkWww');\n    effects.exit('literalAutolink');\n    return ok(code);\n  }\n}\n\n/**\n * Protocol autolink literal.\n *\n * ```markdown\n * > | a https://example.org b\n *       ^^^^^^^^^^^^^^^^^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeProtocolAutolink(effects, ok, nok) {\n  const self = this;\n  let buffer = '';\n  let seen = false;\n  return protocolStart;\n\n  /**\n   * Start of protocol autolink literal.\n   *\n   * ```markdown\n   * > | https://example.com/a?b#c\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function protocolStart(code) {\n    if ((code === 72 || code === 104) && previousProtocol.call(self, self.previous) && !previousUnbalanced(self.events)) {\n      effects.enter('literalAutolink');\n      effects.enter('literalAutolinkHttp');\n      buffer += String.fromCodePoint(code);\n      effects.consume(code);\n      return protocolPrefixInside;\n    }\n    return nok(code);\n  }\n\n  /**\n   * In protocol.\n   *\n   * ```markdown\n   * > | https://example.com/a?b#c\n   *     ^^^^^\n   * ```\n   *\n   * @type {State}\n   */\n  function protocolPrefixInside(code) {\n    // `5` is size of `https`\n    if (asciiAlpha(code) && buffer.length < 5) {\n      // @ts-expect-error: definitely number.\n      buffer += String.fromCodePoint(code);\n      effects.consume(code);\n      return protocolPrefixInside;\n    }\n    if (code === 58) {\n      const protocol = buffer.toLowerCase();\n      if (protocol === 'http' || protocol === 'https') {\n        effects.consume(code);\n        return protocolSlashesInside;\n      }\n    }\n    return nok(code);\n  }\n\n  /**\n   * In slashes.\n   *\n   * ```markdown\n   * > | https://example.com/a?b#c\n   *           ^^\n   * ```\n   *\n   * @type {State}\n   */\n  function protocolSlashesInside(code) {\n    if (code === 47) {\n      effects.consume(code);\n      if (seen) {\n        return afterProtocol;\n      }\n      seen = true;\n      return protocolSlashesInside;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After protocol, before domain.\n   *\n   * ```markdown\n   * > | https://example.com/a?b#c\n   *             ^\n   * ```\n   *\n   * @type {State}\n   */\n  function afterProtocol(code) {\n    // To do: this is different from `markdown-rs`:\n    // https://github.com/wooorm/markdown-rs/blob/b3a921c761309ae00a51fe348d8a43adbc54b518/src/construct/gfm_autolink_literal.rs#L172-L182\n    return code === null || asciiControl(code) || markdownLineEndingOrSpace(code) || unicodeWhitespace(code) || unicodePunctuation(code) ? nok(code) : effects.attempt(domain, effects.attempt(path, protocolAfter), nok)(code);\n  }\n\n  /**\n   * After a protocol autolink literal.\n   *\n   * ```markdown\n   * > | https://example.com/a?b#c\n   *                              ^\n   * ```\n   *\n   * @type {State}\n   */\n  function protocolAfter(code) {\n    effects.exit('literalAutolinkHttp');\n    effects.exit('literalAutolink');\n    return ok(code);\n  }\n}\n\n/**\n * `www` prefix.\n *\n * ```markdown\n * > | a www.example.org b\n *       ^^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeWwwPrefix(effects, ok, nok) {\n  let size = 0;\n  return wwwPrefixInside;\n\n  /**\n   * In www prefix.\n   *\n   * ```markdown\n   * > | www.example.com\n   *     ^^^^\n   * ```\n   *\n   * @type {State}\n   */\n  function wwwPrefixInside(code) {\n    if ((code === 87 || code === 119) && size < 3) {\n      size++;\n      effects.consume(code);\n      return wwwPrefixInside;\n    }\n    if (code === 46 && size === 3) {\n      effects.consume(code);\n      return wwwPrefixAfter;\n    }\n    return nok(code);\n  }\n\n  /**\n   * After www prefix.\n   *\n   * ```markdown\n   * > | www.example.com\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function wwwPrefixAfter(code) {\n    // If there is *anything*, we can link.\n    return code === null ? nok(code) : ok(code);\n  }\n}\n\n/**\n * Domain.\n *\n * ```markdown\n * > | a https://example.org b\n *               ^^^^^^^^^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeDomain(effects, ok, nok) {\n  /** @type {boolean | undefined} */\n  let underscoreInLastSegment;\n  /** @type {boolean | undefined} */\n  let underscoreInLastLastSegment;\n  /** @type {boolean | undefined} */\n  let seen;\n  return domainInside;\n\n  /**\n   * In domain.\n   *\n   * ```markdown\n   * > | https://example.com/a\n   *             ^^^^^^^^^^^\n   * ```\n   *\n   * @type {State}\n   */\n  function domainInside(code) {\n    // Check whether this marker, which is a trailing punctuation\n    // marker, optionally followed by more trailing markers, and then\n    // followed by an end.\n    if (code === 46 || code === 95) {\n      return effects.check(trail, domainAfter, domainAtPunctuation)(code);\n    }\n\n    // GH documents that only alphanumerics (other than `-`, `.`, and `_`) can\n    // occur, which sounds like ASCII only, but they also support `www.\u9EDE\u770B.com`,\n    // so that\u2019s Unicode.\n    // Instead of some new production for Unicode alphanumerics, markdown\n    // already has that for Unicode punctuation and whitespace, so use those.\n    // Source: <https://github.com/github/cmark-gfm/blob/ef1cfcb/extensions/autolink.c#L12>.\n    if (code === null || markdownLineEndingOrSpace(code) || unicodeWhitespace(code) || code !== 45 && unicodePunctuation(code)) {\n      return domainAfter(code);\n    }\n    seen = true;\n    effects.consume(code);\n    return domainInside;\n  }\n\n  /**\n   * In domain, at potential trailing punctuation, that was not trailing.\n   *\n   * ```markdown\n   * > | https://example.com\n   *                    ^\n   * ```\n   *\n   * @type {State}\n   */\n  function domainAtPunctuation(code) {\n    // There is an underscore in the last segment of the domain\n    if (code === 95) {\n      underscoreInLastSegment = true;\n    }\n    // Otherwise, it\u2019s a `.`: save the last segment underscore in the\n    // penultimate segment slot.\n    else {\n      underscoreInLastLastSegment = underscoreInLastSegment;\n      underscoreInLastSegment = undefined;\n    }\n    effects.consume(code);\n    return domainInside;\n  }\n\n  /**\n   * After domain.\n   *\n   * ```markdown\n   * > | https://example.com/a\n   *                        ^\n   * ```\n   *\n   * @type {State} */\n  function domainAfter(code) {\n    // Note: that\u2019s GH says a dot is needed, but it\u2019s not true:\n    // <https://github.com/github/cmark-gfm/issues/279>\n    if (underscoreInLastLastSegment || underscoreInLastSegment || !seen) {\n      return nok(code);\n    }\n    return ok(code);\n  }\n}\n\n/**\n * Path.\n *\n * ```markdown\n * > | a https://example.org/stuff b\n *                          ^^^^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizePath(effects, ok) {\n  let sizeOpen = 0;\n  let sizeClose = 0;\n  return pathInside;\n\n  /**\n   * In path.\n   *\n   * ```markdown\n   * > | https://example.com/a\n   *                        ^^\n   * ```\n   *\n   * @type {State}\n   */\n  function pathInside(code) {\n    if (code === 40) {\n      sizeOpen++;\n      effects.consume(code);\n      return pathInside;\n    }\n\n    // To do: `markdown-rs` also needs this.\n    // If this is a paren, and there are less closings than openings,\n    // we don\u2019t check for a trail.\n    if (code === 41 && sizeClose < sizeOpen) {\n      return pathAtPunctuation(code);\n    }\n\n    // Check whether this trailing punctuation marker is optionally\n    // followed by more trailing markers, and then followed\n    // by an end.\n    if (code === 33 || code === 34 || code === 38 || code === 39 || code === 41 || code === 42 || code === 44 || code === 46 || code === 58 || code === 59 || code === 60 || code === 63 || code === 93 || code === 95 || code === 126) {\n      return effects.check(trail, ok, pathAtPunctuation)(code);\n    }\n    if (code === null || markdownLineEndingOrSpace(code) || unicodeWhitespace(code)) {\n      return ok(code);\n    }\n    effects.consume(code);\n    return pathInside;\n  }\n\n  /**\n   * In path, at potential trailing punctuation, that was not trailing.\n   *\n   * ```markdown\n   * > | https://example.com/a\"b\n   *                          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function pathAtPunctuation(code) {\n    // Count closing parens.\n    if (code === 41) {\n      sizeClose++;\n    }\n    effects.consume(code);\n    return pathInside;\n  }\n}\n\n/**\n * Trail.\n *\n * This calls `ok` if this *is* the trail, followed by an end, which means\n * the entire trail is not part of the link.\n * It calls `nok` if this *is* part of the link.\n *\n * ```markdown\n * > | https://example.com\").\n *                        ^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeTrail(effects, ok, nok) {\n  return trail;\n\n  /**\n   * In trail of domain or path.\n   *\n   * ```markdown\n   * > | https://example.com\").\n   *                        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function trail(code) {\n    // Regular trailing punctuation.\n    if (code === 33 || code === 34 || code === 39 || code === 41 || code === 42 || code === 44 || code === 46 || code === 58 || code === 59 || code === 63 || code === 95 || code === 126) {\n      effects.consume(code);\n      return trail;\n    }\n\n    // `&` followed by one or more alphabeticals and then a `;`, is\n    // as a whole considered as trailing punctuation.\n    // In all other cases, it is considered as continuation of the URL.\n    if (code === 38) {\n      effects.consume(code);\n      return trailCharacterReferenceStart;\n    }\n\n    // Needed because we allow literals after `[`, as we fix:\n    // <https://github.com/github/cmark-gfm/issues/278>.\n    // Check that it is not followed by `(` or `[`.\n    if (code === 93) {\n      effects.consume(code);\n      return trailBracketAfter;\n    }\n    if (\n    // `<` is an end.\n    code === 60 ||\n    // So is whitespace.\n    code === null || markdownLineEndingOrSpace(code) || unicodeWhitespace(code)) {\n      return ok(code);\n    }\n    return nok(code);\n  }\n\n  /**\n   * In trail, after `]`.\n   *\n   * > \uD83D\uDC49 **Note**: this deviates from `cmark-gfm` to fix a bug.\n   * > See end of <https://github.com/github/cmark-gfm/issues/278> for more.\n   *\n   * ```markdown\n   * > | https://example.com](\n   *                         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function trailBracketAfter(code) {\n    // Whitespace or something that could start a resource or reference is the end.\n    // Switch back to trail otherwise.\n    if (code === null || code === 40 || code === 91 || markdownLineEndingOrSpace(code) || unicodeWhitespace(code)) {\n      return ok(code);\n    }\n    return trail(code);\n  }\n\n  /**\n   * In character-reference like trail, after `&`.\n   *\n   * ```markdown\n   * > | https://example.com&amp;).\n   *                         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function trailCharacterReferenceStart(code) {\n    // When non-alpha, it\u2019s not a trail.\n    return asciiAlpha(code) ? trailCharacterReferenceInside(code) : nok(code);\n  }\n\n  /**\n   * In character-reference like trail.\n   *\n   * ```markdown\n   * > | https://example.com&amp;).\n   *                         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function trailCharacterReferenceInside(code) {\n    // Switch back to trail if this is well-formed.\n    if (code === 59) {\n      effects.consume(code);\n      return trail;\n    }\n    if (asciiAlpha(code)) {\n      effects.consume(code);\n      return trailCharacterReferenceInside;\n    }\n\n    // It\u2019s not a trail.\n    return nok(code);\n  }\n}\n\n/**\n * Dot in email domain trail.\n *\n * This calls `ok` if this *is* the trail, followed by an end, which means\n * the trail is not part of the link.\n * It calls `nok` if this *is* part of the link.\n *\n * ```markdown\n * > | contact@example.org.\n *                        ^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeEmailDomainDotTrail(effects, ok, nok) {\n  return start;\n\n  /**\n   * Dot.\n   *\n   * ```markdown\n   * > | contact@example.org.\n   *                    ^   ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    // Must be dot.\n    effects.consume(code);\n    return after;\n  }\n\n  /**\n   * After dot.\n   *\n   * ```markdown\n   * > | contact@example.org.\n   *                     ^   ^\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    // Not a trail if alphanumeric.\n    return asciiAlphanumeric(code) ? nok(code) : ok(code);\n  }\n}\n\n/**\n * See:\n * <https://github.com/github/cmark-gfm/blob/ef1cfcb/extensions/autolink.c#L156>.\n *\n * @type {Previous}\n */\nfunction previousWww(code) {\n  return code === null || code === 40 || code === 42 || code === 95 || code === 91 || code === 93 || code === 126 || markdownLineEndingOrSpace(code);\n}\n\n/**\n * See:\n * <https://github.com/github/cmark-gfm/blob/ef1cfcb/extensions/autolink.c#L214>.\n *\n * @type {Previous}\n */\nfunction previousProtocol(code) {\n  return !asciiAlpha(code);\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Previous}\n */\nfunction previousEmail(code) {\n  // Do not allow a slash \u201Cinside\u201D atext.\n  // The reference code is a bit weird, but that\u2019s what it results in.\n  // Source: <https://github.com/github/cmark-gfm/blob/ef1cfcb/extensions/autolink.c#L307>.\n  // Other than slash, every preceding character is allowed.\n  return !(code === 47 || gfmAtext(code));\n}\n\n/**\n * @param {Code} code\n * @returns {boolean}\n */\nfunction gfmAtext(code) {\n  return code === 43 || code === 45 || code === 46 || code === 95 || asciiAlphanumeric(code);\n}\n\n/**\n * @param {Array<Event>} events\n * @returns {boolean}\n */\nfunction previousUnbalanced(events) {\n  let index = events.length;\n  let result = false;\n  while (index--) {\n    const token = events[index][1];\n    if ((token.type === 'labelLink' || token.type === 'labelImage') && !token._balanced) {\n      result = true;\n      break;\n    }\n\n    // If we\u2019ve seen this token, and it was marked as not having any unbalanced\n    // bracket before it, we can exit.\n    if (token._gfmAutolinkLiteralWalkedInto) {\n      result = false;\n      break;\n    }\n  }\n  if (events.length > 0 && !result) {\n    // Mark the last token as \u201Cwalked into\u201D w/o finding\n    // anything.\n    events[events.length - 1][1]._gfmAutolinkLiteralWalkedInto = true;\n  }\n  return result;\n}", "/**\n * @import {Event, Exiter, Extension, Resolver, State, Token, TokenizeContext, Tokenizer} from 'micromark-util-types'\n */\n\nimport { blankLine } from 'micromark-core-commonmark';\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEndingOrSpace } from 'micromark-util-character';\nimport { normalizeIdentifier } from 'micromark-util-normalize-identifier';\nconst indent = {\n  tokenize: tokenizeIndent,\n  partial: true\n};\n\n// To do: micromark should support a `_hiddenGfmFootnoteSupport`, which only\n// affects label start (image).\n// That will let us drop `tokenizePotentialGfmFootnote*`.\n// It currently has a `_hiddenFootnoteSupport`, which affects that and more.\n// That can be removed when `micromark-extension-footnote` is archived.\n\n/**\n * Create an extension for `micromark` to enable GFM footnote syntax.\n *\n * @returns {Extension}\n *   Extension for `micromark` that can be passed in `extensions` to\n *   enable GFM footnote syntax.\n */\nexport function gfmFootnote() {\n  /** @type {Extension} */\n  return {\n    document: {\n      [91]: {\n        name: 'gfmFootnoteDefinition',\n        tokenize: tokenizeDefinitionStart,\n        continuation: {\n          tokenize: tokenizeDefinitionContinuation\n        },\n        exit: gfmFootnoteDefinitionEnd\n      }\n    },\n    text: {\n      [91]: {\n        name: 'gfmFootnoteCall',\n        tokenize: tokenizeGfmFootnoteCall\n      },\n      [93]: {\n        name: 'gfmPotentialFootnoteCall',\n        add: 'after',\n        tokenize: tokenizePotentialGfmFootnoteCall,\n        resolveTo: resolveToPotentialGfmFootnoteCall\n      }\n    }\n  };\n}\n\n// To do: remove after micromark update.\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizePotentialGfmFootnoteCall(effects, ok, nok) {\n  const self = this;\n  let index = self.events.length;\n  const defined = self.parser.gfmFootnotes || (self.parser.gfmFootnotes = []);\n  /** @type {Token} */\n  let labelStart;\n\n  // Find an opening.\n  while (index--) {\n    const token = self.events[index][1];\n    if (token.type === \"labelImage\") {\n      labelStart = token;\n      break;\n    }\n\n    // Exit if we\u2019ve walked far enough.\n    if (token.type === 'gfmFootnoteCall' || token.type === \"labelLink\" || token.type === \"label\" || token.type === \"image\" || token.type === \"link\") {\n      break;\n    }\n  }\n  return start;\n\n  /**\n   * @type {State}\n   */\n  function start(code) {\n    if (!labelStart || !labelStart._balanced) {\n      return nok(code);\n    }\n    const id = normalizeIdentifier(self.sliceSerialize({\n      start: labelStart.end,\n      end: self.now()\n    }));\n    if (id.codePointAt(0) !== 94 || !defined.includes(id.slice(1))) {\n      return nok(code);\n    }\n    effects.enter('gfmFootnoteCallLabelMarker');\n    effects.consume(code);\n    effects.exit('gfmFootnoteCallLabelMarker');\n    return ok(code);\n  }\n}\n\n// To do: remove after micromark update.\n/** @type {Resolver} */\nfunction resolveToPotentialGfmFootnoteCall(events, context) {\n  let index = events.length;\n  /** @type {Token | undefined} */\n  let labelStart;\n\n  // Find an opening.\n  while (index--) {\n    if (events[index][1].type === \"labelImage\" && events[index][0] === 'enter') {\n      labelStart = events[index][1];\n      break;\n    }\n  }\n  // Change the `labelImageMarker` to a `data`.\n  events[index + 1][1].type = \"data\";\n  events[index + 3][1].type = 'gfmFootnoteCallLabelMarker';\n\n  // The whole (without `!`):\n  /** @type {Token} */\n  const call = {\n    type: 'gfmFootnoteCall',\n    start: Object.assign({}, events[index + 3][1].start),\n    end: Object.assign({}, events[events.length - 1][1].end)\n  };\n  // The `^` marker\n  /** @type {Token} */\n  const marker = {\n    type: 'gfmFootnoteCallMarker',\n    start: Object.assign({}, events[index + 3][1].end),\n    end: Object.assign({}, events[index + 3][1].end)\n  };\n  // Increment the end 1 character.\n  marker.end.column++;\n  marker.end.offset++;\n  marker.end._bufferIndex++;\n  /** @type {Token} */\n  const string = {\n    type: 'gfmFootnoteCallString',\n    start: Object.assign({}, marker.end),\n    end: Object.assign({}, events[events.length - 1][1].start)\n  };\n  /** @type {Token} */\n  const chunk = {\n    type: \"chunkString\",\n    contentType: 'string',\n    start: Object.assign({}, string.start),\n    end: Object.assign({}, string.end)\n  };\n\n  /** @type {Array<Event>} */\n  const replacement = [\n  // Take the `labelImageMarker` (now `data`, the `!`)\n  events[index + 1], events[index + 2], ['enter', call, context],\n  // The `[`\n  events[index + 3], events[index + 4],\n  // The `^`.\n  ['enter', marker, context], ['exit', marker, context],\n  // Everything in between.\n  ['enter', string, context], ['enter', chunk, context], ['exit', chunk, context], ['exit', string, context],\n  // The ending (`]`, properly parsed and labelled).\n  events[events.length - 2], events[events.length - 1], ['exit', call, context]];\n  events.splice(index, events.length - index + 1, ...replacement);\n  return events;\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeGfmFootnoteCall(effects, ok, nok) {\n  const self = this;\n  const defined = self.parser.gfmFootnotes || (self.parser.gfmFootnotes = []);\n  let size = 0;\n  /** @type {boolean} */\n  let data;\n\n  // Note: the implementation of `markdown-rs` is different, because it houses\n  // core *and* extensions in one project.\n  // Therefore, it can include footnote logic inside `label-end`.\n  // We can\u2019t do that, but luckily, we can parse footnotes in a simpler way than\n  // needed for labels.\n  return start;\n\n  /**\n   * Start of footnote label.\n   *\n   * ```markdown\n   * > | a [^b] c\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter('gfmFootnoteCall');\n    effects.enter('gfmFootnoteCallLabelMarker');\n    effects.consume(code);\n    effects.exit('gfmFootnoteCallLabelMarker');\n    return callStart;\n  }\n\n  /**\n   * After `[`, at `^`.\n   *\n   * ```markdown\n   * > | a [^b] c\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function callStart(code) {\n    if (code !== 94) return nok(code);\n    effects.enter('gfmFootnoteCallMarker');\n    effects.consume(code);\n    effects.exit('gfmFootnoteCallMarker');\n    effects.enter('gfmFootnoteCallString');\n    effects.enter('chunkString').contentType = 'string';\n    return callData;\n  }\n\n  /**\n   * In label.\n   *\n   * ```markdown\n   * > | a [^b] c\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function callData(code) {\n    if (\n    // Too long.\n    size > 999 ||\n    // Closing brace with nothing.\n    code === 93 && !data ||\n    // Space or tab is not supported by GFM for some reason.\n    // `\\n` and `[` not being supported makes sense.\n    code === null || code === 91 || markdownLineEndingOrSpace(code)) {\n      return nok(code);\n    }\n    if (code === 93) {\n      effects.exit('chunkString');\n      const token = effects.exit('gfmFootnoteCallString');\n      if (!defined.includes(normalizeIdentifier(self.sliceSerialize(token)))) {\n        return nok(code);\n      }\n      effects.enter('gfmFootnoteCallLabelMarker');\n      effects.consume(code);\n      effects.exit('gfmFootnoteCallLabelMarker');\n      effects.exit('gfmFootnoteCall');\n      return ok;\n    }\n    if (!markdownLineEndingOrSpace(code)) {\n      data = true;\n    }\n    size++;\n    effects.consume(code);\n    return code === 92 ? callEscape : callData;\n  }\n\n  /**\n   * On character after escape.\n   *\n   * ```markdown\n   * > | a [^b\\c] d\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function callEscape(code) {\n    if (code === 91 || code === 92 || code === 93) {\n      effects.consume(code);\n      size++;\n      return callData;\n    }\n    return callData(code);\n  }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeDefinitionStart(effects, ok, nok) {\n  const self = this;\n  const defined = self.parser.gfmFootnotes || (self.parser.gfmFootnotes = []);\n  /** @type {string} */\n  let identifier;\n  let size = 0;\n  /** @type {boolean | undefined} */\n  let data;\n  return start;\n\n  /**\n   * Start of GFM footnote definition.\n   *\n   * ```markdown\n   * > | [^a]: b\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter('gfmFootnoteDefinition')._container = true;\n    effects.enter('gfmFootnoteDefinitionLabel');\n    effects.enter('gfmFootnoteDefinitionLabelMarker');\n    effects.consume(code);\n    effects.exit('gfmFootnoteDefinitionLabelMarker');\n    return labelAtMarker;\n  }\n\n  /**\n   * In label, at caret.\n   *\n   * ```markdown\n   * > | [^a]: b\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function labelAtMarker(code) {\n    if (code === 94) {\n      effects.enter('gfmFootnoteDefinitionMarker');\n      effects.consume(code);\n      effects.exit('gfmFootnoteDefinitionMarker');\n      effects.enter('gfmFootnoteDefinitionLabelString');\n      effects.enter('chunkString').contentType = 'string';\n      return labelInside;\n    }\n    return nok(code);\n  }\n\n  /**\n   * In label.\n   *\n   * > \uD83D\uDC49 **Note**: `cmark-gfm` prevents whitespace from occurring in footnote\n   * > definition labels.\n   *\n   * ```markdown\n   * > | [^a]: b\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function labelInside(code) {\n    if (\n    // Too long.\n    size > 999 ||\n    // Closing brace with nothing.\n    code === 93 && !data ||\n    // Space or tab is not supported by GFM for some reason.\n    // `\\n` and `[` not being supported makes sense.\n    code === null || code === 91 || markdownLineEndingOrSpace(code)) {\n      return nok(code);\n    }\n    if (code === 93) {\n      effects.exit('chunkString');\n      const token = effects.exit('gfmFootnoteDefinitionLabelString');\n      identifier = normalizeIdentifier(self.sliceSerialize(token));\n      effects.enter('gfmFootnoteDefinitionLabelMarker');\n      effects.consume(code);\n      effects.exit('gfmFootnoteDefinitionLabelMarker');\n      effects.exit('gfmFootnoteDefinitionLabel');\n      return labelAfter;\n    }\n    if (!markdownLineEndingOrSpace(code)) {\n      data = true;\n    }\n    size++;\n    effects.consume(code);\n    return code === 92 ? labelEscape : labelInside;\n  }\n\n  /**\n   * After `\\`, at a special character.\n   *\n   * > \uD83D\uDC49 **Note**: `cmark-gfm` currently does not support escaped brackets:\n   * > <https://github.com/github/cmark-gfm/issues/240>\n   *\n   * ```markdown\n   * > | [^a\\*b]: c\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function labelEscape(code) {\n    if (code === 91 || code === 92 || code === 93) {\n      effects.consume(code);\n      size++;\n      return labelInside;\n    }\n    return labelInside(code);\n  }\n\n  /**\n   * After definition label.\n   *\n   * ```markdown\n   * > | [^a]: b\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function labelAfter(code) {\n    if (code === 58) {\n      effects.enter('definitionMarker');\n      effects.consume(code);\n      effects.exit('definitionMarker');\n      if (!defined.includes(identifier)) {\n        defined.push(identifier);\n      }\n\n      // Any whitespace after the marker is eaten, forming indented code\n      // is not possible.\n      // No space is also fine, just like a block quote marker.\n      return factorySpace(effects, whitespaceAfter, 'gfmFootnoteDefinitionWhitespace');\n    }\n    return nok(code);\n  }\n\n  /**\n   * After definition prefix.\n   *\n   * ```markdown\n   * > | [^a]: b\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function whitespaceAfter(code) {\n    // `markdown-rs` has a wrapping token for the prefix that is closed here.\n    return ok(code);\n  }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeDefinitionContinuation(effects, ok, nok) {\n  /// Start of footnote definition continuation.\n  ///\n  /// ```markdown\n  ///   | [^a]: b\n  /// > |     c\n  ///     ^\n  /// ```\n  //\n  // Either a blank line, which is okay, or an indented thing.\n  return effects.check(blankLine, ok, effects.attempt(indent, ok, nok));\n}\n\n/** @type {Exiter} */\nfunction gfmFootnoteDefinitionEnd(effects) {\n  effects.exit('gfmFootnoteDefinition');\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeIndent(effects, ok, nok) {\n  const self = this;\n  return factorySpace(effects, afterPrefix, 'gfmFootnoteDefinitionIndent', 4 + 1);\n\n  /**\n   * @type {State}\n   */\n  function afterPrefix(code) {\n    const tail = self.events[self.events.length - 1];\n    return tail && tail[1].type === 'gfmFootnoteDefinitionIndent' && tail[2].sliceSerialize(tail[1], true).length === 4 ? ok(code) : nok(code);\n  }\n}", "/**\n * @import {Options} from 'micromark-extension-gfm-strikethrough'\n * @import {Event, Extension, Resolver, State, Token, TokenizeContext, Tokenizer} from 'micromark-util-types'\n */\n\nimport { splice } from 'micromark-util-chunked';\nimport { classifyCharacter } from 'micromark-util-classify-character';\nimport { resolveAll } from 'micromark-util-resolve-all';\n/**\n * Create an extension for `micromark` to enable GFM strikethrough syntax.\n *\n * @param {Options | null | undefined} [options={}]\n *   Configuration.\n * @returns {Extension}\n *   Extension for `micromark` that can be passed in `extensions`, to\n *   enable GFM strikethrough syntax.\n */\nexport function gfmStrikethrough(options) {\n  const options_ = options || {};\n  let single = options_.singleTilde;\n  const tokenizer = {\n    name: 'strikethrough',\n    tokenize: tokenizeStrikethrough,\n    resolveAll: resolveAllStrikethrough\n  };\n  if (single === null || single === undefined) {\n    single = true;\n  }\n  return {\n    text: {\n      [126]: tokenizer\n    },\n    insideSpan: {\n      null: [tokenizer]\n    },\n    attentionMarkers: {\n      null: [126]\n    }\n  };\n\n  /**\n   * Take events and resolve strikethrough.\n   *\n   * @type {Resolver}\n   */\n  function resolveAllStrikethrough(events, context) {\n    let index = -1;\n\n    // Walk through all events.\n    while (++index < events.length) {\n      // Find a token that can close.\n      if (events[index][0] === 'enter' && events[index][1].type === 'strikethroughSequenceTemporary' && events[index][1]._close) {\n        let open = index;\n\n        // Now walk back to find an opener.\n        while (open--) {\n          // Find a token that can open the closer.\n          if (events[open][0] === 'exit' && events[open][1].type === 'strikethroughSequenceTemporary' && events[open][1]._open &&\n          // If the sizes are the same:\n          events[index][1].end.offset - events[index][1].start.offset === events[open][1].end.offset - events[open][1].start.offset) {\n            events[index][1].type = 'strikethroughSequence';\n            events[open][1].type = 'strikethroughSequence';\n\n            /** @type {Token} */\n            const strikethrough = {\n              type: 'strikethrough',\n              start: Object.assign({}, events[open][1].start),\n              end: Object.assign({}, events[index][1].end)\n            };\n\n            /** @type {Token} */\n            const text = {\n              type: 'strikethroughText',\n              start: Object.assign({}, events[open][1].end),\n              end: Object.assign({}, events[index][1].start)\n            };\n\n            // Opening.\n            /** @type {Array<Event>} */\n            const nextEvents = [['enter', strikethrough, context], ['enter', events[open][1], context], ['exit', events[open][1], context], ['enter', text, context]];\n            const insideSpan = context.parser.constructs.insideSpan.null;\n            if (insideSpan) {\n              // Between.\n              splice(nextEvents, nextEvents.length, 0, resolveAll(insideSpan, events.slice(open + 1, index), context));\n            }\n\n            // Closing.\n            splice(nextEvents, nextEvents.length, 0, [['exit', text, context], ['enter', events[index][1], context], ['exit', events[index][1], context], ['exit', strikethrough, context]]);\n            splice(events, open - 1, index - open + 3, nextEvents);\n            index = open + nextEvents.length - 2;\n            break;\n          }\n        }\n      }\n    }\n    index = -1;\n    while (++index < events.length) {\n      if (events[index][1].type === 'strikethroughSequenceTemporary') {\n        events[index][1].type = \"data\";\n      }\n    }\n    return events;\n  }\n\n  /**\n   * @this {TokenizeContext}\n   * @type {Tokenizer}\n   */\n  function tokenizeStrikethrough(effects, ok, nok) {\n    const previous = this.previous;\n    const events = this.events;\n    let size = 0;\n    return start;\n\n    /** @type {State} */\n    function start(code) {\n      if (previous === 126 && events[events.length - 1][1].type !== \"characterEscape\") {\n        return nok(code);\n      }\n      effects.enter('strikethroughSequenceTemporary');\n      return more(code);\n    }\n\n    /** @type {State} */\n    function more(code) {\n      const before = classifyCharacter(previous);\n      if (code === 126) {\n        // If this is the third marker, exit.\n        if (size > 1) return nok(code);\n        effects.consume(code);\n        size++;\n        return more;\n      }\n      if (size < 2 && !single) return nok(code);\n      const token = effects.exit('strikethroughSequenceTemporary');\n      const after = classifyCharacter(code);\n      token._open = !after || after === 2 && Boolean(before);\n      token._close = !before || before === 2 && Boolean(after);\n      return ok(code);\n    }\n  }\n}", "/**\n * @import {Event} from 'micromark-util-types'\n */\n\n// Port of `edit_map.rs` from `markdown-rs`.\n// This should move to `markdown-js` later.\n\n// Deal with several changes in events, batching them together.\n//\n// Preferably, changes should be kept to a minimum.\n// Sometimes, it\u2019s needed to change the list of events, because parsing can be\n// messy, and it helps to expose a cleaner interface of events to the compiler\n// and other users.\n// It can also help to merge many adjacent similar events.\n// And, in other cases, it\u2019s needed to parse subcontent: pass some events\n// through another tokenizer and inject the result.\n\n/**\n * @typedef {[number, number, Array<Event>]} Change\n * @typedef {[number, number, number]} Jump\n */\n\n/**\n * Tracks a bunch of edits.\n */\nexport class EditMap {\n  /**\n   * Create a new edit map.\n   */\n  constructor() {\n    /**\n     * Record of changes.\n     *\n     * @type {Array<Change>}\n     */\n    this.map = [];\n  }\n\n  /**\n   * Create an edit: a remove and/or add at a certain place.\n   *\n   * @param {number} index\n   * @param {number} remove\n   * @param {Array<Event>} add\n   * @returns {undefined}\n   */\n  add(index, remove, add) {\n    addImplementation(this, index, remove, add);\n  }\n\n  // To do: add this when moving to `micromark`.\n  // /**\n  //  * Create an edit: but insert `add` before existing additions.\n  //  *\n  //  * @param {number} index\n  //  * @param {number} remove\n  //  * @param {Array<Event>} add\n  //  * @returns {undefined}\n  //  */\n  // addBefore(index, remove, add) {\n  //   addImplementation(this, index, remove, add, true)\n  // }\n\n  /**\n   * Done, change the events.\n   *\n   * @param {Array<Event>} events\n   * @returns {undefined}\n   */\n  consume(events) {\n    this.map.sort(function (a, b) {\n      return a[0] - b[0];\n    });\n\n    /* c8 ignore next 3 -- `resolve` is never called without tables, so without edits. */\n    if (this.map.length === 0) {\n      return;\n    }\n\n    // To do: if links are added in events, like they are in `markdown-rs`,\n    // this is needed.\n    // // Calculate jumps: where items in the current list move to.\n    // /** @type {Array<Jump>} */\n    // const jumps = []\n    // let index = 0\n    // let addAcc = 0\n    // let removeAcc = 0\n    // while (index < this.map.length) {\n    //   const [at, remove, add] = this.map[index]\n    //   removeAcc += remove\n    //   addAcc += add.length\n    //   jumps.push([at, removeAcc, addAcc])\n    //   index += 1\n    // }\n    //\n    // . shiftLinks(events, jumps)\n\n    let index = this.map.length;\n    /** @type {Array<Array<Event>>} */\n    const vecs = [];\n    while (index > 0) {\n      index -= 1;\n      vecs.push(events.slice(this.map[index][0] + this.map[index][1]), this.map[index][2]);\n\n      // Truncate rest.\n      events.length = this.map[index][0];\n    }\n    vecs.push(events.slice());\n    events.length = 0;\n    let slice = vecs.pop();\n    while (slice) {\n      for (const element of slice) {\n        events.push(element);\n      }\n      slice = vecs.pop();\n    }\n\n    // Truncate everything.\n    this.map.length = 0;\n  }\n}\n\n/**\n * Create an edit.\n *\n * @param {EditMap} editMap\n * @param {number} at\n * @param {number} remove\n * @param {Array<Event>} add\n * @returns {undefined}\n */\nfunction addImplementation(editMap, at, remove, add) {\n  let index = 0;\n\n  /* c8 ignore next 3 -- `resolve` is never called without tables, so without edits. */\n  if (remove === 0 && add.length === 0) {\n    return;\n  }\n  while (index < editMap.map.length) {\n    if (editMap.map[index][0] === at) {\n      editMap.map[index][1] += remove;\n\n      // To do: before not used by tables, use when moving to micromark.\n      // if (before) {\n      //   add.push(...editMap.map[index][2])\n      //   editMap.map[index][2] = add\n      // } else {\n      editMap.map[index][2].push(...add);\n      // }\n\n      return;\n    }\n    index += 1;\n  }\n  editMap.map.push([at, remove, add]);\n}\n\n// /**\n//  * Shift `previous` and `next` links according to `jumps`.\n//  *\n//  * This fixes links in case there are events removed or added between them.\n//  *\n//  * @param {Array<Event>} events\n//  * @param {Array<Jump>} jumps\n//  */\n// function shiftLinks(events, jumps) {\n//   let jumpIndex = 0\n//   let index = 0\n//   let add = 0\n//   let rm = 0\n\n//   while (index < events.length) {\n//     const rmCurr = rm\n\n//     while (jumpIndex < jumps.length && jumps[jumpIndex][0] <= index) {\n//       add = jumps[jumpIndex][2]\n//       rm = jumps[jumpIndex][1]\n//       jumpIndex += 1\n//     }\n\n//     // Ignore items that will be removed.\n//     if (rm > rmCurr) {\n//       index += rm - rmCurr\n//     } else {\n//       // ?\n//       // if let Some(link) = &events[index].link {\n//       //     if let Some(next) = link.next {\n//       //         events[next].link.as_mut().unwrap().previous = Some(index + add - rm);\n//       //         while jumpIndex < jumps.len() && jumps[jumpIndex].0 <= next {\n//       //             add = jumps[jumpIndex].2;\n//       //             rm = jumps[jumpIndex].1;\n//       //             jumpIndex += 1;\n//       //         }\n//       //         events[index].link.as_mut().unwrap().next = Some(next + add - rm);\n//       //         index = next;\n//       //         continue;\n//       //     }\n//       // }\n//       index += 1\n//     }\n//   }\n// }", "/**\n * @import {Event} from 'micromark-util-types'\n */\n\n/**\n * @typedef {'center' | 'left' | 'none' | 'right'} Align\n */\n\n/**\n * Figure out the alignment of a GFM table.\n *\n * @param {Readonly<Array<Event>>} events\n *   List of events.\n * @param {number} index\n *   Table enter event.\n * @returns {Array<Align>}\n *   List of aligns.\n */\nexport function gfmTableAlign(events, index) {\n  let inDelimiterRow = false;\n  /** @type {Array<Align>} */\n  const align = [];\n  while (index < events.length) {\n    const event = events[index];\n    if (inDelimiterRow) {\n      if (event[0] === 'enter') {\n        // Start of alignment value: set a new column.\n        // To do: `markdown-rs` uses `tableDelimiterCellValue`.\n        if (event[1].type === 'tableContent') {\n          align.push(events[index + 1][1].type === 'tableDelimiterMarker' ? 'left' : 'none');\n        }\n      }\n      // Exits:\n      // End of alignment value: change the column.\n      // To do: `markdown-rs` uses `tableDelimiterCellValue`.\n      else if (event[1].type === 'tableContent') {\n        if (events[index - 1][1].type === 'tableDelimiterMarker') {\n          const alignIndex = align.length - 1;\n          align[alignIndex] = align[alignIndex] === 'left' ? 'center' : 'right';\n        }\n      }\n      // Done!\n      else if (event[1].type === 'tableDelimiterRow') {\n        break;\n      }\n    } else if (event[0] === 'enter' && event[1].type === 'tableDelimiterRow') {\n      inDelimiterRow = true;\n    }\n    index += 1;\n  }\n  return align;\n}", "/**\n * @import {Event, Extension, Point, Resolver, State, Token, TokenizeContext, Tokenizer} from 'micromark-util-types'\n */\n\n/**\n * @typedef {[number, number, number, number]} Range\n *   Cell info.\n *\n * @typedef {0 | 1 | 2 | 3} RowKind\n *   Where we are: `1` for head row, `2` for delimiter row, `3` for body row.\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownLineEndingOrSpace, markdownSpace } from 'micromark-util-character';\nimport { EditMap } from './edit-map.js';\nimport { gfmTableAlign } from './infer.js';\n\n/**\n * Create an HTML extension for `micromark` to support GitHub tables syntax.\n *\n * @returns {Extension}\n *   Extension for `micromark` that can be passed in `extensions` to enable GFM\n *   table syntax.\n */\nexport function gfmTable() {\n  return {\n    flow: {\n      null: {\n        name: 'table',\n        tokenize: tokenizeTable,\n        resolveAll: resolveTable\n      }\n    }\n  };\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeTable(effects, ok, nok) {\n  const self = this;\n  let size = 0;\n  let sizeB = 0;\n  /** @type {boolean | undefined} */\n  let seen;\n  return start;\n\n  /**\n   * Start of a GFM table.\n   *\n   * If there is a valid table row or table head before, then we try to parse\n   * another row.\n   * Otherwise, we try to parse a head.\n   *\n   * ```markdown\n   * > | | a |\n   *     ^\n   *   | | - |\n   * > | | b |\n   *     ^\n   * ```\n   * @type {State}\n   */\n  function start(code) {\n    let index = self.events.length - 1;\n    while (index > -1) {\n      const type = self.events[index][1].type;\n      if (type === \"lineEnding\" ||\n      // Note: markdown-rs uses `whitespace` instead of `linePrefix`\n      type === \"linePrefix\") index--;else break;\n    }\n    const tail = index > -1 ? self.events[index][1].type : null;\n    const next = tail === 'tableHead' || tail === 'tableRow' ? bodyRowStart : headRowBefore;\n\n    // Don\u2019t allow lazy body rows.\n    if (next === bodyRowStart && self.parser.lazy[self.now().line]) {\n      return nok(code);\n    }\n    return next(code);\n  }\n\n  /**\n   * Before table head row.\n   *\n   * ```markdown\n   * > | | a |\n   *     ^\n   *   | | - |\n   *   | | b |\n   * ```\n   *\n   * @type {State}\n   */\n  function headRowBefore(code) {\n    effects.enter('tableHead');\n    effects.enter('tableRow');\n    return headRowStart(code);\n  }\n\n  /**\n   * Before table head row, after whitespace.\n   *\n   * ```markdown\n   * > | | a |\n   *     ^\n   *   | | - |\n   *   | | b |\n   * ```\n   *\n   * @type {State}\n   */\n  function headRowStart(code) {\n    if (code === 124) {\n      return headRowBreak(code);\n    }\n\n    // To do: micromark-js should let us parse our own whitespace in extensions,\n    // like `markdown-rs`:\n    //\n    // ```js\n    // // 4+ spaces.\n    // if (markdownSpace(code)) {\n    //   return nok(code)\n    // }\n    // ```\n\n    seen = true;\n    // Count the first character, that isn\u2019t a pipe, double.\n    sizeB += 1;\n    return headRowBreak(code);\n  }\n\n  /**\n   * At break in table head row.\n   *\n   * ```markdown\n   * > | | a |\n   *     ^\n   *       ^\n   *         ^\n   *   | | - |\n   *   | | b |\n   * ```\n   *\n   * @type {State}\n   */\n  function headRowBreak(code) {\n    if (code === null) {\n      // Note: in `markdown-rs`, we need to reset, in `micromark-js` we don\u2018t.\n      return nok(code);\n    }\n    if (markdownLineEnding(code)) {\n      // If anything other than one pipe (ignoring whitespace) was used, it\u2019s fine.\n      if (sizeB > 1) {\n        sizeB = 0;\n        // To do: check if this works.\n        // Feel free to interrupt:\n        self.interrupt = true;\n        effects.exit('tableRow');\n        effects.enter(\"lineEnding\");\n        effects.consume(code);\n        effects.exit(\"lineEnding\");\n        return headDelimiterStart;\n      }\n\n      // Note: in `markdown-rs`, we need to reset, in `micromark-js` we don\u2018t.\n      return nok(code);\n    }\n    if (markdownSpace(code)) {\n      // To do: check if this is fine.\n      // effects.attempt(State::Next(StateName::GfmTableHeadRowBreak), State::Nok)\n      // State::Retry(space_or_tab(tokenizer))\n      return factorySpace(effects, headRowBreak, \"whitespace\")(code);\n    }\n    sizeB += 1;\n    if (seen) {\n      seen = false;\n      // Header cell count.\n      size += 1;\n    }\n    if (code === 124) {\n      effects.enter('tableCellDivider');\n      effects.consume(code);\n      effects.exit('tableCellDivider');\n      // Whether a delimiter was seen.\n      seen = true;\n      return headRowBreak;\n    }\n\n    // Anything else is cell data.\n    effects.enter(\"data\");\n    return headRowData(code);\n  }\n\n  /**\n   * In table head row data.\n   *\n   * ```markdown\n   * > | | a |\n   *       ^\n   *   | | - |\n   *   | | b |\n   * ```\n   *\n   * @type {State}\n   */\n  function headRowData(code) {\n    if (code === null || code === 124 || markdownLineEndingOrSpace(code)) {\n      effects.exit(\"data\");\n      return headRowBreak(code);\n    }\n    effects.consume(code);\n    return code === 92 ? headRowEscape : headRowData;\n  }\n\n  /**\n   * In table head row escape.\n   *\n   * ```markdown\n   * > | | a\\-b |\n   *         ^\n   *   | | ---- |\n   *   | | c    |\n   * ```\n   *\n   * @type {State}\n   */\n  function headRowEscape(code) {\n    if (code === 92 || code === 124) {\n      effects.consume(code);\n      return headRowData;\n    }\n    return headRowData(code);\n  }\n\n  /**\n   * Before delimiter row.\n   *\n   * ```markdown\n   *   | | a |\n   * > | | - |\n   *     ^\n   *   | | b |\n   * ```\n   *\n   * @type {State}\n   */\n  function headDelimiterStart(code) {\n    // Reset `interrupt`.\n    self.interrupt = false;\n\n    // Note: in `markdown-rs`, we need to handle piercing here too.\n    if (self.parser.lazy[self.now().line]) {\n      return nok(code);\n    }\n    effects.enter('tableDelimiterRow');\n    // Track if we\u2019ve seen a `:` or `|`.\n    seen = false;\n    if (markdownSpace(code)) {\n      return factorySpace(effects, headDelimiterBefore, \"linePrefix\", self.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4)(code);\n    }\n    return headDelimiterBefore(code);\n  }\n\n  /**\n   * Before delimiter row, after optional whitespace.\n   *\n   * Reused when a `|` is found later, to parse another cell.\n   *\n   * ```markdown\n   *   | | a |\n   * > | | - |\n   *     ^\n   *   | | b |\n   * ```\n   *\n   * @type {State}\n   */\n  function headDelimiterBefore(code) {\n    if (code === 45 || code === 58) {\n      return headDelimiterValueBefore(code);\n    }\n    if (code === 124) {\n      seen = true;\n      // If we start with a pipe, we open a cell marker.\n      effects.enter('tableCellDivider');\n      effects.consume(code);\n      effects.exit('tableCellDivider');\n      return headDelimiterCellBefore;\n    }\n\n    // More whitespace / empty row not allowed at start.\n    return headDelimiterNok(code);\n  }\n\n  /**\n   * After `|`, before delimiter cell.\n   *\n   * ```markdown\n   *   | | a |\n   * > | | - |\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function headDelimiterCellBefore(code) {\n    if (markdownSpace(code)) {\n      return factorySpace(effects, headDelimiterValueBefore, \"whitespace\")(code);\n    }\n    return headDelimiterValueBefore(code);\n  }\n\n  /**\n   * Before delimiter cell value.\n   *\n   * ```markdown\n   *   | | a |\n   * > | | - |\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function headDelimiterValueBefore(code) {\n    // Align: left.\n    if (code === 58) {\n      sizeB += 1;\n      seen = true;\n      effects.enter('tableDelimiterMarker');\n      effects.consume(code);\n      effects.exit('tableDelimiterMarker');\n      return headDelimiterLeftAlignmentAfter;\n    }\n\n    // Align: none.\n    if (code === 45) {\n      sizeB += 1;\n      // To do: seems weird that this *isn\u2019t* left aligned, but that state is used?\n      return headDelimiterLeftAlignmentAfter(code);\n    }\n    if (code === null || markdownLineEnding(code)) {\n      return headDelimiterCellAfter(code);\n    }\n    return headDelimiterNok(code);\n  }\n\n  /**\n   * After delimiter cell left alignment marker.\n   *\n   * ```markdown\n   *   | | a  |\n   * > | | :- |\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function headDelimiterLeftAlignmentAfter(code) {\n    if (code === 45) {\n      effects.enter('tableDelimiterFiller');\n      return headDelimiterFiller(code);\n    }\n\n    // Anything else is not ok after the left-align colon.\n    return headDelimiterNok(code);\n  }\n\n  /**\n   * In delimiter cell filler.\n   *\n   * ```markdown\n   *   | | a |\n   * > | | - |\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function headDelimiterFiller(code) {\n    if (code === 45) {\n      effects.consume(code);\n      return headDelimiterFiller;\n    }\n\n    // Align is `center` if it was `left`, `right` otherwise.\n    if (code === 58) {\n      seen = true;\n      effects.exit('tableDelimiterFiller');\n      effects.enter('tableDelimiterMarker');\n      effects.consume(code);\n      effects.exit('tableDelimiterMarker');\n      return headDelimiterRightAlignmentAfter;\n    }\n    effects.exit('tableDelimiterFiller');\n    return headDelimiterRightAlignmentAfter(code);\n  }\n\n  /**\n   * After delimiter cell right alignment marker.\n   *\n   * ```markdown\n   *   | |  a |\n   * > | | -: |\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function headDelimiterRightAlignmentAfter(code) {\n    if (markdownSpace(code)) {\n      return factorySpace(effects, headDelimiterCellAfter, \"whitespace\")(code);\n    }\n    return headDelimiterCellAfter(code);\n  }\n\n  /**\n   * After delimiter cell.\n   *\n   * ```markdown\n   *   | |  a |\n   * > | | -: |\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function headDelimiterCellAfter(code) {\n    if (code === 124) {\n      return headDelimiterBefore(code);\n    }\n    if (code === null || markdownLineEnding(code)) {\n      // Exit when:\n      // * there was no `:` or `|` at all (it\u2019s a thematic break or setext\n      //   underline instead)\n      // * the header cell count is not the delimiter cell count\n      if (!seen || size !== sizeB) {\n        return headDelimiterNok(code);\n      }\n\n      // Note: in markdown-rs`, a reset is needed here.\n      effects.exit('tableDelimiterRow');\n      effects.exit('tableHead');\n      // To do: in `markdown-rs`, resolvers need to be registered manually.\n      // effects.register_resolver(ResolveName::GfmTable)\n      return ok(code);\n    }\n    return headDelimiterNok(code);\n  }\n\n  /**\n   * In delimiter row, at a disallowed byte.\n   *\n   * ```markdown\n   *   | | a |\n   * > | | x |\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function headDelimiterNok(code) {\n    // Note: in `markdown-rs`, we need to reset, in `micromark-js` we don\u2018t.\n    return nok(code);\n  }\n\n  /**\n   * Before table body row.\n   *\n   * ```markdown\n   *   | | a |\n   *   | | - |\n   * > | | b |\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function bodyRowStart(code) {\n    // Note: in `markdown-rs` we need to manually take care of a prefix,\n    // but in `micromark-js` that is done for us, so if we\u2019re here, we\u2019re\n    // never at whitespace.\n    effects.enter('tableRow');\n    return bodyRowBreak(code);\n  }\n\n  /**\n   * At break in table body row.\n   *\n   * ```markdown\n   *   | | a |\n   *   | | - |\n   * > | | b |\n   *     ^\n   *       ^\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function bodyRowBreak(code) {\n    if (code === 124) {\n      effects.enter('tableCellDivider');\n      effects.consume(code);\n      effects.exit('tableCellDivider');\n      return bodyRowBreak;\n    }\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit('tableRow');\n      return ok(code);\n    }\n    if (markdownSpace(code)) {\n      return factorySpace(effects, bodyRowBreak, \"whitespace\")(code);\n    }\n\n    // Anything else is cell content.\n    effects.enter(\"data\");\n    return bodyRowData(code);\n  }\n\n  /**\n   * In table body row data.\n   *\n   * ```markdown\n   *   | | a |\n   *   | | - |\n   * > | | b |\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function bodyRowData(code) {\n    if (code === null || code === 124 || markdownLineEndingOrSpace(code)) {\n      effects.exit(\"data\");\n      return bodyRowBreak(code);\n    }\n    effects.consume(code);\n    return code === 92 ? bodyRowEscape : bodyRowData;\n  }\n\n  /**\n   * In table body row escape.\n   *\n   * ```markdown\n   *   | | a    |\n   *   | | ---- |\n   * > | | b\\-c |\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function bodyRowEscape(code) {\n    if (code === 92 || code === 124) {\n      effects.consume(code);\n      return bodyRowData;\n    }\n    return bodyRowData(code);\n  }\n}\n\n/** @type {Resolver} */\n\nfunction resolveTable(events, context) {\n  let index = -1;\n  let inFirstCellAwaitingPipe = true;\n  /** @type {RowKind} */\n  let rowKind = 0;\n  /** @type {Range} */\n  let lastCell = [0, 0, 0, 0];\n  /** @type {Range} */\n  let cell = [0, 0, 0, 0];\n  let afterHeadAwaitingFirstBodyRow = false;\n  let lastTableEnd = 0;\n  /** @type {Token | undefined} */\n  let currentTable;\n  /** @type {Token | undefined} */\n  let currentBody;\n  /** @type {Token | undefined} */\n  let currentCell;\n  const map = new EditMap();\n  while (++index < events.length) {\n    const event = events[index];\n    const token = event[1];\n    if (event[0] === 'enter') {\n      // Start of head.\n      if (token.type === 'tableHead') {\n        afterHeadAwaitingFirstBodyRow = false;\n\n        // Inject previous (body end and) table end.\n        if (lastTableEnd !== 0) {\n          flushTableEnd(map, context, lastTableEnd, currentTable, currentBody);\n          currentBody = undefined;\n          lastTableEnd = 0;\n        }\n\n        // Inject table start.\n        currentTable = {\n          type: 'table',\n          start: Object.assign({}, token.start),\n          // Note: correct end is set later.\n          end: Object.assign({}, token.end)\n        };\n        map.add(index, 0, [['enter', currentTable, context]]);\n      } else if (token.type === 'tableRow' || token.type === 'tableDelimiterRow') {\n        inFirstCellAwaitingPipe = true;\n        currentCell = undefined;\n        lastCell = [0, 0, 0, 0];\n        cell = [0, index + 1, 0, 0];\n\n        // Inject table body start.\n        if (afterHeadAwaitingFirstBodyRow) {\n          afterHeadAwaitingFirstBodyRow = false;\n          currentBody = {\n            type: 'tableBody',\n            start: Object.assign({}, token.start),\n            // Note: correct end is set later.\n            end: Object.assign({}, token.end)\n          };\n          map.add(index, 0, [['enter', currentBody, context]]);\n        }\n        rowKind = token.type === 'tableDelimiterRow' ? 2 : currentBody ? 3 : 1;\n      }\n      // Cell data.\n      else if (rowKind && (token.type === \"data\" || token.type === 'tableDelimiterMarker' || token.type === 'tableDelimiterFiller')) {\n        inFirstCellAwaitingPipe = false;\n\n        // First value in cell.\n        if (cell[2] === 0) {\n          if (lastCell[1] !== 0) {\n            cell[0] = cell[1];\n            currentCell = flushCell(map, context, lastCell, rowKind, undefined, currentCell);\n            lastCell = [0, 0, 0, 0];\n          }\n          cell[2] = index;\n        }\n      } else if (token.type === 'tableCellDivider') {\n        if (inFirstCellAwaitingPipe) {\n          inFirstCellAwaitingPipe = false;\n        } else {\n          if (lastCell[1] !== 0) {\n            cell[0] = cell[1];\n            currentCell = flushCell(map, context, lastCell, rowKind, undefined, currentCell);\n          }\n          lastCell = cell;\n          cell = [lastCell[1], index, 0, 0];\n        }\n      }\n    }\n    // Exit events.\n    else if (token.type === 'tableHead') {\n      afterHeadAwaitingFirstBodyRow = true;\n      lastTableEnd = index;\n    } else if (token.type === 'tableRow' || token.type === 'tableDelimiterRow') {\n      lastTableEnd = index;\n      if (lastCell[1] !== 0) {\n        cell[0] = cell[1];\n        currentCell = flushCell(map, context, lastCell, rowKind, index, currentCell);\n      } else if (cell[1] !== 0) {\n        currentCell = flushCell(map, context, cell, rowKind, index, currentCell);\n      }\n      rowKind = 0;\n    } else if (rowKind && (token.type === \"data\" || token.type === 'tableDelimiterMarker' || token.type === 'tableDelimiterFiller')) {\n      cell[3] = index;\n    }\n  }\n  if (lastTableEnd !== 0) {\n    flushTableEnd(map, context, lastTableEnd, currentTable, currentBody);\n  }\n  map.consume(context.events);\n\n  // To do: move this into `html`, when events are exposed there.\n  // That\u2019s what `markdown-rs` does.\n  // That needs updates to `mdast-util-gfm-table`.\n  index = -1;\n  while (++index < context.events.length) {\n    const event = context.events[index];\n    if (event[0] === 'enter' && event[1].type === 'table') {\n      event[1]._align = gfmTableAlign(context.events, index);\n    }\n  }\n  return events;\n}\n\n/**\n * Generate a cell.\n *\n * @param {EditMap} map\n * @param {Readonly<TokenizeContext>} context\n * @param {Readonly<Range>} range\n * @param {RowKind} rowKind\n * @param {number | undefined} rowEnd\n * @param {Token | undefined} previousCell\n * @returns {Token | undefined}\n */\n// eslint-disable-next-line max-params\nfunction flushCell(map, context, range, rowKind, rowEnd, previousCell) {\n  // `markdown-rs` uses:\n  // rowKind === 2 ? 'tableDelimiterCell' : 'tableCell'\n  const groupName = rowKind === 1 ? 'tableHeader' : rowKind === 2 ? 'tableDelimiter' : 'tableData';\n  // `markdown-rs` uses:\n  // rowKind === 2 ? 'tableDelimiterCellValue' : 'tableCellText'\n  const valueName = 'tableContent';\n\n  // Insert an exit for the previous cell, if there is one.\n  //\n  // ```markdown\n  // > | | aa | bb | cc |\n  //          ^-- exit\n  //           ^^^^-- this cell\n  // ```\n  if (range[0] !== 0) {\n    previousCell.end = Object.assign({}, getPoint(context.events, range[0]));\n    map.add(range[0], 0, [['exit', previousCell, context]]);\n  }\n\n  // Insert enter of this cell.\n  //\n  // ```markdown\n  // > | | aa | bb | cc |\n  //           ^-- enter\n  //           ^^^^-- this cell\n  // ```\n  const now = getPoint(context.events, range[1]);\n  previousCell = {\n    type: groupName,\n    start: Object.assign({}, now),\n    // Note: correct end is set later.\n    end: Object.assign({}, now)\n  };\n  map.add(range[1], 0, [['enter', previousCell, context]]);\n\n  // Insert text start at first data start and end at last data end, and\n  // remove events between.\n  //\n  // ```markdown\n  // > | | aa | bb | cc |\n  //            ^-- enter\n  //             ^-- exit\n  //           ^^^^-- this cell\n  // ```\n  if (range[2] !== 0) {\n    const relatedStart = getPoint(context.events, range[2]);\n    const relatedEnd = getPoint(context.events, range[3]);\n    /** @type {Token} */\n    const valueToken = {\n      type: valueName,\n      start: Object.assign({}, relatedStart),\n      end: Object.assign({}, relatedEnd)\n    };\n    map.add(range[2], 0, [['enter', valueToken, context]]);\n    if (rowKind !== 2) {\n      // Fix positional info on remaining events\n      const start = context.events[range[2]];\n      const end = context.events[range[3]];\n      start[1].end = Object.assign({}, end[1].end);\n      start[1].type = \"chunkText\";\n      start[1].contentType = \"text\";\n\n      // Remove if needed.\n      if (range[3] > range[2] + 1) {\n        const a = range[2] + 1;\n        const b = range[3] - range[2] - 1;\n        map.add(a, b, []);\n      }\n    }\n    map.add(range[3] + 1, 0, [['exit', valueToken, context]]);\n  }\n\n  // Insert an exit for the last cell, if at the row end.\n  //\n  // ```markdown\n  // > | | aa | bb | cc |\n  //                    ^-- exit\n  //               ^^^^^^-- this cell (the last one contains two \u201Cbetween\u201D parts)\n  // ```\n  if (rowEnd !== undefined) {\n    previousCell.end = Object.assign({}, getPoint(context.events, rowEnd));\n    map.add(rowEnd, 0, [['exit', previousCell, context]]);\n    previousCell = undefined;\n  }\n  return previousCell;\n}\n\n/**\n * Generate table end (and table body end).\n *\n * @param {Readonly<EditMap>} map\n * @param {Readonly<TokenizeContext>} context\n * @param {number} index\n * @param {Token} table\n * @param {Token | undefined} tableBody\n */\n// eslint-disable-next-line max-params\nfunction flushTableEnd(map, context, index, table, tableBody) {\n  /** @type {Array<Event>} */\n  const exits = [];\n  const related = getPoint(context.events, index);\n  if (tableBody) {\n    tableBody.end = Object.assign({}, related);\n    exits.push(['exit', tableBody, context]);\n  }\n  table.end = Object.assign({}, related);\n  exits.push(['exit', table, context]);\n  map.add(index + 1, 0, exits);\n}\n\n/**\n * @param {Readonly<Array<Event>>} events\n * @param {number} index\n * @returns {Readonly<Point>}\n */\nfunction getPoint(events, index) {\n  const event = events[index];\n  const side = event[0] === 'enter' ? 'start' : 'end';\n  return event[1][side];\n}", "/**\n * @import {Extension, State, TokenizeContext, Tokenizer} from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownLineEndingOrSpace, markdownSpace } from 'micromark-util-character';\nconst tasklistCheck = {\n  name: 'tasklistCheck',\n  tokenize: tokenizeTasklistCheck\n};\n\n/**\n * Create an HTML extension for `micromark` to support GFM task list items\n * syntax.\n *\n * @returns {Extension}\n *   Extension for `micromark` that can be passed in `htmlExtensions` to\n *   support GFM task list items when serializing to HTML.\n */\nexport function gfmTaskListItem() {\n  return {\n    text: {\n      [91]: tasklistCheck\n    }\n  };\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeTasklistCheck(effects, ok, nok) {\n  const self = this;\n  return open;\n\n  /**\n   * At start of task list item check.\n   *\n   * ```markdown\n   * > | * [x] y.\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function open(code) {\n    if (\n    // Exit if there\u2019s stuff before.\n    self.previous !== null ||\n    // Exit if not in the first content that is the first child of a list\n    // item.\n    !self._gfmTasklistFirstContentOfListItem) {\n      return nok(code);\n    }\n    effects.enter('taskListCheck');\n    effects.enter('taskListCheckMarker');\n    effects.consume(code);\n    effects.exit('taskListCheckMarker');\n    return inside;\n  }\n\n  /**\n   * In task list item check.\n   *\n   * ```markdown\n   * > | * [x] y.\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function inside(code) {\n    // Currently we match how GH works in files.\n    // To match how GH works in comments, use `markdownSpace` (`[\\t ]`) instead\n    // of `markdownLineEndingOrSpace` (`[\\t\\n\\r ]`).\n    if (markdownLineEndingOrSpace(code)) {\n      effects.enter('taskListCheckValueUnchecked');\n      effects.consume(code);\n      effects.exit('taskListCheckValueUnchecked');\n      return close;\n    }\n    if (code === 88 || code === 120) {\n      effects.enter('taskListCheckValueChecked');\n      effects.consume(code);\n      effects.exit('taskListCheckValueChecked');\n      return close;\n    }\n    return nok(code);\n  }\n\n  /**\n   * At close of task list item check.\n   *\n   * ```markdown\n   * > | * [x] y.\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function close(code) {\n    if (code === 93) {\n      effects.enter('taskListCheckMarker');\n      effects.consume(code);\n      effects.exit('taskListCheckMarker');\n      effects.exit('taskListCheck');\n      return after;\n    }\n    return nok(code);\n  }\n\n  /**\n   * @type {State}\n   */\n  function after(code) {\n    // EOL in paragraph means there must be something else after it.\n    if (markdownLineEnding(code)) {\n      return ok(code);\n    }\n\n    // Space or tab?\n    // Check what comes after.\n    if (markdownSpace(code)) {\n      return effects.check({\n        tokenize: spaceThenNonSpace\n      }, ok, nok)(code);\n    }\n\n    // EOF, or non-whitespace, both wrong.\n    return nok(code);\n  }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction spaceThenNonSpace(effects, ok, nok) {\n  return factorySpace(effects, after, \"whitespace\");\n\n  /**\n   * After whitespace, after task list item check.\n   *\n   * ```markdown\n   * > | * [x] y.\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    // EOF means there was nothing, so bad.\n    // EOL means there\u2019s content after it, so good.\n    // Impossible to have more spaces.\n    // Anything else is good.\n    return code === null ? nok(code) : ok(code);\n  }\n}", "/**\n * @typedef {import('micromark-extension-gfm-footnote').HtmlOptions} HtmlOptions\n * @typedef {import('micromark-extension-gfm-strikethrough').Options} Options\n * @typedef {import('micromark-util-types').Extension} Extension\n * @typedef {import('micromark-util-types').HtmlExtension} HtmlExtension\n */\n\nimport {\n  combineExtensions,\n  combineHtmlExtensions\n} from 'micromark-util-combine-extensions'\nimport {\n  gfmAutolinkLiteral,\n  gfmAutolinkLiteralHtml\n} from 'micromark-extension-gfm-autolink-literal'\nimport {gfmFootnote, gfmFootnoteHtml} from 'micromark-extension-gfm-footnote'\nimport {\n  gfmStrikethrough,\n  gfmStrikethroughHtml\n} from 'micromark-extension-gfm-strikethrough'\nimport {gfmTable, gfmTableHtml} from 'micromark-extension-gfm-table'\nimport {gfmTagfilterHtml} from 'micromark-extension-gfm-tagfilter'\nimport {\n  gfmTaskListItem,\n  gfmTaskListItemHtml\n} from 'micromark-extension-gfm-task-list-item'\n\n/**\n * Create an extension for `micromark` to enable GFM syntax.\n *\n * @param {Options | null | undefined} [options]\n *   Configuration (optional).\n *\n *   Passed to `micromark-extens-gfm-strikethrough`.\n * @returns {Extension}\n *   Extension for `micromark` that can be passed in `extensions` to enable GFM\n *   syntax.\n */\nexport function gfm(options) {\n  return combineExtensions([\n    gfmAutolinkLiteral(),\n    gfmFootnote(),\n    gfmStrikethrough(options),\n    gfmTable(),\n    gfmTaskListItem()\n  ])\n}\n\n/**\n * Create an extension for `micromark` to support GFM when serializing to HTML.\n *\n * @param {HtmlOptions | null | undefined} [options]\n *   Configuration (optional).\n *\n *   Passed to `micromark-extens-gfm-footnote`.\n * @returns {HtmlExtension}\n *   Extension for `micromark` that can be passed in `htmlExtensions` to\n *   support GFM when serializing to HTML.\n */\nexport function gfmHtml(options) {\n  return combineHtmlExtensions([\n    gfmAutolinkLiteralHtml(),\n    gfmFootnoteHtml(options),\n    gfmStrikethroughHtml(),\n    gfmTableHtml(),\n    gfmTagfilterHtml(),\n    gfmTaskListItemHtml()\n  ])\n}\n", "/**\n * @import {Root} from 'mdast'\n * @import {Options} from 'remark-gfm'\n * @import {} from 'remark-parse'\n * @import {} from 'remark-stringify'\n * @import {Processor} from 'unified'\n */\n\nimport {gfmFromMarkdown, gfmToMarkdown} from 'mdast-util-gfm'\nimport {gfm} from 'micromark-extension-gfm'\n\n/** @type {Options} */\nconst emptyOptions = {}\n\n/**\n * Add support GFM (autolink literals, footnotes, strikethrough, tables,\n * tasklists).\n *\n * @param {Options | null | undefined} [options]\n *   Configuration (optional).\n * @returns {undefined}\n *   Nothing.\n */\nexport default function remarkGfm(options) {\n  // @ts-expect-error: TS is wrong about `this`.\n  // eslint-disable-next-line unicorn/no-this-assignment\n  const self = /** @type {Processor<Root>} */ (this)\n  const settings = options || emptyOptions\n  const data = self.data()\n\n  const micromarkExtensions =\n    data.micromarkExtensions || (data.micromarkExtensions = [])\n  const fromMarkdownExtensions =\n    data.fromMarkdownExtensions || (data.fromMarkdownExtensions = [])\n  const toMarkdownExtensions =\n    data.toMarkdownExtensions || (data.toMarkdownExtensions = [])\n\n  micromarkExtensions.push(gfm(settings))\n  fromMarkdownExtensions.push(gfmFromMarkdown())\n  toMarkdownExtensions.push(gfmToMarkdown(settings))\n}\n", "import clsx from 'clsx';\nimport React, { ComponentProps } from 'react';\n\nexport const Anchor = ({ children, href }: ComponentProps<'a'>) => {\n  const isEmail = href?.startsWith('mailto:');\n  const isUrl = href?.startsWith('http');\n\n  if (!href || (!isEmail && !isUrl)) return <>{children}</>;\n\n  return (\n    <a\n      className={clsx({ 'str-chat__message-url-link': isUrl })}\n      href={href}\n      rel='nofollow noreferrer noopener'\n      target='_blank'\n    >\n      {children}\n    </a>\n  );\n};\n", "import React from 'react';\nimport { PropsWithChildrenOnly } from '../../../../types/types';\n\nexport const Emoji = ({ children }: PropsWithChildrenOnly) => (\n  <span className='inline-text-emoji' data-testid='inline-text-emoji'>\n    {children}\n  </span>\n);\n", "import React, { PropsWithChildren } from 'react';\n\nimport type { UserResponse } from 'stream-chat';\nimport type { DefaultStreamChatGenerics } from '../../../../types/types';\n\nexport type MentionProps<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = PropsWithChildren<{\n  node: {\n    mentionedUser: UserResponse<StreamChatGenerics>;\n  };\n}>;\n\nexport const Mention = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n  children,\n  node: { mentionedUser },\n}: MentionProps<StreamChatGenerics>) => (\n  <span className='str-chat__message-mention' data-user-id={mentionedUser.id}>\n    {children}\n  </span>\n);\n", "export const NullComponent = () => null;\n", "import { Component } from 'react';\nimport type { PropsWithChildren, ReactNode } from 'react';\n\ntype ErrorBoundaryProps = PropsWithChildren<{ fallback?: ReactNode }>;\n\nexport class ErrorBoundary extends Component<ErrorBoundaryProps, { hasError: boolean }> {\n  constructor(props: ErrorBoundaryProps) {\n    super(props);\n    this.state = { hasError: false };\n  }\n\n  static getDerivedStateFromError() {\n    return { hasError: true };\n  }\n\n  componentDidCatch(error: unknown, information: unknown) {\n    console.error(error, information);\n  }\n\n  render() {\n    if (this.state.hasError) {\n      return this.props.fallback;\n    }\n\n    return this.props.children;\n  }\n}\n", "import React from 'react';\nimport PropTypes from 'prop-types';\nimport Textarea from 'react-textarea-autosize';\nimport getCaretCoordinates from 'textarea-caret';\nimport clsx from 'clsx';\n\nimport { List as DefaultSuggestionList } from './List';\nimport {\n  DEFAULT_CARET_POSITION,\n  defaultScrollToItem,\n  errorMessage,\n  triggerPropsCheck,\n} from './utils';\n\nimport { CommandItem } from '../CommandItem';\nimport { UserItem } from '../UserItem';\nimport { isSafari } from '../../utils/browsers';\n\nexport class ReactTextareaAutocomplete extends React.Component {\n  static defaultProps = {\n    closeOnClickOutside: true,\n    maxRows: 10,\n    minChar: 1,\n    movePopupAsYouType: false,\n    scrollToItem: true,\n    value: '',\n  };\n\n  constructor(props) {\n    super(props);\n\n    const { loadingComponent, trigger, value } = this.props;\n\n    // TODO: it would be better to have the parent control state...\n    // if (value) this.state.value = value;\n\n    if (!loadingComponent) {\n      throw new Error('RTA: loadingComponent is not defined');\n    }\n\n    if (!trigger) {\n      throw new Error('RTA: trigger is not defined');\n    }\n\n    this.state = {\n      actualToken: '',\n      component: null,\n      currentTrigger: null,\n      data: null,\n      dataLoading: false,\n      isComposing: false,\n      left: null,\n      selectionEnd: 0,\n      selectionStart: 0,\n      top: null,\n      value: value || '',\n    };\n  }\n\n  // FIXME: unused method\n  getSelectionPosition = () => {\n    if (!this.textareaRef) return null;\n\n    return {\n      selectionEnd: this.textareaRef.selectionEnd,\n      selectionStart: this.textareaRef.selectionStart,\n    };\n  };\n\n  // FIXME: unused method\n  getSelectedText = () => {\n    if (!this.textareaRef) return null;\n    const { selectionEnd, selectionStart } = this.textareaRef;\n\n    if (selectionStart === selectionEnd) return null;\n\n    return this.state.value.substr(selectionStart, selectionEnd - selectionStart);\n  };\n\n  setCaretPosition = (position = 0) => {\n    if (!this.textareaRef) return;\n\n    this.textareaRef.focus();\n    this.textareaRef.setSelectionRange(position, position);\n  };\n\n  getCaretPosition = () => {\n    if (!this.textareaRef) return 0;\n\n    return this.textareaRef.selectionEnd;\n  };\n\n  /**\n   * isComposing prevents double submissions in Korean and other languages.\n   * starting point for a read:\n   * https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/isComposing\n   * In the long term, the fix should happen by handling keypress, but changing this has unknown implications.\n   * @param event React.KeyboardEvent\n   */\n  _defaultShouldSubmit = (event) =>\n    event.key === 'Enter' && !event.shiftKey && !event.nativeEvent.isComposing;\n\n  _handleKeyDown = (event) => {\n    const { shouldSubmit = this._defaultShouldSubmit } = this.props;\n\n    // prevent default behaviour when the selection list is rendered\n    if ((event.key === 'ArrowUp' || event.key === 'ArrowDown') && this.dropdownRef)\n      event.preventDefault();\n\n    if (shouldSubmit?.(event)) return this._onEnter(event);\n    if (event.key === ' ') return this._onSpace(event);\n    if (event.key === 'Escape') return this._closeAutocomplete();\n  };\n\n  _onEnter = async (event) => {\n    if (!this.textareaRef) return;\n\n    const trigger = this.state.currentTrigger;\n\n    if (!trigger || !this.state.data) {\n      // https://legacy.reactjs.org/docs/legacy-event-pooling.html\n      event.persist();\n      // trigger a submit\n      await this._replaceWord();\n      if (this.textareaRef) {\n        this.textareaRef.selectionEnd = 0;\n      }\n      this.props.handleSubmit(event);\n      this._closeAutocomplete();\n    }\n  };\n\n  _onSpace = () => {\n    if (!this.props.replaceWord || !this.textareaRef) return;\n\n    // don't change characters if the element doesn't have focus\n    const hasFocus = this.textareaRef.matches(':focus');\n    if (!hasFocus) return;\n\n    this._replaceWord();\n  };\n\n  _replaceWord = async () => {\n    const { value } = this.state;\n\n    const lastWordRegex = /([^\\s]+)(\\s*)$/;\n    const match = lastWordRegex.exec(value.slice(0, this.getCaretPosition()));\n    const lastWord = match && match[1];\n\n    if (!lastWord) return;\n\n    const spaces = match[2];\n\n    const newWord = await this.props.replaceWord(lastWord);\n    if (newWord == null) return;\n\n    const textBeforeWord = value.slice(0, this.getCaretPosition() - match[0].length);\n    const textAfterCaret = value.slice(this.getCaretPosition(), -1);\n    const newText = textBeforeWord + newWord + spaces + textAfterCaret;\n\n    this.setState(\n      {\n        value: newText,\n      },\n      () => {\n        // fire onChange event after successful selection\n        const e = new CustomEvent('change', { bubbles: true });\n        this.textareaRef.dispatchEvent(e);\n        if (this.props.onChange) this.props.onChange(e);\n      },\n    );\n  };\n\n  _onSelect = (newToken) => {\n    const {\n      closeCommandsList,\n      closeMentionsList,\n      onChange,\n      showCommandsList,\n      showMentionsList,\n    } = this.props;\n    const {\n      currentTrigger: stateTrigger,\n      selectionEnd,\n      value: textareaValue,\n    } = this.state;\n\n    const currentTrigger = showCommandsList ? '/' : showMentionsList ? '@' : stateTrigger;\n\n    if (!currentTrigger) return;\n\n    const computeCaretPosition = (position, token, startToken) => {\n      switch (position) {\n        case 'start':\n          return startToken;\n        case 'next':\n        case 'end':\n          return startToken + token.length;\n        default:\n          if (!Number.isInteger(position)) {\n            throw new Error(\n              'RTA: caretPosition should be \"start\", \"next\", \"end\" or number.',\n            );\n          }\n\n          return position;\n      }\n    };\n\n    const textToModify = showCommandsList\n      ? '/'\n      : showMentionsList\n        ? '@'\n        : textareaValue.slice(0, selectionEnd);\n\n    const startOfTokenPosition = textToModify.lastIndexOf(currentTrigger);\n\n    // we add space after emoji is selected if a caret position is next\n    const newTokenString =\n      newToken.caretPosition === 'next' ? `${newToken.text} ` : newToken.text;\n\n    const newCaretPosition = computeCaretPosition(\n      newToken.caretPosition,\n      newTokenString,\n      startOfTokenPosition,\n    );\n\n    const modifiedText = textToModify.substring(0, startOfTokenPosition) + newTokenString;\n    const valueToReplace = textareaValue.replace(textToModify, modifiedText);\n\n    // set the new textarea value and after that set the caret back to its position\n    this.setState(\n      {\n        dataLoading: false,\n        value: valueToReplace,\n      },\n      () => {\n        // fire onChange event after successful selection\n        const e = new CustomEvent('change', { bubbles: true });\n        this.textareaRef.dispatchEvent(e);\n        if (onChange) onChange(e);\n\n        this.setCaretPosition(newCaretPosition);\n      },\n    );\n\n    this._closeAutocomplete();\n    if (showCommandsList) closeCommandsList();\n    if (showMentionsList) closeMentionsList();\n  };\n\n  _getItemOnSelect = (paramTrigger) => {\n    const { currentTrigger: stateTrigger } = this.state;\n    const triggerSettings = this._getCurrentTriggerSettings(paramTrigger);\n\n    const currentTrigger = paramTrigger || stateTrigger;\n\n    if (!currentTrigger || !triggerSettings) return null;\n\n    const { callback } = triggerSettings;\n\n    if (!callback) return null;\n\n    return (item) => {\n      if (typeof callback !== 'function') {\n        throw new Error(\n          'Output functor is not defined! You have to define \"output\" function. https://github.com/webscopeio/react-textarea-autocomplete#trigger-type',\n        );\n      }\n      if (callback) {\n        return callback(item, currentTrigger);\n      }\n      return null;\n    };\n  };\n\n  _getTextToReplace = (paramTrigger) => {\n    const { actualToken, currentTrigger: stateTrigger } = this.state;\n    const triggerSettings = this._getCurrentTriggerSettings(paramTrigger);\n\n    const currentTrigger = paramTrigger || stateTrigger;\n\n    if (!currentTrigger || !triggerSettings) return null;\n\n    const { output } = triggerSettings;\n\n    return (item) => {\n      if (typeof item === 'object' && (!output || typeof output !== 'function')) {\n        throw new Error(\n          'Output functor is not defined! If you are using items as object you have to define \"output\" function. https://github.com/webscopeio/react-textarea-autocomplete#trigger-type',\n        );\n      }\n\n      if (output) {\n        const textToReplace = output(item, currentTrigger);\n\n        if (!textToReplace || typeof textToReplace === 'number') {\n          throw new Error(\n            `Output functor should return string or object in shape {text: string, caretPosition: string | number}.\\nGot \"${String(\n              textToReplace,\n            )}\". Check the implementation for trigger \"${currentTrigger}\" and its token \"${actualToken}\"\\n\\nSee https://github.com/webscopeio/react-textarea-autocomplete#trigger-type for more informations.\\n`,\n          );\n        }\n\n        if (typeof textToReplace === 'string') {\n          return {\n            caretPosition: DEFAULT_CARET_POSITION,\n            text: textToReplace,\n          };\n        }\n\n        if (!textToReplace.text && currentTrigger !== ':') {\n          throw new Error(\n            `Output \"text\" is not defined! Object should has shape {text: string, caretPosition: string | number}. Check the implementation for trigger \"${currentTrigger}\" and its token \"${actualToken}\"\\n`,\n          );\n        }\n\n        if (!textToReplace.caretPosition) {\n          throw new Error(\n            `Output \"caretPosition\" is not defined! Object should has shape {text: string, caretPosition: string | number}. Check the implementation for trigger \"${currentTrigger}\" and its token \"${actualToken}\"\\n`,\n          );\n        }\n\n        return textToReplace;\n      }\n\n      if (typeof item !== 'string') {\n        throw new Error('Output item should be string\\n');\n      }\n\n      return {\n        caretPosition: DEFAULT_CARET_POSITION,\n        text: `${currentTrigger}${item}${currentTrigger}`,\n      };\n    };\n  };\n\n  _getCurrentTriggerSettings = (paramTrigger) => {\n    const { currentTrigger: stateTrigger } = this.state;\n\n    const currentTrigger = paramTrigger || stateTrigger;\n\n    if (!currentTrigger) return null;\n\n    return this.props.trigger[currentTrigger];\n  };\n\n  _getValuesFromProvider = () => {\n    const { actualToken, currentTrigger } = this.state;\n    const triggerSettings = this._getCurrentTriggerSettings();\n\n    if (!currentTrigger || !triggerSettings) return;\n\n    const { component, dataProvider } = triggerSettings;\n\n    if (typeof dataProvider !== 'function') {\n      throw new Error('Trigger provider has to be a function!');\n    }\n\n    this.setState({ dataLoading: true });\n\n    // Modified: send the full text to support / style commands\n    dataProvider(actualToken, this.state.value, (data, token) => {\n      // Make sure that the result is still relevant for current query\n      if (token !== this.state.actualToken) return;\n\n      if (!Array.isArray(data)) {\n        throw new Error('Trigger provider has to provide an array!');\n      }\n\n      // throw away if we resolved old trigger\n      if (currentTrigger !== this.state.currentTrigger) return;\n\n      // if we haven't resolved any data let's close the autocomplete\n      if (!data.length) {\n        this._closeAutocomplete();\n        return;\n      }\n\n      this.setState({\n        component,\n        data,\n        dataLoading: false,\n      });\n    });\n  };\n\n  _getSuggestions = (paramTrigger) => {\n    const { currentTrigger: stateTrigger, data } = this.state;\n\n    const currentTrigger = paramTrigger || stateTrigger;\n\n    if (!currentTrigger || !data || (data && !data.length)) return null;\n\n    return data;\n  };\n\n  /**\n   * setup to emulate the UNSAFE_componentWillReceiveProps\n   */\n  static getDerivedStateFromProps(props, state) {\n    if (props.value !== state.propsValue || !state.value) {\n      return { propsValue: props.value, value: props.value };\n    } else {\n      return null;\n    }\n  }\n  /**\n   * Close autocomplete, also clean up trigger (to avoid slow promises)\n   */\n  _closeAutocomplete = () => {\n    this.setState({\n      currentTrigger: null,\n      data: null,\n      dataLoading: false,\n      left: null,\n      top: null,\n    });\n  };\n\n  _cleanUpProps = () => {\n    const props = { ...this.props };\n    const notSafe = [\n      'additionalTextareaProps',\n      'className',\n      'closeCommandsList',\n      'closeMentionsList',\n      'closeOnClickOutside',\n      'containerClassName',\n      'containerStyle',\n      'disableMentions',\n      'dropdownClassName',\n      'dropdownStyle',\n      'grow',\n      'handleSubmit',\n      'innerRef',\n      'itemClassName',\n      'itemStyle',\n      'listClassName',\n      'listStyle',\n      'loaderClassName',\n      'loaderStyle',\n      'loadingComponent',\n      'minChar',\n      'movePopupAsYouType',\n      'onCaretPositionChange',\n      'onChange',\n      'ref',\n      'replaceWord',\n      'scrollToItem',\n      'shouldSubmit',\n      'showCommandsList',\n      'showMentionsList',\n      'SuggestionItem',\n      'SuggestionList',\n      'trigger',\n      'value',\n    ];\n\n    for (const prop in props) {\n      if (notSafe.includes(prop)) delete props[prop];\n    }\n\n    return props;\n  };\n\n  _isCommand = (text) => {\n    if (text[0] !== '/') return false;\n\n    const tokens = text.split(' ');\n\n    return tokens.length <= 1;\n  };\n\n  _changeHandler = (e) => {\n    const { minChar, movePopupAsYouType, onCaretPositionChange, onChange, trigger } =\n      this.props;\n    const { left, top } = this.state;\n\n    const textarea = e.target;\n    const { selectionEnd, selectionStart, value } = textarea;\n\n    if (onChange) {\n      e.persist();\n      onChange(e);\n    }\n\n    if (onCaretPositionChange) onCaretPositionChange(this.getCaretPosition());\n\n    this.setState({ value });\n\n    let currentTrigger;\n    let lastToken;\n\n    if (this._isCommand(value)) {\n      currentTrigger = '/';\n      lastToken = value;\n    } else {\n      const triggerTokens = Object.keys(trigger).join().replace('/', '');\n      const triggerNorWhitespace = `[^\\\\s${triggerTokens}]*`;\n      const regex = new RegExp(\n        `(?!^|\\\\W)?[${triggerTokens}]${triggerNorWhitespace}\\\\s?${triggerNorWhitespace}$`,\n        'g',\n      );\n      const tokenMatch = value.slice(0, selectionEnd).match(regex);\n\n      lastToken = tokenMatch && tokenMatch[tokenMatch.length - 1].trim();\n\n      currentTrigger =\n        (lastToken && Object.keys(trigger).find((a) => a === lastToken[0])) || null;\n    }\n\n    /*\n     if we lost the trigger token or there is no following character we want to close\n     the autocomplete\n    */\n    if (!lastToken || lastToken.length <= minChar) {\n      this._closeAutocomplete();\n      return;\n    }\n\n    const actualToken = lastToken.slice(1);\n\n    // if trigger is not configured step out from the function, otherwise proceed\n    if (!currentTrigger) return;\n\n    if (\n      movePopupAsYouType ||\n      (top === null && left === null) ||\n      // if we have single char - trigger it means we want to re-position the autocomplete\n      lastToken.length === 1\n    ) {\n      const { left: newLeft, top: newTop } = getCaretCoordinates(textarea, selectionEnd);\n\n      this.setState({\n        // make position relative to textarea\n        left: newLeft,\n        top: newTop - this.textareaRef.scrollTop || 0,\n      });\n    }\n    this.setState(\n      {\n        actualToken,\n        currentTrigger,\n        selectionEnd,\n        selectionStart,\n      },\n      () => {\n        try {\n          this._getValuesFromProvider();\n        } catch (err) {\n          errorMessage(err.message);\n        }\n      },\n    );\n  };\n\n  _selectHandler = (e) => {\n    const { onCaretPositionChange, onSelect } = this.props;\n\n    if (onCaretPositionChange) onCaretPositionChange(this.getCaretPosition());\n\n    if (onSelect) {\n      e.persist();\n      onSelect(e);\n    }\n  };\n\n  // The textarea itself is outside the auto-select dropdown.\n  _onClickAndBlurHandler = (e) => {\n    const { closeOnClickOutside, onBlur } = this.props;\n\n    // If this is a click: e.target is the textarea, and e.relatedTarget is the thing\n    // that was actually clicked. If we clicked inside the auto-select dropdown, then\n    // that's not a blur, from the auto-select point of view, so then do nothing.\n    const el = e.relatedTarget;\n    // If this is a blur event in Safari, then relatedTarget is never a dropdown item, but a common parent\n    // of textarea and dropdown container. That means that dropdownRef will not contain its parent and the\n    // autocomplete will be closed before onclick handler can be invoked selecting an item.\n    // It seems that Safari has different implementation determining the relatedTarget node than Chrome and Firefox.\n    // Therefore, if focused away in Safari, the dropdown will be kept rendered until pressing Esc or selecting and item from it.\n    const focusedAwayInSafari = isSafari() && e.type === 'blur';\n    if (\n      (this.dropdownRef && el instanceof Node && this.dropdownRef.contains(el)) ||\n      focusedAwayInSafari\n    ) {\n      return;\n    }\n\n    if (closeOnClickOutside) this._closeAutocomplete();\n\n    if (onBlur) {\n      e.persist();\n      onBlur(e);\n    }\n  };\n\n  _onScrollHandler = () => this._closeAutocomplete();\n\n  _dropdownScroll = (item) => {\n    const { scrollToItem } = this.props;\n\n    if (!scrollToItem) return;\n\n    if (scrollToItem === true) {\n      defaultScrollToItem(this.dropdownRef, item);\n      return;\n    }\n\n    if (typeof scrollToItem !== 'function' || scrollToItem.length !== 2) {\n      throw new Error(\n        '`scrollToItem` has to be boolean (true for default implementation) or function with two parameters: container, item.',\n      );\n    }\n\n    scrollToItem(this.dropdownRef, item);\n  };\n\n  getTriggerProps = () => {\n    const { showCommandsList, showMentionsList, trigger } = this.props;\n    const { component, currentTrigger, selectionEnd, value } = this.state;\n\n    const selectedItem = this._getItemOnSelect();\n    const suggestionData = this._getSuggestions();\n    const textToReplace = this._getTextToReplace();\n\n    const triggerProps = {\n      component,\n      currentTrigger,\n      getSelectedItem: selectedItem,\n      getTextToReplace: textToReplace,\n      selectionEnd,\n      value,\n      values: suggestionData,\n    };\n\n    if ((showCommandsList && trigger['/']) || (showMentionsList && trigger['@'])) {\n      let currentCommands;\n      const getCommands = trigger[showCommandsList ? '/' : '@'].dataProvider;\n\n      getCommands?.('', showCommandsList ? '/' : '@', (data) => {\n        currentCommands = data;\n      });\n\n      triggerProps.component = showCommandsList ? CommandItem : UserItem;\n      triggerProps.currentTrigger = showCommandsList ? '/' : '@';\n      triggerProps.getTextToReplace = this._getTextToReplace(\n        showCommandsList ? '/' : '@',\n      );\n      triggerProps.getSelectedItem = this._getItemOnSelect(showCommandsList ? '/' : '@');\n      triggerProps.selectionEnd = 1;\n      triggerProps.value = showCommandsList ? '/' : '@';\n      triggerProps.values = currentCommands;\n    }\n\n    return triggerProps;\n  };\n\n  setDropdownRef = (element) => {\n    this.dropdownRef = element;\n  };\n\n  renderSuggestionListContainer() {\n    const {\n      disableMentions,\n      dropdownClassName,\n      dropdownStyle,\n      itemClassName,\n      itemStyle,\n      listClassName,\n      SuggestionItem,\n      SuggestionList = DefaultSuggestionList,\n    } = this.props;\n\n    const { isComposing } = this.state;\n\n    const triggerProps = this.getTriggerProps();\n\n    if (\n      isComposing ||\n      !triggerProps.values ||\n      !triggerProps.currentTrigger ||\n      (disableMentions && triggerProps.currentTrigger === '@')\n    )\n      return null;\n\n    return (\n      <div\n        className={clsx('str-chat__suggestion-list-container', dropdownClassName)}\n        ref={this.setDropdownRef}\n        style={dropdownStyle}\n      >\n        <SuggestionList\n          className={listClassName}\n          dropdownScroll={this._dropdownScroll}\n          itemClassName={clsx('str-chat__suggestion-list-item', itemClassName)}\n          itemStyle={itemStyle}\n          onSelect={this._onSelect}\n          SuggestionItem={SuggestionItem}\n          {...triggerProps}\n        />\n      </div>\n    );\n  }\n\n  render() {\n    const { className, containerClassName, containerStyle, style } = this.props;\n    const {\n      onBlur,\n      onChange,\n      onClick,\n      onFocus,\n      onKeyDown,\n      onScroll,\n      onSelect,\n      ...restAdditionalTextareaProps\n    } = this.props.additionalTextareaProps || {};\n\n    let { maxRows } = this.props;\n\n    const { dataLoading, value } = this.state;\n\n    if (!this.props.grow) maxRows = 1;\n\n    // By setting defaultValue to undefined, avoid error:\n    // ForwardRef(TextareaAutosize) contains a textarea with both value and defaultValue props.\n    // Textarea elements must be either controlled or uncontrolled\n\n    return (\n      <div\n        className={clsx('rta', containerClassName, {\n          ['rta--loading']: dataLoading,\n        })}\n        style={containerStyle}\n      >\n        {this.renderSuggestionListContainer()}\n        <Textarea\n          data-testid='message-input'\n          {...this._cleanUpProps()}\n          className={clsx('rta__textarea', className)}\n          maxRows={maxRows}\n          onBlur={(e) => {\n            this._onClickAndBlurHandler(e);\n            onBlur?.(e);\n          }}\n          onChange={(e) => {\n            this._changeHandler(e);\n            onChange?.(e);\n          }}\n          onClick={(e) => {\n            this._onClickAndBlurHandler(e);\n            onClick?.(e);\n          }}\n          onCompositionEnd={() => this.setState((pv) => ({ ...pv, isComposing: false }))}\n          onCompositionStart={() => this.setState((pv) => ({ ...pv, isComposing: true }))}\n          onFocus={(e) => {\n            this.props.onFocus?.(e);\n            onFocus?.(e);\n          }}\n          onKeyDown={(e) => {\n            this._handleKeyDown(e);\n            onKeyDown?.(e);\n          }}\n          onScroll={(e) => {\n            this._onScrollHandler(e);\n            onScroll?.(e);\n          }}\n          onSelect={(e) => {\n            this._selectHandler(e);\n            onSelect?.(e);\n          }}\n          ref={(ref) => {\n            this.props?.innerRef(ref);\n            this.textareaRef = ref;\n          }}\n          style={style}\n          value={value}\n          {...restAdditionalTextareaProps}\n          defaultValue={undefined}\n        />\n      </div>\n    );\n  }\n}\n\nReactTextareaAutocomplete.propTypes = {\n  className: PropTypes.string,\n  closeOnClickOutside: PropTypes.bool,\n  containerClassName: PropTypes.string,\n  containerStyle: PropTypes.object,\n  disableMentions: PropTypes.bool,\n  dropdownClassName: PropTypes.string,\n  dropdownStyle: PropTypes.object,\n  itemClassName: PropTypes.string,\n  itemStyle: PropTypes.object,\n  listClassName: PropTypes.string,\n  listStyle: PropTypes.object,\n  loaderClassName: PropTypes.string,\n  loaderStyle: PropTypes.object,\n  loadingComponent: PropTypes.elementType,\n  minChar: PropTypes.number,\n  onBlur: PropTypes.func,\n  onCaretPositionChange: PropTypes.func,\n  onChange: PropTypes.func,\n  onSelect: PropTypes.func,\n  shouldSubmit: PropTypes.func,\n  style: PropTypes.object,\n  SuggestionList: PropTypes.elementType,\n  trigger: triggerPropsCheck,\n  value: PropTypes.string,\n};\n", "export const DEFAULT_CARET_POSITION = 'next';\n\nexport function defaultScrollToItem(container, item) {\n  if (!item) return;\n\n  const itemHeight = parseInt(getComputedStyle(item).getPropertyValue('height'), 10);\n\n  const containerHight =\n    parseInt(getComputedStyle(container).getPropertyValue('height'), 10) - itemHeight;\n\n  const actualScrollTop = container.scrollTop;\n  const itemOffsetTop = item.offsetTop;\n\n  if (\n    itemOffsetTop < actualScrollTop + containerHight &&\n    actualScrollTop < itemOffsetTop\n  ) {\n    return;\n  }\n\n  container.scrollTop = itemOffsetTop;\n}\n\nexport const errorMessage = (message) =>\n  console.error(\n    `RTA: dataProvider fails: ${message}\n    \\nCheck the documentation or create issue if you think it's bug. https://github.com/webscopeio/react-textarea-autocomplete/issues`,\n  );\n\nexport const triggerPropsCheck = ({ trigger }) => {\n  if (!trigger) return Error('Invalid prop trigger. Prop missing.');\n\n  const triggers = Object.entries(trigger);\n\n  for (let i = 0; i < triggers.length; i += 1) {\n    const [triggerChar, settings] = triggers[i];\n\n    if (typeof triggerChar !== 'string' || triggerChar.length !== 1) {\n      return Error(\n        'Invalid prop trigger. Keys of the object has to be string / one character.',\n      );\n    }\n\n    // $FlowFixMe\n    const triggerSetting = settings;\n\n    const { callback, dataProvider, output } = triggerSetting;\n\n    if (!dataProvider || typeof dataProvider !== 'function') {\n      return Error('Invalid prop trigger: dataProvider should be defined.');\n    }\n\n    if (output && typeof output !== 'function') {\n      return Error('Invalid prop trigger: output should be a function.');\n    }\n\n    if (callback && typeof callback !== 'function') {\n      return Error('Invalid prop trigger: callback should be a function.');\n    }\n  }\n\n  return null;\n};\n", "import React, { PropsWithChildren } from 'react';\n\nexport type CommandItemProps = {\n  entity: {\n    /** Arguments of command */\n    args?: string;\n    /** Description of command */\n    description?: string;\n    /** Name of the command */\n    name?: string;\n  };\n};\n\nconst UnMemoizedCommandItem = (props: PropsWithChildren<CommandItemProps>) => {\n  const { entity } = props;\n\n  return (\n    <div className='str-chat__slash-command'>\n      <span className='str-chat__slash-command-header'>\n        <strong>{entity.name}</strong> {entity.args}\n      </span>\n      <br />\n      <span className='str-chat__slash-command-description'>{entity.description}</span>\n    </div>\n  );\n};\n\nexport const CommandItem = React.memo(\n  UnMemoizedCommandItem,\n) as typeof UnMemoizedCommandItem;\n", "import React from 'react';\nimport clsx from 'clsx';\n\nimport { AvatarProps, Avatar as DefaultAvatar } from '../Avatar';\n\nexport type UserItemProps = {\n  /** The user */\n  entity: {\n    /** The parts of the Name property of the entity (or id if no name) that can be matched to the user input value.\n     * Default is bold for matches, but can be overwritten in css.\n     * */\n    itemNameParts: { match: string; parts: string[] };\n    /** Id of the user */\n    id?: string;\n    /** Image of the user */\n    image?: string;\n    /** Name of the user */\n    name?: string;\n  };\n  /** Custom UI component to display user avatar, defaults to and accepts same props as: [Avatar](https://github.com/GetStream/stream-chat-react/blob/master/src/components/Avatar/Avatar.tsx) */\n  Avatar?: React.ComponentType<AvatarProps>;\n};\n\n/**\n * UI component for mentions rendered in suggestion list\n */\nconst UnMemoizedUserItem = ({ Avatar = DefaultAvatar, entity }: UserItemProps) => {\n  const hasEntity = !!Object.keys(entity).length;\n  const itemParts = entity?.itemNameParts;\n\n  const renderName = () => {\n    if (!hasEntity) return null;\n\n    return itemParts.parts.map((part, i) => {\n      const matches = part.toLowerCase() === itemParts.match.toLowerCase();\n\n      return (\n        <span\n          className={clsx({\n            'str-chat__emoji-item--highlight': matches,\n            'str-chat__emoji-item--part': !matches,\n          })}\n          key={`part-${i}`}\n        >\n          {part}\n        </span>\n      );\n    });\n  };\n\n  return (\n    <div className='str-chat__user-item'>\n      <Avatar\n        className='str-chat__avatar--autocomplete-item'\n        image={entity.image}\n        name={entity.name || entity.id}\n      />\n      <span className='str-chat__user-item--name' data-testid={'user-item-name'}>\n        {renderName()}\n      </span>\n      <div className='str-chat__user-item-at'>@</div>\n    </div>\n  );\n};\n\nexport const UserItem = React.memo(UnMemoizedUserItem) as typeof UnMemoizedUserItem;\n", "import clsx from 'clsx';\nimport React, { useEffect, useState } from 'react';\n\nimport type { UserResponse } from 'stream-chat';\n\nimport { Icon } from '../Threads/icons';\nimport { getWholeChar } from '../../utils';\n\nimport type { DefaultStreamChatGenerics } from '../../types/types';\n\nexport type AvatarProps<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n  /** Custom root element class that will be merged with the default class */\n  className?: string;\n  /** Image URL or default is an image of the first initial of the name if there is one  */\n  image?: string | null;\n  /** Name of the image, used for title tag fallback */\n  name?: string;\n  /** click event handler attached to the component root element */\n  onClick?: (event: React.BaseSyntheticEvent) => void;\n  /** mouseOver event handler attached to the component root element */\n  onMouseOver?: (event: React.BaseSyntheticEvent) => void;\n  /** The entire user object for the chat user displayed in the component */\n  user?: UserResponse<StreamChatGenerics>;\n};\n\n/**\n * A round avatar image with fallback to username's first letter\n */\nexport const Avatar = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  props: AvatarProps<StreamChatGenerics>,\n) => {\n  const {\n    className,\n    image,\n    name,\n    onClick = () => undefined,\n    onMouseOver = () => undefined,\n  } = props;\n\n  const [error, setError] = useState(false);\n\n  useEffect(() => {\n    setError(false);\n  }, [image]);\n\n  const nameStr = name?.toString() || '';\n  const initials = getWholeChar(nameStr, 0);\n  const showImage = image && !error;\n\n  return (\n    <div\n      className={clsx(`str-chat__avatar str-chat__message-sender-avatar`, className, {\n        ['str-chat__avatar--multiple-letters']: initials.length > 1,\n        ['str-chat__avatar--no-letters']: !initials.length,\n        ['str-chat__avatar--one-letter']: initials.length === 1,\n      })}\n      data-testid='avatar'\n      onClick={onClick}\n      onMouseOver={onMouseOver}\n      role='button'\n      title={name}\n    >\n      {showImage ? (\n        <img\n          alt={initials}\n          className='str-chat__avatar-image'\n          data-testid='avatar-img'\n          onError={() => setError(true)}\n          src={image}\n        />\n      ) : (\n        <>\n          {!!initials.length && (\n            <div\n              className={clsx('str-chat__avatar-fallback')}\n              data-testid='avatar-fallback'\n            >\n              {initials}\n            </div>\n          )}\n          {!initials.length && <Icon.User />}\n        </>\n      )}\n    </div>\n  );\n};\n", "import React from 'react';\nimport { ComponentPropsWithoutRef } from 'react';\n\n// TODO: unify icons across SDK\nexport const Icon = {\n  MessageBubble: (props: ComponentPropsWithoutRef<'svg'>) => (\n    <svg\n      className='str-chat__icon str-chat__icon--message-bubble'\n      fill='none'\n      height='14'\n      viewBox='0 0 14 14'\n      width='14'\n      xmlns='http://www.w3.org/2000/svg'\n      {...props}\n    >\n      <path\n        d='M1.66659 1.66665H12.3333V9.66665H2.44659L1.66659 10.4466V1.66665ZM1.66659 0.333313C0.933252 0.333313 0.339919 0.933313 0.339919 1.66665L0.333252 13.6666L2.99992 11H12.3333C13.0666 11 13.6666 10.4 13.6666 9.66665V1.66665C13.6666 0.933313 13.0666 0.333313 12.3333 0.333313H1.66659ZM2.99992 6.99998H10.9999V8.33331H2.99992V6.99998ZM2.99992 4.99998H10.9999V6.33331H2.99992V4.99998ZM2.99992 2.99998H10.9999V4.33331H2.99992V2.99998Z'\n        fill='currentColor'\n      />\n    </svg>\n  ),\n  MessageBubbleEmpty: (props: ComponentPropsWithoutRef<'svg'>) => (\n    <svg\n      className='str-chat__icon str-chat__icon--message-bubble-empty'\n      fill='none'\n      height='20'\n      viewBox='0 0 20 20'\n      width='20'\n      xmlns='http://www.w3.org/2000/svg'\n      {...props}\n    >\n      <path\n        d='M18 0H2C0.9 0 0 0.9 0 2V20L4 16H18C19.1 16 20 15.1 20 14V2C20 0.9 19.1 0 18 0ZM18 14H4L2 16V2H18V14Z'\n        fill='currentColor'\n      />\n    </svg>\n  ),\n  Reload: (props: ComponentPropsWithoutRef<'svg'>) => (\n    <svg\n      className='str-chat__icon str-chat__icon--reload'\n      fill='none'\n      height='22'\n      viewBox='0 0 16 22'\n      width='16'\n      xmlns='http://www.w3.org/2000/svg'\n      {...props}\n    >\n      <path\n        d='M8 3V0L4 4L8 8V5C11.31 5 14 7.69 14 11C14 12.01 13.75 12.97 13.3 13.8L14.76 15.26C15.54 14.03 16 12.57 16 11C16 6.58 12.42 3 8 3ZM8 17C4.69 17 2 14.31 2 11C2 9.99 2.25 9.03 2.7 8.2L1.24 6.74C0.46 7.97 0 9.43 0 11C0 15.42 3.58 19 8 19V22L12 18L8 14V17Z'\n        fill='currentColor'\n      />\n    </svg>\n  ),\n  User: (props: ComponentPropsWithoutRef<'svg'>) => (\n    <svg\n      className='str-chat__icon str-chat__icon--user'\n      fill='none'\n      height='16'\n      viewBox='0 0 16 16'\n      width='16'\n      xmlns='http://www.w3.org/2000/svg'\n      {...props}\n    >\n      <path\n        d='M8 2C9.1 2 10 2.9 10 4C10 5.1 9.1 6 8 6C6.9 6 6 5.1 6 4C6 2.9 6.9 2 8 2ZM8 12C10.7 12 13.8 13.29 14 14H2C2.23 13.28 5.31 12 8 12ZM8 0C5.79 0 4 1.79 4 4C4 6.21 5.79 8 8 8C10.21 8 12 6.21 12 4C12 1.79 10.21 0 8 0ZM8 10C5.33 10 0 11.34 0 14V16H16V14C16 11.34 10.67 10 8 10Z'\n        fill='currentColor'\n      />\n    </svg>\n  ),\n};\n", "import type {\n  Channel,\n  ChannelQueryOptions,\n  QueryChannelAPIResponse,\n  StreamChat,\n} from 'stream-chat';\nimport type { DefaultStreamChatGenerics } from '../types/types';\n\n/**\n * prevent from duplicate invocation of channel.watch()\n * when events 'notification.message_new' and 'notification.added_to_channel' arrive at the same time\n */\nconst WATCH_QUERY_IN_PROGRESS_FOR_CHANNEL: Record<\n  string,\n  Promise<QueryChannelAPIResponse> | undefined\n> = {};\n\ntype GetChannelParams<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n  client: StreamChat<StreamChatGenerics>;\n  channel?: Channel<StreamChatGenerics>;\n  id?: string;\n  members?: string[];\n  options?: ChannelQueryOptions<StreamChatGenerics>;\n  type?: string;\n};\n/**\n * Calls channel.watch() if it was not already recently called. Waits for watch promise to resolve even if it was invoked previously.\n * @param client\n * @param members\n * @param options\n * @param type\n * @param id\n * @param channel\n */\nexport const getChannel = async <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n  channel,\n  client,\n  id,\n  members,\n  options,\n  type,\n}: GetChannelParams<StreamChatGenerics>) => {\n  if (!channel && !type) {\n    throw new Error('Channel or channel type have to be provided to query a channel.');\n  }\n\n  // unfortunately typescript is not able to infer that if (!channel && !type) === false, then channel or type has to be truthy\n  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n  const theChannel = channel || client.channel(type!, id, { members });\n\n  // need to keep as with call to channel.watch the id can be changed from undefined to an actual ID generated server-side\n  const originalCid = theChannel?.id\n    ? theChannel.cid\n    : members && members.length\n      ? generateChannelTempCid(theChannel.type, members)\n      : undefined;\n\n  if (!originalCid) {\n    throw new Error(\n      'Channel ID or channel members array have to be provided to query a channel.',\n    );\n  }\n\n  const queryPromise = WATCH_QUERY_IN_PROGRESS_FOR_CHANNEL[originalCid];\n\n  if (queryPromise) {\n    await queryPromise;\n  } else {\n    try {\n      WATCH_QUERY_IN_PROGRESS_FOR_CHANNEL[originalCid] = theChannel.watch(options);\n      await WATCH_QUERY_IN_PROGRESS_FOR_CHANNEL[originalCid];\n    } finally {\n      delete WATCH_QUERY_IN_PROGRESS_FOR_CHANNEL[originalCid];\n    }\n  }\n\n  return theChannel;\n};\n\n// Channels created without ID need to be referenced by an identifier until the back-end generates the final ID.\nconst generateChannelTempCid = (channelType: string, members?: string[]) => {\n  if (!members) return;\n  const membersStr = [...members].sort().join(',');\n  return `${channelType}:!members-${membersStr}`;\n};\n", "// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/charAt#getting_whole_characters\nexport const getWholeChar = (str: string, i: number) => {\n  const code = str.charCodeAt(i);\n\n  if (Number.isNaN(code)) return '';\n\n  if (code < 0xd800 || code > 0xdfff) return str.charAt(i);\n\n  if (0xd800 <= code && code <= 0xdbff) {\n    if (str.length <= i + 1) {\n      throw 'High surrogate without following low surrogate';\n    }\n\n    const next = str.charCodeAt(i + 1);\n\n    if (0xdc00 > next || next > 0xdfff) {\n      throw 'High surrogate without following low surrogate';\n    }\n\n    return str.charAt(i) + str.charAt(i + 1);\n  }\n\n  if (i === 0) {\n    throw 'Low surrogate without preceding high surrogate';\n  }\n\n  const prev = str.charCodeAt(i - 1);\n\n  if (0xd800 > prev || prev > 0xdbff) {\n    throw 'Low surrogate without preceding high surrogate';\n  }\n\n  return '';\n};\n", "import React from 'react';\nimport { Avatar, AvatarProps, GroupAvatar, GroupAvatarProps } from './index';\nimport type { DefaultStreamChatGenerics } from '../../types';\n\nexport type ChannelAvatarProps<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Partial<GroupAvatarProps> & AvatarProps<StreamChatGenerics>;\n\nexport const ChannelAvatar = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n  groupChannelDisplayInfo,\n  image,\n  name,\n  user,\n  ...sharedProps\n}: ChannelAvatarProps<StreamChatGenerics>) => {\n  if (groupChannelDisplayInfo) {\n    return (\n      <GroupAvatar groupChannelDisplayInfo={groupChannelDisplayInfo} {...sharedProps} />\n    );\n  }\n  return <Avatar image={image} name={name} user={user} {...sharedProps} />;\n};\n", "import clsx from 'clsx';\nimport React from 'react';\nimport { Avatar, AvatarProps } from './Avatar';\nimport { GroupChannelDisplayInfo } from '../ChannelPreview';\n\nexport type GroupAvatarProps = Pick<\n  AvatarProps,\n  'className' | 'onClick' | 'onMouseOver'\n> & {\n  /** Mapping of image URLs to names which initials will be used as fallbacks in case image assets fail to load. */\n  groupChannelDisplayInfo: GroupChannelDisplayInfo;\n};\n\nexport const GroupAvatar = ({\n  className,\n  groupChannelDisplayInfo,\n  onClick,\n  onMouseOver,\n}: GroupAvatarProps) => (\n  <div\n    className={clsx(\n      `str-chat__avatar-group`,\n      { 'str-chat__avatar-group--three-part': groupChannelDisplayInfo.length === 3 },\n      className,\n    )}\n    data-testid='group-avatar'\n    onClick={onClick}\n    onMouseOver={onMouseOver}\n    role='button'\n  >\n    {groupChannelDisplayInfo.slice(0, 4).map(({ image, name }, i) => (\n      <Avatar\n        className={clsx({\n          'str-chat__avatar--single': groupChannelDisplayInfo.length === 3 && i === 0,\n        })}\n        image={image}\n        key={`${name}-${image}-${i}`}\n        name={name}\n      />\n    ))}\n  </div>\n);\n", "export const isSafari = () => {\n  if (typeof navigator === 'undefined') return false;\n  return /^((?!chrome|android).)*safari/i.test(navigator.userAgent || '');\n};\n", "import React, {\n  ComponentProps,\n  PropsWithChildren,\n  useCallback,\n  useEffect,\n  useLayoutEffect,\n  useMemo,\n  useReducer,\n  useRef,\n  useState,\n} from 'react';\n\nimport debounce from 'lodash.debounce';\nimport defaultsDeep from 'lodash.defaultsdeep';\nimport throttle from 'lodash.throttle';\nimport { nanoid } from 'nanoid';\nimport clsx from 'clsx';\n\nimport { initialState, makeChannelReducer } from './channelState';\nimport { useCreateChannelStateContext } from './hooks/useCreateChannelStateContext';\nimport { useCreateTypingContext } from './hooks/useCreateTypingContext';\nimport { useEditMessageHandler } from './hooks/useEditMessageHandler';\nimport { useIsMounted } from './hooks/useIsMounted';\nimport { OnMentionAction, useMentionsHandlers } from './hooks/useMentionsHandlers';\n\nimport {\n  LoadingErrorIndicator as DefaultLoadingErrorIndicator,\n  LoadingErrorIndicatorProps,\n} from '../Loading';\nimport { LoadingChannel as DefaultLoadingIndicator } from './LoadingChannel';\nimport { DropzoneProvider } from '../MessageInput/DropzoneProvider';\n\nimport {\n  ChannelActionContextValue,\n  ChannelActionProvider,\n  ChannelNotifications,\n  ChannelStateProvider,\n  ComponentContextValue,\n  MarkReadWrapperOptions,\n  MessageToSend,\n  StreamMessage,\n  TypingProvider,\n  useChatContext,\n  useTranslationContext,\n  WithComponents,\n} from '../../context';\n\nimport { CHANNEL_CONTAINER_ID } from './constants';\nimport {\n  DEFAULT_HIGHLIGHT_DURATION,\n  DEFAULT_INITIAL_CHANNEL_PAGE_SIZE,\n  DEFAULT_JUMP_TO_PAGE_SIZE,\n  DEFAULT_NEXT_CHANNEL_PAGE_SIZE,\n  DEFAULT_THREAD_PAGE_SIZE,\n} from '../../constants/limits';\n\nimport { hasMoreMessagesProbably } from '../MessageList';\nimport {\n  getChatContainerClass,\n  useChannelContainerClasses,\n  useImageFlagEmojisOnWindowsClass,\n} from './hooks/useChannelContainerClasses';\nimport { findInMsgSetByDate, findInMsgSetById, makeAddNotifications } from './utils';\nimport { useThreadContext } from '../Threads';\nimport { getChannel } from '../../utils';\n\nimport type {\n  APIErrorResponse,\n  ChannelAPIResponse,\n  ChannelMemberResponse,\n  ChannelQueryOptions,\n  ChannelState,\n  ErrorFromResponse,\n  Event,\n  EventAPIResponse,\n  Message,\n  MessageResponse,\n  SendMessageAPIResponse,\n  Channel as StreamChannel,\n  StreamChat,\n  UpdatedMessage,\n  UserResponse,\n} from 'stream-chat';\nimport type { MessageInputProps } from '../MessageInput';\nimport type {\n  ChannelUnreadUiState,\n  CustomTrigger,\n  DefaultStreamChatGenerics,\n  GiphyVersions,\n  ImageAttachmentSizeHandler,\n  SendMessageOptions,\n  UpdateMessageOptions,\n  VideoAttachmentSizeHandler,\n} from '../../types/types';\nimport {\n  getImageAttachmentConfiguration,\n  getVideoAttachmentConfiguration,\n} from '../Attachment/attachment-sizing';\nimport type { URLEnrichmentConfig } from '../MessageInput/hooks/useLinkPreviews';\nimport { useSearchFocusedMessage } from '../../experimental/Search/hooks';\n\ntype ChannelPropsForwardedToComponentContext<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Pick<\n  ComponentContextValue<StreamChatGenerics>,\n  | 'Attachment'\n  | 'AttachmentPreviewList'\n  | 'AttachmentSelector'\n  | 'AttachmentSelectorInitiationButtonContents'\n  | 'AudioRecorder'\n  | 'AutocompleteSuggestionItem'\n  | 'AutocompleteSuggestionList'\n  | 'Avatar'\n  | 'BaseImage'\n  | 'CooldownTimer'\n  | 'CustomMessageActionsList'\n  | 'DateSeparator'\n  | 'EditMessageInput'\n  | 'EmojiPicker'\n  | 'emojiSearchIndex'\n  | 'EmptyStateIndicator'\n  | 'FileUploadIcon'\n  | 'GiphyPreviewMessage'\n  | 'HeaderComponent'\n  | 'Input'\n  | 'LinkPreviewList'\n  | 'LoadingIndicator'\n  | 'Message'\n  | 'MessageActions'\n  | 'MessageBouncePrompt'\n  | 'MessageBlocked'\n  | 'MessageDeleted'\n  | 'MessageListNotifications'\n  | 'MessageListMainPanel'\n  | 'MessageNotification'\n  | 'MessageOptions'\n  | 'MessageRepliesCountButton'\n  | 'MessageStatus'\n  | 'MessageSystem'\n  | 'MessageTimestamp'\n  | 'ModalGallery'\n  | 'PinIndicator'\n  | 'PollActions'\n  | 'PollContent'\n  | 'PollCreationDialog'\n  | 'PollHeader'\n  | 'PollOptionSelector'\n  | 'QuotedMessage'\n  | 'QuotedMessagePreview'\n  | 'QuotedPoll'\n  | 'reactionOptions'\n  | 'ReactionSelector'\n  | 'ReactionsList'\n  | 'ReactionsListModal'\n  | 'SendButton'\n  | 'StartRecordingAudioButton'\n  | 'ThreadHead'\n  | 'ThreadHeader'\n  | 'ThreadStart'\n  | 'Timestamp'\n  | 'TriggerProvider'\n  | 'TypingIndicator'\n  | 'UnreadMessagesNotification'\n  | 'UnreadMessagesSeparator'\n  | 'VirtualMessage'\n  | 'StopAIGenerationButton'\n  | 'StreamedMessageText'\n>;\n\nconst isUserResponseArray = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  output: string[] | UserResponse<StreamChatGenerics>[],\n): output is UserResponse<StreamChatGenerics>[] =>\n  (output as UserResponse<StreamChatGenerics>[])[0]?.id != null;\n\nexport type ChannelProps<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n  V extends CustomTrigger = CustomTrigger,\n> = ChannelPropsForwardedToComponentContext<StreamChatGenerics> & {\n  /** List of accepted file types */\n  acceptedFiles?: string[];\n  /** Custom handler function that runs when the active channel has unread messages and the app is running on a separate browser tab */\n  activeUnreadHandler?: (unread: number, documentTitle: string) => void;\n  /** The connected and active channel */\n  channel?: StreamChannel<StreamChatGenerics>;\n  /**\n   * Optional configuration parameters used for the initial channel query.\n   * Applied only if the value of channel.initialized is false.\n   * If the channel instance has already been initialized (channel has been queried),\n   * then the channel query will be skipped and channelQueryOptions will not be applied.\n   */\n  channelQueryOptions?: ChannelQueryOptions<StreamChatGenerics>;\n  /** Custom action handler to override the default `client.deleteMessage(message.id)` function */\n  doDeleteMessageRequest?: (\n    message: StreamMessage<StreamChatGenerics>,\n  ) => Promise<MessageResponse<StreamChatGenerics>>;\n  /** Custom action handler to override the default `channel.markRead` request function (advanced usage only) */\n  doMarkReadRequest?: (\n    channel: StreamChannel<StreamChatGenerics>,\n    setChannelUnreadUiState?: (state: ChannelUnreadUiState) => void,\n  ) => Promise<EventAPIResponse<StreamChatGenerics>> | void;\n  /** Custom action handler to override the default `channel.sendMessage` request function (advanced usage only) */\n  doSendMessageRequest?: (\n    channel: StreamChannel<StreamChatGenerics>,\n    message: Message<StreamChatGenerics>,\n    options?: SendMessageOptions,\n  ) => ReturnType<StreamChannel<StreamChatGenerics>['sendMessage']> | void;\n  /** Custom action handler to override the default `client.updateMessage` request function (advanced usage only) */\n  doUpdateMessageRequest?: (\n    cid: string,\n    updatedMessage: UpdatedMessage<StreamChatGenerics>,\n    options?: UpdateMessageOptions,\n  ) => ReturnType<StreamChat<StreamChatGenerics>['updateMessage']>;\n  /** If true, chat users will be able to drag and drop file uploads to the entire channel window */\n  dragAndDropWindow?: boolean;\n  /** Custom UI component to be shown if no active channel is set, defaults to null and skips rendering the Channel component */\n  EmptyPlaceholder?: React.ReactElement;\n  /**\n   * A global flag to toggle the URL enrichment and link previews in `MessageInput` components.\n   * By default, the feature is disabled. Can be overridden on Thread, MessageList level through additionalMessageInputProps\n   * or directly on MessageInput level through urlEnrichmentConfig.\n   */\n  enrichURLForPreview?: URLEnrichmentConfig['enrichURLForPreview'];\n  /** Global configuration for link preview generation in all the MessageInput components */\n  enrichURLForPreviewConfig?: Omit<URLEnrichmentConfig, 'enrichURLForPreview'>;\n  /** The giphy version to render - check the keys of the [Image Object](https://developers.giphy.com/docs/api/schema#image-object) for possible values. Uses 'fixed_height' by default */\n  giphyVersion?: GiphyVersions;\n  /** A custom function to provide size configuration for image attachments */\n  imageAttachmentSizeHandler?: ImageAttachmentSizeHandler;\n  /**\n   * Allows to prevent triggering the channel.watch() call when mounting the component.\n   * That means that no channel data from the back-end will be received neither channel WS events will be delivered to the client.\n   * Preventing to initialize the channel on mount allows us to postpone the channel creation to a later point in time.\n   */\n  initializeOnMount?: boolean;\n  /** Custom UI component to be shown if the channel query fails, defaults to and accepts same props as: [LoadingErrorIndicator](https://github.com/GetStream/stream-chat-react/blob/master/src/components/Loading/LoadingErrorIndicator.tsx) */\n  LoadingErrorIndicator?: React.ComponentType<LoadingErrorIndicatorProps>;\n  /** Configuration parameter to mark the active channel as read when mounted (opened). By default, the channel is marked read on mount. */\n  markReadOnMount?: boolean;\n  /** Maximum number of attachments allowed per message */\n  maxNumberOfFiles?: number;\n  /** Whether to allow multiple attachment uploads */\n  multipleUploads?: boolean;\n  /** Custom action handler function to run on click of an @mention in a message */\n  onMentionsClick?: OnMentionAction<StreamChatGenerics>;\n  /** Custom action handler function to run on hover of an @mention in a message */\n  onMentionsHover?: OnMentionAction<StreamChatGenerics>;\n  /** If `dragAndDropWindow` prop is true, the props to pass to the MessageInput component (overrides props placed directly on MessageInput) */\n  optionalMessageInputProps?: MessageInputProps<StreamChatGenerics, V>;\n  /** You can turn on/off thumbnail generation for video attachments */\n  shouldGenerateVideoThumbnail?: boolean;\n  /** If true, skips the message data string comparison used to memoize the current channel messages (helpful for channels with 1000s of messages) */\n  skipMessageDataMemoization?: boolean;\n  /** A custom function to provide size configuration for video attachments */\n  videoAttachmentSizeHandler?: VideoAttachmentSizeHandler;\n};\n\nconst ChannelContainer = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n  children,\n  className: additionalClassName,\n  ...props\n}: PropsWithChildren<ComponentProps<'div'>>) => {\n  const { customClasses, theme } = useChatContext<StreamChatGenerics>('Channel');\n  const { channelClass, chatClass } = useChannelContainerClasses({\n    customClasses,\n  });\n  const className = clsx(chatClass, theme, channelClass, additionalClassName);\n  return (\n    <div id={CHANNEL_CONTAINER_ID} {...props} className={className}>\n      {children}\n    </div>\n  );\n};\n\nconst UnMemoizedChannel = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n  V extends CustomTrigger = CustomTrigger,\n>(\n  props: PropsWithChildren<ChannelProps<StreamChatGenerics, V>>,\n) => {\n  const {\n    channel: propsChannel,\n    EmptyPlaceholder = null,\n    LoadingErrorIndicator,\n    LoadingIndicator = DefaultLoadingIndicator,\n  } = props;\n\n  const { channel: contextChannel, channelsQueryState } =\n    useChatContext<StreamChatGenerics>('Channel');\n\n  const channel = propsChannel || contextChannel;\n\n  if (channelsQueryState.queryInProgress === 'reload' && LoadingIndicator) {\n    return (\n      <ChannelContainer>\n        <LoadingIndicator />\n      </ChannelContainer>\n    );\n  }\n\n  if (channelsQueryState.error && LoadingErrorIndicator) {\n    return (\n      <ChannelContainer>\n        <LoadingErrorIndicator error={channelsQueryState.error} />\n      </ChannelContainer>\n    );\n  }\n\n  if (!channel?.cid) {\n    return <ChannelContainer>{EmptyPlaceholder}</ChannelContainer>;\n  }\n\n  return <ChannelInner {...props} channel={channel} key={channel.cid} />;\n};\n\nconst ChannelInner = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n  V extends CustomTrigger = CustomTrigger,\n>(\n  props: PropsWithChildren<\n    ChannelProps<StreamChatGenerics, V> & {\n      channel: StreamChannel<StreamChatGenerics>;\n      key: string;\n    }\n  >,\n) => {\n  const {\n    acceptedFiles,\n    activeUnreadHandler,\n    channel,\n    channelQueryOptions: propChannelQueryOptions,\n    children,\n    doDeleteMessageRequest,\n    doMarkReadRequest,\n    doSendMessageRequest,\n    doUpdateMessageRequest,\n    dragAndDropWindow = false,\n    enrichURLForPreviewConfig,\n    initializeOnMount = true,\n    LoadingErrorIndicator = DefaultLoadingErrorIndicator,\n    LoadingIndicator = DefaultLoadingIndicator,\n    markReadOnMount = true,\n    maxNumberOfFiles,\n    multipleUploads = true,\n    onMentionsClick,\n    onMentionsHover,\n    optionalMessageInputProps = {},\n    skipMessageDataMemoization,\n  } = props;\n\n  const channelQueryOptions: ChannelQueryOptions<StreamChatGenerics> & {\n    messages: { limit: number };\n  } = useMemo(\n    () =>\n      defaultsDeep(propChannelQueryOptions, {\n        messages: { limit: DEFAULT_INITIAL_CHANNEL_PAGE_SIZE },\n      }),\n    [propChannelQueryOptions],\n  );\n\n  const { client, customClasses, latestMessageDatesByChannels, mutes, searchController } =\n    useChatContext<StreamChatGenerics>('Channel');\n  const { t } = useTranslationContext('Channel');\n  const chatContainerClass = getChatContainerClass(customClasses?.chatContainer);\n  const windowsEmojiClass = useImageFlagEmojisOnWindowsClass();\n  const thread = useThreadContext();\n\n  const [channelConfig, setChannelConfig] = useState(channel.getConfig());\n  const [notifications, setNotifications] = useState<ChannelNotifications>([]);\n  const [quotedMessage, setQuotedMessage] = useState<StreamMessage<StreamChatGenerics>>();\n  const [channelUnreadUiState, _setChannelUnreadUiState] =\n    useState<ChannelUnreadUiState>();\n\n  const notificationTimeouts = useRef<Array<NodeJS.Timeout>>([]);\n\n  const channelReducer = useMemo(() => makeChannelReducer<StreamChatGenerics>(), []);\n\n  const [state, dispatch] = useReducer(\n    channelReducer,\n    // channel.initialized === false if client.channel().query() was not called, e.g. ChannelList is not used\n    // => Channel will call channel.watch() in useLayoutEffect => state.loading is used to signal the watch() call state\n    {\n      ...initialState,\n      hasMore: channel.state.messagePagination.hasPrev,\n      loading: !channel.initialized,\n    },\n  );\n  const jumpToMessageFromSearch = useSearchFocusedMessage();\n  const isMounted = useIsMounted();\n\n  const originalTitle = useRef('');\n  const lastRead = useRef<Date | undefined>(undefined);\n  const online = useRef(true);\n\n  const clearHighlightedMessageTimeoutId = useRef<ReturnType<typeof setTimeout> | null>(\n    null,\n  );\n\n  const channelCapabilitiesArray = channel.data?.own_capabilities as string[];\n\n  const throttledCopyStateFromChannel = throttle(\n    () => dispatch({ channel, type: 'copyStateFromChannelOnEvent' }),\n    500,\n    {\n      leading: true,\n      trailing: true,\n    },\n  );\n\n  const setChannelUnreadUiState = useMemo(\n    () =>\n      throttle(_setChannelUnreadUiState, 200, {\n        leading: true,\n        trailing: false,\n      }),\n    [],\n  );\n\n  const markRead = useMemo(\n    () =>\n      throttle(\n        async (options?: MarkReadWrapperOptions) => {\n          const { updateChannelUiUnreadState = true } = options ?? {};\n          if (channel.disconnected || !channelConfig?.read_events) {\n            return;\n          }\n\n          lastRead.current = new Date();\n\n          try {\n            if (doMarkReadRequest) {\n              doMarkReadRequest(\n                channel,\n                updateChannelUiUnreadState ? setChannelUnreadUiState : undefined,\n              );\n            } else {\n              const markReadResponse = await channel.markRead();\n              if (updateChannelUiUnreadState && markReadResponse) {\n                _setChannelUnreadUiState({\n                  last_read: lastRead.current,\n                  last_read_message_id: markReadResponse.event.last_read_message_id,\n                  unread_messages: 0,\n                });\n              }\n            }\n\n            if (activeUnreadHandler) {\n              activeUnreadHandler(0, originalTitle.current);\n            } else if (originalTitle.current) {\n              document.title = originalTitle.current;\n            }\n          } catch (e) {\n            console.error(t<string>('Failed to mark channel as read'));\n          }\n        },\n        500,\n        { leading: true, trailing: false },\n      ),\n    [\n      activeUnreadHandler,\n      channel,\n      channelConfig,\n      doMarkReadRequest,\n      setChannelUnreadUiState,\n      t,\n    ],\n  );\n\n  const handleEvent = async (event: Event<StreamChatGenerics>) => {\n    if (event.message) {\n      dispatch({\n        channel,\n        message: event.message,\n        type: 'updateThreadOnEvent',\n      });\n    }\n\n    if (event.type === 'user.watching.start' || event.type === 'user.watching.stop')\n      return;\n\n    if (event.type === 'typing.start' || event.type === 'typing.stop') {\n      return dispatch({ channel, type: 'setTyping' });\n    }\n\n    if (event.type === 'connection.changed' && typeof event.online === 'boolean') {\n      online.current = event.online;\n    }\n\n    if (event.type === 'message.new') {\n      const mainChannelUpdated =\n        !event.message?.parent_id || event.message?.show_in_channel;\n\n      if (mainChannelUpdated) {\n        if (\n          document.hidden &&\n          channelConfig?.read_events &&\n          !channel.muteStatus().muted\n        ) {\n          const unread = channel.countUnread(lastRead.current);\n\n          if (activeUnreadHandler) {\n            activeUnreadHandler(unread, originalTitle.current);\n          } else {\n            document.title = `(${unread}) ${originalTitle.current}`;\n          }\n        }\n      }\n\n      if (\n        event.message?.user?.id === client.userID &&\n        event?.message?.created_at &&\n        event?.message?.cid\n      ) {\n        const messageDate = new Date(event.message.created_at);\n        const cid = event.message.cid;\n\n        if (\n          !latestMessageDatesByChannels[cid] ||\n          latestMessageDatesByChannels[cid].getTime() < messageDate.getTime()\n        ) {\n          latestMessageDatesByChannels[cid] = messageDate;\n        }\n      }\n    }\n\n    if (event.type === 'user.deleted') {\n      const oldestID = channel.state?.messages?.[0]?.id;\n\n      /**\n       * As the channel state is not normalized we re-fetch the channel data. Thus, we avoid having to search for user references in the channel state.\n       */\n      // FIXME: we should use channelQueryOptions if they are available\n      await channel.query({\n        messages: { id_lt: oldestID, limit: DEFAULT_NEXT_CHANNEL_PAGE_SIZE },\n        watchers: { limit: DEFAULT_NEXT_CHANNEL_PAGE_SIZE },\n      });\n    }\n\n    if (event.type === 'notification.mark_unread')\n      _setChannelUnreadUiState((prev) => {\n        if (!(event.last_read_at && event.user)) return prev;\n        return {\n          first_unread_message_id: event.first_unread_message_id,\n          last_read: new Date(event.last_read_at),\n          last_read_message_id: event.last_read_message_id,\n          unread_messages: event.unread_messages ?? 0,\n        };\n      });\n\n    if (event.type === 'channel.truncated' && event.cid === channel.cid) {\n      _setChannelUnreadUiState(undefined);\n    }\n\n    throttledCopyStateFromChannel();\n  };\n\n  // useLayoutEffect here to prevent spinner. Use Suspense when it is available in stable release\n  useLayoutEffect(() => {\n    let errored = false;\n    let done = false;\n\n    (async () => {\n      if (!channel.initialized && initializeOnMount) {\n        try {\n          // if active channel has been set without id, we will create a temporary channel id from its member IDs\n          // to keep track of the /query request in progress. This is the same approach of generating temporary id\n          // that the JS client uses to keep track of channel in client.activeChannels\n          const members: string[] = [];\n          if (!channel.id && channel.data?.members) {\n            for (const member of channel.data.members) {\n              let userId: string | undefined;\n              if (typeof member === 'string') {\n                userId = member;\n              } else if (typeof member === 'object') {\n                const { user, user_id } =\n                  member as ChannelMemberResponse<StreamChatGenerics>;\n                userId = user_id || user?.id;\n              }\n              if (userId) {\n                members.push(userId);\n              }\n            }\n          }\n          await getChannel({ channel, client, members, options: channelQueryOptions });\n          const config = channel.getConfig();\n          setChannelConfig(config);\n        } catch (e) {\n          dispatch({ error: e as Error, type: 'setError' });\n          errored = true;\n        }\n      }\n\n      done = true;\n      originalTitle.current = document.title;\n\n      if (!errored) {\n        dispatch({\n          channel,\n          hasMore: channel.state.messagePagination.hasPrev,\n          type: 'initStateFromChannel',\n        });\n\n        if (client.user?.id && channel.state.read[client.user.id]) {\n          // eslint-disable-next-line @typescript-eslint/no-unused-vars\n          const { user, ...ownReadState } = channel.state.read[client.user.id];\n          _setChannelUnreadUiState(ownReadState);\n        }\n        /**\n         * TODO: maybe pass last_read to the countUnread method to get proper value\n         * combined with channel.countUnread adjustment (_countMessageAsUnread)\n         * to allow counting own messages too\n         *\n         * const lastRead = channel.state.read[client.userID as string].last_read;\n         */\n        if (channel.countUnread() > 0 && markReadOnMount)\n          markRead({ updateChannelUiUnreadState: false });\n        // The more complex sync logic is done in Chat\n        client.on('connection.changed', handleEvent);\n        client.on('connection.recovered', handleEvent);\n        client.on('user.updated', handleEvent);\n        client.on('user.deleted', handleEvent);\n        channel.on(handleEvent);\n      }\n    })();\n    const notificationTimeoutsRef = notificationTimeouts.current;\n\n    return () => {\n      if (errored || !done) return;\n      channel?.off(handleEvent);\n      client.off('connection.changed', handleEvent);\n      client.off('connection.recovered', handleEvent);\n      client.off('user.deleted', handleEvent);\n      notificationTimeoutsRef.forEach(clearTimeout);\n    };\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [\n    channel.cid,\n    channelQueryOptions,\n    doMarkReadRequest,\n    channelConfig?.read_events,\n    initializeOnMount,\n  ]);\n\n  useEffect(() => {\n    if (!state.thread) return;\n\n    const message = state.messages?.find((m) => m.id === state.thread?.id);\n\n    if (message) dispatch({ message, type: 'setThread' });\n  }, [state.messages, state.thread]);\n\n  const handleHighlightedMessageChange = useCallback(\n    ({\n      highlightDuration,\n      highlightedMessageId,\n    }: {\n      highlightedMessageId: string;\n      highlightDuration?: number;\n    }) => {\n      dispatch({\n        channel,\n        highlightedMessageId,\n        type: 'jumpToMessageFinished',\n      });\n      if (clearHighlightedMessageTimeoutId.current) {\n        clearTimeout(clearHighlightedMessageTimeoutId.current);\n      }\n      clearHighlightedMessageTimeoutId.current = setTimeout(() => {\n        if (searchController._internalState.getLatestValue().focusedMessage) {\n          searchController._internalState.partialNext({ focusedMessage: undefined });\n        }\n        clearHighlightedMessageTimeoutId.current = null;\n        dispatch({ type: 'clearHighlightedMessage' });\n      }, highlightDuration ?? DEFAULT_HIGHLIGHT_DURATION);\n    },\n    [channel, searchController],\n  );\n\n  useEffect(() => {\n    if (!jumpToMessageFromSearch?.id) return;\n    handleHighlightedMessageChange({ highlightedMessageId: jumpToMessageFromSearch.id });\n  }, [jumpToMessageFromSearch, handleHighlightedMessageChange]);\n\n  /** MESSAGE */\n\n  // Adds a temporary notification to message list, will be removed after 5 seconds\n  const addNotification = useMemo(\n    () => makeAddNotifications(setNotifications, notificationTimeouts.current),\n    [],\n  );\n\n  // eslint-disable-next-line react-hooks/exhaustive-deps\n  const loadMoreFinished = useCallback(\n    debounce(\n      (hasMore: boolean, messages: ChannelState<StreamChatGenerics>['messages']) => {\n        if (!isMounted.current) return;\n        dispatch({ hasMore, messages, type: 'loadMoreFinished' });\n      },\n      2000,\n      { leading: true, trailing: true },\n    ),\n    [],\n  );\n\n  const loadMore = async (limit = DEFAULT_NEXT_CHANNEL_PAGE_SIZE) => {\n    if (\n      !online.current ||\n      !window.navigator.onLine ||\n      !channel.state.messagePagination.hasPrev\n    )\n      return 0;\n\n    // prevent duplicate loading events...\n    const oldestMessage = state?.messages?.[0];\n\n    if (\n      state.loadingMore ||\n      state.loadingMoreNewer ||\n      oldestMessage?.status !== 'received'\n    ) {\n      return 0;\n    }\n\n    dispatch({ loadingMore: true, type: 'setLoadingMore' });\n\n    const oldestID = oldestMessage?.id;\n    const perPage = limit;\n    let queryResponse: ChannelAPIResponse<StreamChatGenerics>;\n\n    try {\n      queryResponse = await channel.query({\n        messages: { id_lt: oldestID, limit: perPage },\n        watchers: { limit: perPage },\n      });\n    } catch (e) {\n      console.warn('message pagination request failed with error', e);\n      dispatch({ loadingMore: false, type: 'setLoadingMore' });\n      return 0;\n    }\n\n    loadMoreFinished(channel.state.messagePagination.hasPrev, channel.state.messages);\n\n    return queryResponse.messages.length;\n  };\n\n  const loadMoreNewer = async (limit = DEFAULT_NEXT_CHANNEL_PAGE_SIZE) => {\n    if (\n      !online.current ||\n      !window.navigator.onLine ||\n      !channel.state.messagePagination.hasNext\n    )\n      return 0;\n\n    const newestMessage = state?.messages?.[state?.messages?.length - 1];\n    if (state.loadingMore || state.loadingMoreNewer) return 0;\n\n    dispatch({ loadingMoreNewer: true, type: 'setLoadingMoreNewer' });\n\n    const newestId = newestMessage?.id;\n    const perPage = limit;\n    let queryResponse: ChannelAPIResponse<StreamChatGenerics>;\n\n    try {\n      queryResponse = await channel.query({\n        messages: { id_gt: newestId, limit: perPage },\n        watchers: { limit: perPage },\n      });\n    } catch (e) {\n      console.warn('message pagination request failed with error', e);\n      dispatch({ loadingMoreNewer: false, type: 'setLoadingMoreNewer' });\n      return 0;\n    }\n\n    dispatch({\n      hasMoreNewer: channel.state.messagePagination.hasNext,\n      messages: channel.state.messages,\n      type: 'loadMoreNewerFinished',\n    });\n    return queryResponse.messages.length;\n  };\n\n  const jumpToMessage: ChannelActionContextValue<StreamChatGenerics>['jumpToMessage'] =\n    useCallback(\n      async (\n        messageId,\n        messageLimit = DEFAULT_JUMP_TO_PAGE_SIZE,\n        highlightDuration = DEFAULT_HIGHLIGHT_DURATION,\n      ) => {\n        dispatch({ loadingMore: true, type: 'setLoadingMore' });\n        await channel.state.loadMessageIntoState(messageId, undefined, messageLimit);\n\n        loadMoreFinished(channel.state.messagePagination.hasPrev, channel.state.messages);\n        handleHighlightedMessageChange({\n          highlightDuration,\n          highlightedMessageId: messageId,\n        });\n      },\n      [channel, handleHighlightedMessageChange, loadMoreFinished],\n    );\n\n  const jumpToLatestMessage: ChannelActionContextValue<StreamChatGenerics>['jumpToLatestMessage'] =\n    useCallback(async () => {\n      await channel.state.loadMessageIntoState('latest');\n      loadMoreFinished(channel.state.messagePagination.hasPrev, channel.state.messages);\n      dispatch({\n        type: 'jumpToLatestMessage',\n      });\n    }, [channel, loadMoreFinished]);\n\n  const jumpToFirstUnreadMessage: ChannelActionContextValue<StreamChatGenerics>['jumpToFirstUnreadMessage'] =\n    useCallback(\n      async (\n        queryMessageLimit = DEFAULT_JUMP_TO_PAGE_SIZE,\n        highlightDuration = DEFAULT_HIGHLIGHT_DURATION,\n      ) => {\n        if (!channelUnreadUiState?.unread_messages) return;\n        let lastReadMessageId = channelUnreadUiState?.last_read_message_id;\n        let firstUnreadMessageId = channelUnreadUiState?.first_unread_message_id;\n        let isInCurrentMessageSet = false;\n\n        if (firstUnreadMessageId) {\n          const result = findInMsgSetById(firstUnreadMessageId, channel.state.messages);\n          isInCurrentMessageSet = result.index !== -1;\n        } else if (lastReadMessageId) {\n          const result = findInMsgSetById(lastReadMessageId, channel.state.messages);\n          isInCurrentMessageSet = !!result.target;\n          firstUnreadMessageId =\n            result.index > -1 ? channel.state.messages[result.index + 1]?.id : undefined;\n        } else {\n          const lastReadTimestamp = channelUnreadUiState.last_read.getTime();\n          const { index: lastReadMessageIndex, target: lastReadMessage } =\n            findInMsgSetByDate(\n              channelUnreadUiState.last_read,\n              channel.state.messages,\n              true,\n            );\n\n          if (lastReadMessage) {\n            firstUnreadMessageId = channel.state.messages[lastReadMessageIndex + 1]?.id;\n            isInCurrentMessageSet = !!firstUnreadMessageId;\n            lastReadMessageId = lastReadMessage.id;\n          } else {\n            dispatch({ loadingMore: true, type: 'setLoadingMore' });\n            let messages;\n            try {\n              messages = (\n                await channel.query(\n                  {\n                    messages: {\n                      created_at_around: channelUnreadUiState.last_read.toISOString(),\n                      limit: queryMessageLimit,\n                    },\n                  },\n                  'new',\n                )\n              ).messages;\n            } catch (e) {\n              addNotification(t('Failed to jump to the first unread message'), 'error');\n              loadMoreFinished(\n                channel.state.messagePagination.hasPrev,\n                channel.state.messages,\n              );\n              return;\n            }\n\n            const firstMessageWithCreationDate = messages.find((msg) => msg.created_at);\n            if (!firstMessageWithCreationDate) {\n              addNotification(t('Failed to jump to the first unread message'), 'error');\n              loadMoreFinished(\n                channel.state.messagePagination.hasPrev,\n                channel.state.messages,\n              );\n              return;\n            }\n            const firstMessageTimestamp = new Date(\n              firstMessageWithCreationDate.created_at as string,\n            ).getTime();\n            if (lastReadTimestamp < firstMessageTimestamp) {\n              // whole channel is unread\n              firstUnreadMessageId = firstMessageWithCreationDate.id;\n            } else {\n              const result = findInMsgSetByDate(channelUnreadUiState.last_read, messages);\n              lastReadMessageId = result.target?.id;\n            }\n            loadMoreFinished(\n              channel.state.messagePagination.hasPrev,\n              channel.state.messages,\n            );\n          }\n        }\n\n        if (!firstUnreadMessageId && !lastReadMessageId) {\n          addNotification(t('Failed to jump to the first unread message'), 'error');\n          return;\n        }\n\n        if (!isInCurrentMessageSet) {\n          dispatch({ loadingMore: true, type: 'setLoadingMore' });\n          try {\n            const targetId = (firstUnreadMessageId ?? lastReadMessageId) as string;\n            await channel.state.loadMessageIntoState(\n              targetId,\n              undefined,\n              queryMessageLimit,\n            );\n            /**\n             * if the index of the last read message on the page is beyond the half of the page,\n             * we have arrived to the oldest page of the channel\n             */\n            const indexOfTarget = channel.state.messages.findIndex(\n              (message) => message.id === targetId,\n            ) as number;\n            loadMoreFinished(\n              channel.state.messagePagination.hasPrev,\n              channel.state.messages,\n            );\n            firstUnreadMessageId =\n              firstUnreadMessageId ?? channel.state.messages[indexOfTarget + 1]?.id;\n          } catch (e) {\n            addNotification(t('Failed to jump to the first unread message'), 'error');\n            loadMoreFinished(\n              channel.state.messagePagination.hasPrev,\n              channel.state.messages,\n            );\n            return;\n          }\n        }\n\n        if (!firstUnreadMessageId) {\n          addNotification(t('Failed to jump to the first unread message'), 'error');\n          return;\n        }\n        if (!channelUnreadUiState.first_unread_message_id)\n          _setChannelUnreadUiState({\n            ...channelUnreadUiState,\n            first_unread_message_id: firstUnreadMessageId,\n            last_read_message_id: lastReadMessageId,\n          });\n        handleHighlightedMessageChange({\n          highlightDuration,\n          highlightedMessageId: firstUnreadMessageId,\n        });\n      },\n      [\n        addNotification,\n        channel,\n        handleHighlightedMessageChange,\n        loadMoreFinished,\n        t,\n        channelUnreadUiState,\n      ],\n    );\n\n  const deleteMessage = useCallback(\n    async (\n      message: StreamMessage<StreamChatGenerics>,\n    ): Promise<MessageResponse<StreamChatGenerics>> => {\n      if (!message?.id) {\n        throw new Error('Cannot delete a message - missing message ID.');\n      }\n      let deletedMessage;\n      if (doDeleteMessageRequest) {\n        deletedMessage = await doDeleteMessageRequest(message);\n      } else {\n        const result = await client.deleteMessage(message.id);\n        deletedMessage = result.message;\n      }\n\n      return deletedMessage;\n    },\n    [client, doDeleteMessageRequest],\n  );\n\n  const updateMessage = (\n    updatedMessage: MessageToSend<StreamChatGenerics> | StreamMessage<StreamChatGenerics>,\n  ) => {\n    // add the message to the local channel state\n    channel.state.addMessageSorted(\n      updatedMessage as MessageResponse<StreamChatGenerics>,\n      true,\n    );\n\n    dispatch({\n      channel,\n      parentId: state.thread && updatedMessage.parent_id,\n      type: 'copyMessagesFromChannel',\n    });\n  };\n\n  const doSendMessage = async (\n    message: MessageToSend<StreamChatGenerics> | StreamMessage<StreamChatGenerics>,\n    customMessageData?: Partial<Message<StreamChatGenerics>>,\n    options?: SendMessageOptions,\n  ) => {\n    const { attachments, id, mentioned_users = [], parent_id, text } = message;\n\n    // channel.sendMessage expects an array of user id strings\n    const mentions = isUserResponseArray<StreamChatGenerics>(mentioned_users)\n      ? mentioned_users.map(({ id }) => id)\n      : mentioned_users;\n\n    const messageData = {\n      attachments,\n      id,\n      mentioned_users: mentions,\n      parent_id,\n      quoted_message_id:\n        parent_id === quotedMessage?.parent_id ? quotedMessage?.id : undefined,\n      text,\n      ...customMessageData,\n    } as Message<StreamChatGenerics>;\n\n    try {\n      let messageResponse: void | SendMessageAPIResponse<StreamChatGenerics>;\n\n      if (doSendMessageRequest) {\n        messageResponse = await doSendMessageRequest(channel, messageData, options);\n      } else {\n        messageResponse = await channel.sendMessage(messageData, options);\n      }\n\n      let existingMessage;\n      for (let i = channel.state.messages.length - 1; i >= 0; i--) {\n        const msg = channel.state.messages[i];\n        if (msg.id && msg.id === messageData.id) {\n          existingMessage = msg;\n          break;\n        }\n      }\n\n      const responseTimestamp = new Date(\n        messageResponse?.message?.updated_at || 0,\n      ).getTime();\n      const existingMessageTimestamp = existingMessage?.updated_at?.getTime() || 0;\n      const responseIsTheNewest = responseTimestamp > existingMessageTimestamp;\n\n      // Replace the message payload after send is completed\n      // We need to check for the newest message payload, because on slow network, the response can arrive later than WS events message.new, message.updated.\n      // Always override existing message in status \"sending\"\n      if (\n        messageResponse?.message &&\n        (responseIsTheNewest || existingMessage?.status === 'sending')\n      ) {\n        updateMessage({\n          ...messageResponse.message,\n          status: 'received',\n        });\n      }\n\n      if (quotedMessage && parent_id === quotedMessage?.parent_id)\n        setQuotedMessage(undefined);\n    } catch (error) {\n      // error response isn't usable so needs to be stringified then parsed\n      const stringError = JSON.stringify(error);\n      const parsedError = (\n        stringError ? JSON.parse(stringError) : {}\n      ) as ErrorFromResponse<APIErrorResponse>;\n\n      // Handle the case where the message already exists\n      // (typically, when retrying to send a message).\n      // If the message already exists, we can assume it was sent successfully,\n      // so we update the message status to \"received\".\n      // Right now, the only way to check this error is by checking\n      // the combination of the error code and the error description,\n      // since there is no special error code for duplicate messages.\n      if (\n        parsedError.code === 4 &&\n        error instanceof Error &&\n        error.message.includes('already exists')\n      ) {\n        updateMessage({\n          ...message,\n          status: 'received',\n        });\n      } else {\n        updateMessage({\n          ...message,\n          error: parsedError,\n          errorStatusCode: parsedError.status || undefined,\n          status: 'failed',\n        });\n\n        thread?.upsertReplyLocally({\n          // @ts-expect-error message type mismatch\n          message: {\n            ...message,\n            error: parsedError,\n            errorStatusCode: parsedError.status || undefined,\n            status: 'failed',\n          },\n        });\n      }\n    }\n  };\n\n  const sendMessage = async (\n    {\n      attachments = [],\n      mentioned_users = [],\n      parent,\n      text = '',\n    }: MessageToSend<StreamChatGenerics>,\n    customMessageData?: Partial<Message<StreamChatGenerics>>,\n    options?: SendMessageOptions,\n  ) => {\n    channel.state.filterErrorMessages();\n\n    const messagePreview = {\n      attachments,\n      created_at: new Date(),\n      html: text,\n      id: customMessageData?.id ?? `${client.userID}-${nanoid()}`,\n      mentioned_users,\n      parent_id: parent?.id,\n      reactions: [],\n      status: 'sending',\n      text,\n      type: 'regular',\n      user: client.user,\n    };\n\n    thread?.upsertReplyLocally({\n      // @ts-expect-error message type mismatch\n      message: messagePreview,\n    });\n\n    updateMessage(messagePreview);\n\n    await doSendMessage(messagePreview, customMessageData, options);\n  };\n\n  const retrySendMessage = async (message: StreamMessage<StreamChatGenerics>) => {\n    updateMessage({\n      ...message,\n      errorStatusCode: undefined,\n      status: 'sending',\n    });\n\n    if (message.attachments) {\n      // remove scraped attachments added during the message composition in MessageInput to prevent sync issues\n      message.attachments = message.attachments.filter(\n        (attachment) => !attachment.og_scrape_url,\n      );\n    }\n\n    await doSendMessage(message);\n  };\n\n  const removeMessage = (message: StreamMessage<StreamChatGenerics>) => {\n    channel.state.removeMessage(message);\n\n    dispatch({\n      channel,\n      parentId: state.thread && message.parent_id,\n      type: 'copyMessagesFromChannel',\n    });\n  };\n\n  /** THREAD */\n\n  const openThread = (\n    message: StreamMessage<StreamChatGenerics>,\n    event?: React.BaseSyntheticEvent,\n  ) => {\n    event?.preventDefault();\n    setQuotedMessage((current) => {\n      if (current?.parent_id !== message?.parent_id) {\n        return undefined;\n      } else {\n        return current;\n      }\n    });\n    dispatch({ channel, message, type: 'openThread' });\n  };\n\n  const closeThread = (event?: React.BaseSyntheticEvent) => {\n    event?.preventDefault();\n    dispatch({ type: 'closeThread' });\n  };\n\n  // eslint-disable-next-line react-hooks/exhaustive-deps\n  const loadMoreThreadFinished = useCallback(\n    debounce(\n      (\n        threadHasMore: boolean,\n        threadMessages: Array<\n          ReturnType<ChannelState<StreamChatGenerics>['formatMessage']>\n        >,\n      ) => {\n        dispatch({\n          threadHasMore,\n          threadMessages,\n          type: 'loadMoreThreadFinished',\n        });\n      },\n      2000,\n      { leading: true, trailing: true },\n    ),\n    [],\n  );\n\n  const loadMoreThread = async (limit: number = DEFAULT_THREAD_PAGE_SIZE) => {\n    // FIXME: should prevent loading more, if state.thread.reply_count === channel.state.threads[parentID].length\n    if (state.threadLoadingMore || !state.thread || !state.threadHasMore) return;\n\n    dispatch({ type: 'startLoadingThread' });\n    const parentId = state.thread.id;\n\n    if (!parentId) {\n      return dispatch({ type: 'closeThread' });\n    }\n\n    const oldMessages = channel.state.threads[parentId] || [];\n    const oldestMessageId = oldMessages[0]?.id;\n\n    try {\n      const queryResponse = await channel.getReplies(parentId, {\n        id_lt: oldestMessageId,\n        limit,\n      });\n\n      const threadHasMoreMessages = hasMoreMessagesProbably(\n        queryResponse.messages.length,\n        limit,\n      );\n      const newThreadMessages = channel.state.threads[parentId] || [];\n\n      // next set loadingMore to false so we can start asking for more data\n      loadMoreThreadFinished(threadHasMoreMessages, newThreadMessages);\n    } catch (e) {\n      loadMoreThreadFinished(false, oldMessages);\n    }\n  };\n\n  const onMentionsHoverOrClick = useMentionsHandlers(onMentionsHover, onMentionsClick);\n\n  const editMessage = useEditMessageHandler(doUpdateMessageRequest);\n\n  const { typing, ...restState } = state;\n\n  const channelStateContextValue = useCreateChannelStateContext<StreamChatGenerics>({\n    ...restState,\n    acceptedFiles,\n    channel,\n    channelCapabilitiesArray,\n    channelConfig,\n    channelUnreadUiState,\n    debounceURLEnrichmentMs: enrichURLForPreviewConfig?.debounceURLEnrichmentMs,\n    dragAndDropWindow,\n    enrichURLForPreview: props.enrichURLForPreview,\n    findURLFn: enrichURLForPreviewConfig?.findURLFn,\n    giphyVersion: props.giphyVersion || 'fixed_height',\n    imageAttachmentSizeHandler:\n      props.imageAttachmentSizeHandler || getImageAttachmentConfiguration,\n    maxNumberOfFiles,\n    multipleUploads,\n    mutes,\n    notifications,\n    onLinkPreviewDismissed: enrichURLForPreviewConfig?.onLinkPreviewDismissed,\n    quotedMessage,\n    shouldGenerateVideoThumbnail: props.shouldGenerateVideoThumbnail || true,\n    videoAttachmentSizeHandler:\n      props.videoAttachmentSizeHandler || getVideoAttachmentConfiguration,\n    watcher_count: state.watcherCount,\n  });\n\n  const channelActionContextValue: ChannelActionContextValue<StreamChatGenerics> =\n    useMemo(\n      () => ({\n        addNotification,\n        closeThread,\n        deleteMessage,\n        dispatch,\n        editMessage,\n        jumpToFirstUnreadMessage,\n        jumpToLatestMessage,\n        jumpToMessage,\n        loadMore,\n        loadMoreNewer,\n        loadMoreThread,\n        markRead,\n        onMentionsClick: onMentionsHoverOrClick,\n        onMentionsHover: onMentionsHoverOrClick,\n        openThread,\n        removeMessage,\n        retrySendMessage,\n        sendMessage,\n        setChannelUnreadUiState,\n        setQuotedMessage,\n        skipMessageDataMemoization,\n        updateMessage,\n      }),\n      // eslint-disable-next-line react-hooks/exhaustive-deps\n      [\n        channel.cid,\n        deleteMessage,\n        enrichURLForPreviewConfig?.findURLFn,\n        enrichURLForPreviewConfig?.onLinkPreviewDismissed,\n        loadMore,\n        loadMoreNewer,\n        markRead,\n        quotedMessage,\n        jumpToFirstUnreadMessage,\n        jumpToMessage,\n        jumpToLatestMessage,\n        setChannelUnreadUiState,\n      ],\n    );\n\n  // @ts-expect-error message type mismatch\n  const componentContextValue: Partial<ComponentContextValue> = useMemo(\n    () => ({\n      Attachment: props.Attachment,\n      AttachmentPreviewList: props.AttachmentPreviewList,\n      AttachmentSelector: props.AttachmentSelector,\n      AttachmentSelectorInitiationButtonContents:\n        props.AttachmentSelectorInitiationButtonContents,\n      AudioRecorder: props.AudioRecorder,\n      AutocompleteSuggestionItem: props.AutocompleteSuggestionItem,\n      AutocompleteSuggestionList: props.AutocompleteSuggestionList,\n      Avatar: props.Avatar,\n      BaseImage: props.BaseImage,\n      CooldownTimer: props.CooldownTimer,\n      CustomMessageActionsList: props.CustomMessageActionsList,\n      DateSeparator: props.DateSeparator,\n      EditMessageInput: props.EditMessageInput,\n      EmojiPicker: props.EmojiPicker,\n      emojiSearchIndex: props.emojiSearchIndex,\n      EmptyStateIndicator: props.EmptyStateIndicator,\n      FileUploadIcon: props.FileUploadIcon,\n      GiphyPreviewMessage: props.GiphyPreviewMessage,\n      HeaderComponent: props.HeaderComponent,\n      Input: props.Input,\n      LinkPreviewList: props.LinkPreviewList,\n      LoadingIndicator: props.LoadingIndicator,\n      Message: props.Message,\n      MessageActions: props.MessageActions,\n      MessageBlocked: props.MessageBlocked,\n      MessageBouncePrompt: props.MessageBouncePrompt,\n      MessageDeleted: props.MessageDeleted,\n      MessageListNotifications: props.MessageListNotifications,\n      MessageNotification: props.MessageNotification,\n      MessageOptions: props.MessageOptions,\n      MessageRepliesCountButton: props.MessageRepliesCountButton,\n      MessageStatus: props.MessageStatus,\n      MessageSystem: props.MessageSystem,\n      MessageTimestamp: props.MessageTimestamp,\n      ModalGallery: props.ModalGallery,\n      PinIndicator: props.PinIndicator,\n      PollActions: props.PollActions,\n      PollContent: props.PollContent,\n      PollCreationDialog: props.PollCreationDialog,\n      PollHeader: props.PollHeader,\n      PollOptionSelector: props.PollOptionSelector,\n      QuotedMessage: props.QuotedMessage,\n      QuotedMessagePreview: props.QuotedMessagePreview,\n      QuotedPoll: props.QuotedPoll,\n      reactionOptions: props.reactionOptions,\n      ReactionSelector: props.ReactionSelector,\n      ReactionsList: props.ReactionsList,\n      ReactionsListModal: props.ReactionsListModal,\n      SendButton: props.SendButton,\n      StartRecordingAudioButton: props.StartRecordingAudioButton,\n      StopAIGenerationButton: props.StopAIGenerationButton,\n      StreamedMessageText: props.StreamedMessageText,\n      ThreadHead: props.ThreadHead,\n      ThreadHeader: props.ThreadHeader,\n      ThreadStart: props.ThreadStart,\n      Timestamp: props.Timestamp,\n      TriggerProvider: props.TriggerProvider,\n      TypingIndicator: props.TypingIndicator,\n      UnreadMessagesNotification: props.UnreadMessagesNotification,\n      UnreadMessagesSeparator: props.UnreadMessagesSeparator,\n      VirtualMessage: props.VirtualMessage,\n    }),\n    [\n      props.Attachment,\n      props.AttachmentPreviewList,\n      props.AttachmentSelector,\n      props.AttachmentSelectorInitiationButtonContents,\n      props.AudioRecorder,\n      props.AutocompleteSuggestionItem,\n      props.AutocompleteSuggestionList,\n      props.Avatar,\n      props.BaseImage,\n      props.CooldownTimer,\n      props.CustomMessageActionsList,\n      props.DateSeparator,\n      props.EditMessageInput,\n      props.EmojiPicker,\n      props.emojiSearchIndex,\n      props.EmptyStateIndicator,\n      props.FileUploadIcon,\n      props.GiphyPreviewMessage,\n      props.HeaderComponent,\n      props.Input,\n      props.LinkPreviewList,\n      props.LoadingIndicator,\n      props.Message,\n      props.MessageActions,\n      props.MessageBlocked,\n      props.MessageBouncePrompt,\n      props.MessageDeleted,\n      props.MessageListNotifications,\n      props.MessageNotification,\n      props.MessageOptions,\n      props.MessageRepliesCountButton,\n      props.MessageStatus,\n      props.MessageSystem,\n      props.MessageTimestamp,\n      props.ModalGallery,\n      props.PinIndicator,\n      props.PollActions,\n      props.PollContent,\n      props.PollCreationDialog,\n      props.PollHeader,\n      props.PollOptionSelector,\n      props.QuotedMessage,\n      props.QuotedMessagePreview,\n      props.QuotedPoll,\n      props.reactionOptions,\n      props.ReactionSelector,\n      props.ReactionsList,\n      props.ReactionsListModal,\n      props.SendButton,\n      props.StartRecordingAudioButton,\n      props.StopAIGenerationButton,\n      props.StreamedMessageText,\n      props.ThreadHead,\n      props.ThreadHeader,\n      props.ThreadStart,\n      props.Timestamp,\n      props.TriggerProvider,\n      props.TypingIndicator,\n      props.UnreadMessagesNotification,\n      props.UnreadMessagesSeparator,\n      props.VirtualMessage,\n    ],\n  );\n\n  const typingContextValue = useCreateTypingContext({\n    typing,\n  });\n\n  if (state.error) {\n    return (\n      <ChannelContainer>\n        <LoadingErrorIndicator error={state.error} />\n      </ChannelContainer>\n    );\n  }\n\n  if (state.loading) {\n    return (\n      <ChannelContainer>\n        <LoadingIndicator />\n      </ChannelContainer>\n    );\n  }\n\n  if (!channel.watch) {\n    return (\n      <ChannelContainer>\n        <div>{t<string>('Channel Missing')}</div>\n      </ChannelContainer>\n    );\n  }\n\n  return (\n    <ChannelContainer className={windowsEmojiClass}>\n      <ChannelStateProvider value={channelStateContextValue}>\n        <ChannelActionProvider value={channelActionContextValue}>\n          <WithComponents overrides={componentContextValue}>\n            <TypingProvider value={typingContextValue}>\n              <div className={`${chatContainerClass}`}>\n                {dragAndDropWindow && (\n                  <DropzoneProvider {...optionalMessageInputProps}>\n                    {children}\n                  </DropzoneProvider>\n                )}\n                {!dragAndDropWindow && <>{children}</>}\n              </div>\n            </TypingProvider>\n          </WithComponents>\n        </ChannelActionProvider>\n      </ChannelStateProvider>\n    </ChannelContainer>\n  );\n};\n\n/**\n * A wrapper component that provides channel data and renders children.\n * The Channel component provides the following contexts:\n * - [ChannelStateContext](https://getstream.io/chat/docs/sdk/react/contexts/channel_state_context/)\n * - [ChannelActionContext](https://getstream.io/chat/docs/sdk/react/contexts/channel_action_context/)\n * - [ComponentContext](https://getstream.io/chat/docs/sdk/react/contexts/component_context/)\n * - [TypingContext](https://getstream.io/chat/docs/sdk/react/contexts/typing_context/)\n */\nexport const Channel = React.memo(UnMemoizedChannel) as typeof UnMemoizedChannel;\n", "import type {\n  Channel,\n  MessageResponse,\n  ChannelState as StreamChannelState,\n} from 'stream-chat';\n\nimport type { ChannelState, StreamMessage } from '../../context/ChannelStateContext';\n\nimport type { DefaultStreamChatGenerics } from '../../types/types';\n\nexport type ChannelStateReducerAction<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> =\n  | {\n      type: 'closeThread';\n    }\n  | {\n      type: 'clearHighlightedMessage';\n    }\n  | {\n      channel: Channel<StreamChatGenerics>;\n      type: 'copyMessagesFromChannel';\n      parentId?: string | null;\n    }\n  | {\n      channel: Channel<StreamChatGenerics>;\n      type: 'copyStateFromChannelOnEvent';\n    }\n  | {\n      channel: Channel<StreamChatGenerics>;\n      highlightedMessageId: string;\n      type: 'jumpToMessageFinished';\n    }\n  | {\n      channel: Channel<StreamChatGenerics>;\n      hasMore: boolean;\n      type: 'initStateFromChannel';\n    }\n  | {\n      hasMore: boolean;\n      messages: StreamMessage<StreamChatGenerics>[];\n      type: 'loadMoreFinished';\n    }\n  | {\n      hasMoreNewer: boolean;\n      messages: StreamMessage<StreamChatGenerics>[];\n      type: 'loadMoreNewerFinished';\n    }\n  | {\n      threadHasMore: boolean;\n      threadMessages: Array<\n        ReturnType<StreamChannelState<StreamChatGenerics>['formatMessage']>\n      >;\n      type: 'loadMoreThreadFinished';\n    }\n  | {\n      channel: Channel<StreamChatGenerics>;\n      message: StreamMessage<StreamChatGenerics>;\n      type: 'openThread';\n    }\n  | {\n      error: Error;\n      type: 'setError';\n    }\n  | {\n      loadingMore: boolean;\n      type: 'setLoadingMore';\n    }\n  | {\n      loadingMoreNewer: boolean;\n      type: 'setLoadingMoreNewer';\n    }\n  | {\n      message: StreamMessage<StreamChatGenerics>;\n      type: 'setThread';\n    }\n  | {\n      channel: Channel<StreamChatGenerics>;\n      type: 'setTyping';\n    }\n  | {\n      type: 'startLoadingThread';\n    }\n  | {\n      channel: Channel<StreamChatGenerics>;\n      message: MessageResponse<StreamChatGenerics>;\n      type: 'updateThreadOnEvent';\n    }\n  | {\n      type: 'jumpToLatestMessage';\n    };\n\nexport const makeChannelReducer =\n  <StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics>() =>\n  (\n    state: ChannelState<StreamChatGenerics>,\n    action: ChannelStateReducerAction<StreamChatGenerics>,\n  ) => {\n    switch (action.type) {\n      case 'closeThread': {\n        return {\n          ...state,\n          thread: null,\n          threadLoadingMore: false,\n          threadMessages: [],\n        };\n      }\n\n      case 'copyMessagesFromChannel': {\n        const { channel, parentId } = action;\n        return {\n          ...state,\n          messages: [...channel.state.messages],\n          pinnedMessages: [...channel.state.pinnedMessages],\n          // copying messages from channel happens with new message - this resets the suppressAutoscroll\n          suppressAutoscroll: false,\n          threadMessages: parentId\n            ? { ...channel.state.threads }[parentId] || []\n            : state.threadMessages,\n        };\n      }\n\n      case 'copyStateFromChannelOnEvent': {\n        const { channel } = action;\n        return {\n          ...state,\n          members: { ...channel.state.members },\n          messages: [...channel.state.messages],\n          pinnedMessages: [...channel.state.pinnedMessages],\n          read: { ...channel.state.read },\n          watcherCount: channel.state.watcher_count,\n          watchers: { ...channel.state.watchers },\n        };\n      }\n\n      case 'initStateFromChannel': {\n        const { channel, hasMore } = action;\n        return {\n          ...state,\n          hasMore,\n          loading: false,\n          members: { ...channel.state.members },\n          messages: [...channel.state.messages],\n          pinnedMessages: [...channel.state.pinnedMessages],\n          read: { ...channel.state.read },\n          watcherCount: channel.state.watcher_count,\n          watchers: { ...channel.state.watchers },\n        };\n      }\n\n      case 'jumpToLatestMessage': {\n        return {\n          ...state,\n          hasMoreNewer: false,\n          highlightedMessageId: undefined,\n          loading: false,\n          suppressAutoscroll: false,\n        };\n      }\n\n      case 'jumpToMessageFinished': {\n        return {\n          ...state,\n          hasMoreNewer: action.channel.state.messagePagination.hasNext,\n          highlightedMessageId: action.highlightedMessageId,\n          messages: action.channel.state.messages,\n        };\n      }\n\n      case 'clearHighlightedMessage': {\n        return {\n          ...state,\n          highlightedMessageId: undefined,\n        };\n      }\n\n      case 'loadMoreFinished': {\n        const { hasMore, messages } = action;\n        return {\n          ...state,\n          hasMore,\n          loadingMore: false,\n          messages,\n          suppressAutoscroll: false,\n        };\n      }\n\n      case 'loadMoreNewerFinished': {\n        const { hasMoreNewer, messages } = action;\n        return {\n          ...state,\n          hasMoreNewer,\n          loadingMoreNewer: false,\n          messages,\n        };\n      }\n\n      case 'loadMoreThreadFinished': {\n        const { threadHasMore, threadMessages } = action;\n        return {\n          ...state,\n          threadHasMore,\n          threadLoadingMore: false,\n          threadMessages,\n        };\n      }\n\n      case 'openThread': {\n        const { channel, message } = action;\n        return {\n          ...state,\n          thread: message,\n          threadHasMore: true,\n          threadMessages: message.id\n            ? { ...channel.state.threads }[message.id] || []\n            : [],\n          threadSuppressAutoscroll: false,\n        };\n      }\n\n      case 'setError': {\n        const { error } = action;\n        return { ...state, error };\n      }\n\n      case 'setLoadingMore': {\n        const { loadingMore } = action;\n        // suppress the autoscroll behavior\n        return { ...state, loadingMore, suppressAutoscroll: loadingMore };\n      }\n\n      case 'setLoadingMoreNewer': {\n        const { loadingMoreNewer } = action;\n        return { ...state, loadingMoreNewer };\n      }\n\n      case 'setThread': {\n        const { message } = action;\n        return { ...state, thread: message };\n      }\n\n      case 'setTyping': {\n        const { channel } = action;\n        return {\n          ...state,\n          typing: { ...channel.state.typing },\n        };\n      }\n\n      case 'startLoadingThread': {\n        return {\n          ...state,\n          threadLoadingMore: true,\n          threadSuppressAutoscroll: true,\n        };\n      }\n\n      case 'updateThreadOnEvent': {\n        const { channel, message } = action;\n        if (!state.thread) return state;\n        return {\n          ...state,\n          thread:\n            message?.id === state.thread.id\n              ? channel.state.formatMessage(message)\n              : state.thread,\n          threadMessages: state.thread?.id\n            ? { ...channel.state.threads }[state.thread.id] || []\n            : [],\n        };\n      }\n\n      default:\n        return state;\n    }\n  };\n\nexport const initialState = {\n  error: null,\n  hasMore: true,\n  hasMoreNewer: false,\n  loading: true,\n  loadingMore: false,\n  members: {},\n  messages: [],\n  pinnedMessages: [],\n  read: {},\n  suppressAutoscroll: false,\n  thread: null,\n  threadHasMore: true,\n  threadLoadingMore: false,\n  threadMessages: [],\n  threadSuppressAutoscroll: false,\n  typing: {},\n  watcherCount: 0,\n  watchers: {},\n};\n", "import { useMemo } from 'react';\n\nimport { isDate, isDayOrMoment } from '../../../i18n';\n\nimport type { ChannelStateContextValue } from '../../../context/ChannelStateContext';\n\nimport type { DefaultStreamChatGenerics } from '../../../types/types';\n\nexport const useCreateChannelStateContext = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  value: Omit<ChannelStateContextValue<StreamChatGenerics>, 'channelCapabilities'> & {\n    channelCapabilitiesArray: string[];\n    skipMessageDataMemoization?: boolean;\n  },\n) => {\n  const {\n    acceptedFiles,\n    channel,\n    channelCapabilitiesArray = [],\n    channelConfig,\n    channelUnreadUiState,\n    debounceURLEnrichmentMs,\n    dragAndDropWindow,\n    enrichURLForPreview,\n    error,\n    findURLFn,\n    giphyVersion,\n    hasMore,\n    hasMoreNewer,\n    highlightedMessageId,\n    imageAttachmentSizeHandler,\n    loading,\n    loadingMore,\n    maxNumberOfFiles,\n    members,\n    messages = [],\n    multipleUploads,\n    mutes,\n    notifications,\n    onLinkPreviewDismissed,\n    pinnedMessages,\n    quotedMessage,\n    read = {},\n    shouldGenerateVideoThumbnail,\n    skipMessageDataMemoization,\n    suppressAutoscroll,\n    thread,\n    threadHasMore,\n    threadLoadingMore,\n    threadMessages = [],\n    videoAttachmentSizeHandler,\n    watcher_count,\n    watcherCount,\n    watchers,\n  } = value;\n\n  const channelId = channel.cid;\n  const lastRead = channel.initialized && channel.lastRead()?.getTime();\n  const membersLength = Object.keys(members || []).length;\n  const notificationsLength = notifications.length;\n  const readUsers = Object.values(read);\n  const readUsersLength = readUsers.length;\n  const readUsersLastReads = readUsers\n    .map(({ last_read }) => last_read.toISOString())\n    .join();\n  const threadMessagesLength = threadMessages?.length;\n\n  const channelCapabilities: Record<string, boolean> = {};\n\n  channelCapabilitiesArray.forEach((capability) => {\n    channelCapabilities[capability] = true;\n  });\n\n  const memoizedMessageData = skipMessageDataMemoization\n    ? messages\n    : messages\n        .map(\n          ({\n            deleted_at,\n            latest_reactions,\n            pinned,\n            reply_count,\n            status,\n            updated_at,\n            user,\n          }) =>\n            `${deleted_at}${\n              latest_reactions ? latest_reactions.map(({ type }) => type).join() : ''\n            }${pinned}${reply_count}${status}${\n              updated_at && (isDayOrMoment(updated_at) || isDate(updated_at))\n                ? updated_at.toISOString()\n                : updated_at || ''\n            }${user?.updated_at}`,\n        )\n        .join();\n\n  const memoizedThreadMessageData = threadMessages\n    .map(\n      ({ deleted_at, latest_reactions, pinned, status, updated_at, user }) =>\n        `${deleted_at}${\n          latest_reactions ? latest_reactions.map(({ type }) => type).join() : ''\n        }${pinned}${status}${\n          updated_at && (isDayOrMoment(updated_at) || isDate(updated_at))\n            ? updated_at.toISOString()\n            : updated_at || ''\n        }${user?.updated_at}`,\n    )\n    .join();\n\n  const channelStateContext: ChannelStateContextValue<StreamChatGenerics> = useMemo(\n    () => ({\n      acceptedFiles,\n      channel,\n      channelCapabilities,\n      channelConfig,\n      channelUnreadUiState,\n      debounceURLEnrichmentMs,\n      dragAndDropWindow,\n      enrichURLForPreview,\n      error,\n      findURLFn,\n      giphyVersion,\n      hasMore,\n      hasMoreNewer,\n      highlightedMessageId,\n      imageAttachmentSizeHandler,\n      loading,\n      loadingMore,\n      maxNumberOfFiles,\n      members,\n      messages,\n      multipleUploads,\n      mutes,\n      notifications,\n      onLinkPreviewDismissed,\n      pinnedMessages,\n      quotedMessage,\n      read,\n      shouldGenerateVideoThumbnail,\n      suppressAutoscroll,\n      thread,\n      threadHasMore,\n      threadLoadingMore,\n      threadMessages,\n      videoAttachmentSizeHandler,\n      watcher_count,\n      watcherCount,\n      watchers,\n    }),\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    [\n      channel.data?.name, // otherwise ChannelHeader will not be updated\n      channelId,\n      channelUnreadUiState,\n      debounceURLEnrichmentMs,\n      enrichURLForPreview,\n      error,\n      findURLFn,\n      hasMore,\n      hasMoreNewer,\n      highlightedMessageId,\n      lastRead,\n      loading,\n      loadingMore,\n      membersLength,\n      memoizedMessageData,\n      memoizedThreadMessageData,\n      notificationsLength,\n      onLinkPreviewDismissed,\n      quotedMessage,\n      readUsersLength,\n      readUsersLastReads,\n      shouldGenerateVideoThumbnail,\n      skipMessageDataMemoization,\n      suppressAutoscroll,\n      thread,\n      threadHasMore,\n      threadLoadingMore,\n      threadMessagesLength,\n      watcherCount,\n    ],\n  );\n\n  return channelStateContext;\n};\n", "{\n  \"Add a comment\": \"Einen Kommentar hinzuf\u00FCgen\",\n  \"Add an option\": \"Eine Option hinzuf\u00FCgen\",\n  \"All results loaded\": \"Alle Ergebnisse geladen\",\n  \"Allow access to camera\": \"Zugriff auf Kamera erlauben\",\n  \"Allow access to microphone\": \"Zugriff auf Mikrofon erlauben\",\n  \"Allow comments\": \"Kommentare erlauben\",\n  \"Allow option suggestion\": \"Optionsvorschl\u00E4ge erlauben\",\n  \"An error has occurred during recording\": \"Ein Fehler ist w\u00E4hrend der Aufnahme aufgetreten\",\n  \"An error has occurred during the recording processing\": \"Ein Fehler ist w\u00E4hrend der Aufnahmeverarbeitung aufgetreten\",\n  \"Anonymous\": \"Anonym\",\n  \"Anonymous poll\": \"Anonyme Umfrage\",\n  \"Archive\": \"Archivieren\",\n  \"Ask a question\": \"Eine Frage stellen\",\n  \"Attach files\": \"Dateien anh\u00E4ngen\",\n  \"Cancel\": \"Abbrechen\",\n  \"Cannot seek in the recording\": \"In der Aufnahme kann nicht gesucht werden\",\n  \"Channel Missing\": \"Kanal fehlt\",\n  \"Close\": \"Schlie\u00DFen\",\n  \"Close emoji picker\": \"Emoji-Auswahl schlie\u00DFen\",\n  \"Commands matching\": \"\u00DCbereinstimmende Befehle\",\n  \"Connection failure, reconnecting now...\": \"Verbindungsfehler, Wiederherstellung der Verbindung...\",\n  \"Create\": \"Erstellen\",\n  \"Create poll\": \"Umfrage erstellen\",\n  \"Delete\": \"L\u00F6schen\",\n  \"Delivered\": \"Zugestellt\",\n  \"Download attachment {{ name }}\": \"Anhang {{ name }} herunterladen\",\n  \"Drag your files here\": \"Ziehen Sie Ihre Dateien hierher\",\n  \"Drag your files here to add to your post\": \"Ziehen Sie Ihre Dateien hierher, um sie Ihrem Beitrag hinzuzuf\u00FCgen\",\n  \"Edit Message\": \"Nachricht bearbeiten\",\n  \"Edit message request failed\": \"Anfrage zum Bearbeiten der Nachricht fehlgeschlagen\",\n  \"Edited\": \"Bearbeitet\",\n  \"Emoji matching\": \"Passende Emojis\",\n  \"Empty message...\": \"Leere Nachricht...\",\n  \"End\": \"Beenden\",\n  \"End vote\": \"Abstimmung beenden\",\n  \"Error adding flag\": \"Fehler beim Hinzuf\u00FCgen des Flags\",\n  \"Error connecting to chat, refresh the page to try again.\": \"Verbindungsfehler zum Chat, aktualisieren Sie die Seite, um es erneut zu versuchen.\",\n  \"Error deleting message\": \"Fehler beim L\u00F6schen der Nachricht\",\n  \"Error fetching reactions\": \"Fehler beim Laden von Reaktionen\",\n  \"Error marking message unread. Cannot mark unread messages older than the newest 100 channel messages.\": \"Fehler beim Markieren der Nachricht als ungelesen. Kann keine \u00E4lteren ungelesenen Nachrichten markieren als die neuesten 100 Kanalnachrichten.\",\n  \"Error muting a user ...\": \"Fehler beim Stummschalten eines Nutzers.\",\n  \"Error pinning message\": \"Fehler beim Pinnen der Nachricht\",\n  \"Error removing message pin\": \"Fehler beim Entfernen der gepinnten Nachricht\",\n  \"Error reproducing the recording\": \"Fehler bei der Wiedergabe der Aufnahme\",\n  \"Error starting recording\": \"Fehler beim Starten der Aufnahme\",\n  \"Error unmuting a user ...\": \"Fehler beim Aufheben der Stummschaltung eines Nutzers ...\",\n  \"Error uploading attachment\": \"Fehler beim Hochladen des Anhangs\",\n  \"Error uploading file\": \"Fehler beim Hochladen der Datei\",\n  \"Error uploading image\": \"Fehler beim Hochladen des Bildes\",\n  \"Error \u00B7 Unsent\": \"Fehler \u00B7 Nicht gesendet\",\n  \"Error: {{ errorMessage }}\": \"Fehler: {{ errorMessage }}\",\n  \"Failed to jump to the first unread message\": \"Fehler beim Springen zur ersten ungelesenen Nachricht\",\n  \"Failed to mark channel as read\": \"Fehler beim Markieren des Kanals als gelesen\",\n  \"Failed to play the recording\": \"Wiedergabe der Aufnahme fehlgeschlagen\",\n  \"File\": \"Datei\",\n  \"File is too large: {{ size }}, maximum upload size is {{ limit }}\": \"Datei ist zu gro\u00DF: {{ size }}, maximale Upload-Gr\u00F6\u00DFe betr\u00E4gt {{ limit }}\",\n  \"Flag\": \"Melden\",\n  \"Generating...\": \"Generieren...\",\n  \"Latest Messages\": \"Neueste Nachrichten\",\n  \"Load more\": \"Mehr laden\",\n  \"Mark as unread\": \"Als ungelesen markieren\",\n  \"Maximum number of votes (from 2 to 10)\": \"Maximale Anzahl der Stimmen (von 2 bis 10)\",\n  \"Menu\": \"Men\u00FC\",\n  \"Message Failed \u00B7 Click to try again\": \"Nachricht fehlgeschlagen \u00B7 Klicken, um es erneut zu versuchen\",\n  \"Message Failed \u00B7 Unauthorized\": \"Nachricht fehlgeschlagen \u00B7 Nicht autorisiert\",\n  \"Message deleted\": \"Nachricht gel\u00F6scht\",\n  \"Message has been successfully flagged\": \"Nachricht wurde erfolgreich gemeldet\",\n  \"Message pinned\": \"Nachricht angeheftet\",\n  \"Message was blocked by moderation policies\": \"Nachricht wurde durch moderationsrichtlinien blockiert\",\n  \"Messages have been marked unread.\": \"Nachrichten wurden als ungelesen markiert.\",\n  \"Missing permissions to upload the attachment\": \"Fehlende Berechtigungen zum Hochladen des Anhangs\",\n  \"Multiple answers\": \"Mehrere Antworten\",\n  \"Mute\": \"Stummschalten\",\n  \"New\": \"Neu\",\n  \"New Messages!\": \"Neue Nachrichten!\",\n  \"No chats here yet\u2026\": \"Noch keine Chats hier...\",\n  \"No results found\": \"Keine Ergebnisse gefunden\",\n  \"Nobody will be able to vote in this poll anymore.\": \"Niemand kann mehr in dieser Umfrage abstimmen.\",\n  \"Nothing yet...\": \"Noch nichts...\",\n  \"Ok\": \"Ok\",\n  \"Open emoji picker\": \"Emoji-Auswahl \u00F6ffnen\",\n  \"Option already exists\": \"Option existiert bereits\",\n  \"Options\": \"Optionen\",\n  \"People matching\": \"Passende Personen\",\n  \"Pin\": \"Anheften\",\n  \"Pinned by\": \"Angeheftet von\",\n  \"Poll\": \"Umfrage\",\n  \"Poll comments\": \"Umfragekommentare\",\n  \"Poll options\": \"Umfrageoptionen\",\n  \"Poll results\": \"Umfrageergebnisse\",\n  \"Question\": \"Frage\",\n  \"Quote\": \"Zitieren\",\n  \"Recording format is not supported and cannot be reproduced\": \"Aufnahmeformat wird nicht unterst\u00FCtzt und kann nicht wiedergegeben werden\",\n  \"Reply\": \"Antworten\",\n  \"Reply to Message\": \"Auf Nachricht antworten\",\n  \"Search\": \"Suche\",\n  \"Searching...\": \"Suchen...\",\n  \"See all options ({{count}})_one\": \"Alle Optionen anzeigen ({{count}})\",\n  \"See all options ({{count}})_other\": \"Alle Optionen anzeigen ({{count}})\",\n  \"Select one\": \"Eine ausw\u00E4hlen\",\n  \"Select one or more\": \"Eine oder mehrere ausw\u00E4hlen\",\n  \"Select up to {{count}}_one\": \"Bis zu {{count}} ausw\u00E4hlen\",\n  \"Select up to {{count}}_other\": \"Bis zu {{count}} ausw\u00E4hlen\",\n  \"Send\": \"Senden\",\n  \"Send Anyway\": \"Trotzdem senden\",\n  \"Send message request failed\": \"Senden der Nachrichtenanfrage fehlgeschlagen\",\n  \"Sending...\": \"Senden...\",\n  \"Show all\": \"Alle anzeigen\",\n  \"Shuffle\": \"Mischen\",\n  \"Slow Mode ON\": \"Langsamer Modus EIN\",\n  \"Some of the files will not be accepted\": \"Einige der Dateien werden nicht akzeptiert\",\n  \"Start typing to search\": \"Tippen Sie, um zu suchen\",\n  \"Submit\": \"Absenden\",\n  \"Suggest an option\": \"Eine Option vorschlagen\",\n  \"Thinking...\": \"Denken...\",\n  \"This message did not meet our content guidelines\": \"Diese Nachricht entsprach nicht unseren Inhaltsrichtlinien\",\n  \"This message was deleted...\": \"Diese Nachricht wurde gel\u00F6scht...\",\n  \"Thread\": \"Thread\",\n  \"To start recording, allow the camera access in your browser\": \"Um mit der Aufnahme zu beginnen, erlauben Sie den Zugriff auf die Kamera in Ihrem Browser\",\n  \"To start recording, allow the microphone access in your browser\": \"Um mit der Aufnahme zu beginnen, erlauben Sie den Zugriff auf das Mikrofon in Ihrem Browser\",\n  \"Type a number from 2 to 10\": \"Geben Sie eine Zahl von 2 bis 10 ein\",\n  \"Type your message\": \"Nachricht eingeben\",\n  \"Unarchive\": \"Archivierung aufheben\",\n  \"Unmute\": \"Stummschaltung aufheben\",\n  \"Unpin\": \"Anheftung aufheben\",\n  \"Unread messages\": \"Ungelesene Nachrichten\",\n  \"Unsupported attachment\": \"Nicht unterst\u00FCtzter Anhang\",\n  \"Update your comment\": \"Ihren Kommentar aktualisieren\",\n  \"Upload type: \\\"{{ type }}\\\" is not allowed\": \"Upload-Typ: \\\"{{ type }}\\\" ist nicht erlaubt\",\n  \"User uploaded content\": \"Vom Benutzer hochgeladener Inhalt\",\n  \"View results\": \"Ergebnisse anzeigen\",\n  \"View {{count}} comments_one\": \"{{count}} Kommentar anzeigen\",\n  \"View {{count}} comments_other\": \"{{count}} Kommentare anzeigen\",\n  \"Voice message\": \"Sprachnachricht\",\n  \"Vote ended\": \"Abstimmung beendet\",\n  \"Wait until all attachments have uploaded\": \"Bitte warten, bis alle Anh\u00E4nge hochgeladen wurden\",\n  \"You\": \"Du\",\n  \"You have no channels currently\": \"Du hast momentan noch keine Kan\u00E4le\",\n  \"You've reached the maximum number of files\": \"Die maximale Anzahl an Dateien ist erreicht\",\n  \"aria/Attachment\": \"Anhang\",\n  \"aria/Cancel Reply\": \"Antwort abbrechen\",\n  \"aria/Cancel upload\": \"Upload abbrechen\",\n  \"aria/Channel list\": \"Kanalliste\",\n  \"aria/Channel search results\": \"Kanalsuchergebnisse\",\n  \"aria/Close thread\": \"Thread schlie\u00DFen\",\n  \"aria/Download attachment\": \"Anhang herunterladen\",\n  \"aria/Emoji picker\": \"Emoji-Auswahl\",\n  \"aria/File input\": \"Dateieingabe\",\n  \"aria/File upload\": \"Datei hochladen\",\n  \"aria/Image input\": \"Bildeingabe\",\n  \"aria/Load More Channels\": \"Mehr Kan\u00E4le laden\",\n  \"aria/Menu\": \"Men\u00FC\",\n  \"aria/Message Options\": \"Nachrichtenoptionen\",\n  \"aria/Open Attachment Selector\": \"Anhang-Auswahl \u00F6ffnen\",\n  \"aria/Open Message Actions Menu\": \"Nachrichtenaktionsmen\u00FC \u00F6ffnen\",\n  \"aria/Open Reaction Selector\": \"Reaktionsauswahl \u00F6ffnen\",\n  \"aria/Open Thread\": \"Thread \u00F6ffnen\",\n  \"aria/Reaction list\": \"Reaktionsliste\",\n  \"aria/Remove attachment\": \"Anhang entfernen\",\n  \"aria/Retry upload\": \"Upload erneut versuchen\",\n  \"aria/Search results\": \"Suchergebnisse\",\n  \"aria/Search results header filter button\": \"Suchergebnisse-Kopfzeilen-Filterbutton\",\n  \"aria/Send\": \"Senden\",\n  \"aria/Stop AI Generation\": \"KI-Generierung stoppen\",\n  \"ban-command-args\": \"[@Benutzername] [Text]\",\n  \"ban-command-description\": \"Einen Benutzer verbannen\",\n  \"giphy-command-args\": \"[Text]\",\n  \"giphy-command-description\": \"Poste ein zuf\u00E4lliges Gif in den Kanal\",\n  \"live\": \"live\",\n  \"mute-command-args\": \"[@Benutzername]\",\n  \"mute-command-description\": \"Stummschalten eines Benutzers\",\n  \"replyCount_one\": \"1 Antwort\",\n  \"replyCount_other\": \"{{ count }} Antworten\",\n  \"search-results-header-filter-source-button-label--channels\": \"Kan\u00E4le\",\n  \"search-results-header-filter-source-button-label--messages\": \"Nachrichten\",\n  \"search-results-header-filter-source-button-label--users\": \"Benutzer\",\n  \"searchResultsCount_one\": \"1 Ergebnis\",\n  \"searchResultsCount_other\": \"{{ count }} Ergebnisse\",\n  \"this content could not be displayed\": \"Dieser Inhalt konnte nicht angezeigt werden\",\n  \"timestamp/DateSeparator\": \"{{ timestamp | timestampFormatter(calendar: true) }}\",\n  \"timestamp/MessageTimestamp\": \"{{ timestamp | timestampFormatter(calendar: true) }}\",\n  \"timestamp/PollVote\": \"{{ timestamp | timestampFormatter(format: MMM D [at] HH:mm) }}\",\n  \"timestamp/PollVoteTooltip\": \"{{ timestamp | timestampFormatter(calendar: true) }}\",\n  \"timestamp/SystemMessage\": \"{{ timestamp | timestampFormatter(format: dddd L) }}\",\n  \"unban-command-args\": \"[@Benutzername]\",\n  \"unban-command-description\": \"Einen Benutzer entbannen\",\n  \"unmute-command-args\": \"[@Benutzername]\",\n  \"unmute-command-description\": \"Stummschaltung eines Benutzers aufheben\",\n  \"unreadMessagesSeparatorText_one\": \"1 ungelesene Nachricht\",\n  \"unreadMessagesSeparatorText_other\": \"{{count}} ungelesene Nachrichten\",\n  \"{{ commaSeparatedUsers }} and {{ moreCount }} more\": \"{{ commaSeparatedUsers }} und {{moreCount}} mehr\",\n  \"{{ commaSeparatedUsers }}, and {{ lastUser }}\": \"{{ commaSeparatedUsers }} und {{ lastUser }}\",\n  \"{{ firstUser }} and {{ secondUser }}\": \"{{ firstUser }} und {{ secondUser }}\",\n  \"{{ imageCount }} more\": \"{{ imageCount }} mehr\",\n  \"{{ memberCount }} members\": \"{{ memberCount }} Mitglieder\",\n  \"{{ user }} has been muted\": \"{{ user }} wurde stummgeschaltet\",\n  \"{{ user }} has been unmuted\": \"Die Stummschaltung von {{ user }} wurde aufgehoben\",\n  \"{{ user }} is typing...\": \"{{ user }} tippt...\",\n  \"{{ users }} and more are typing...\": \"{{ users }} und mehr tippen...\",\n  \"{{ users }} and {{ user }} are typing...\": \"{{ users }} und {{ user }} tippen...\",\n  \"{{ watcherCount }} online\": \"{{ watcherCount }} online\",\n  \"{{count}} unread_one\": \"{{count}} ungelesen\",\n  \"{{count}} unread_other\": \"{{count}} ungelesen\",\n  \"{{count}} votes_one\": \"{{count}} Stimme\",\n  \"{{count}} votes_other\": \"{{count}} Stimmen\",\n  \"\uD83C\uDFD9 Attachment...\": \"\uD83C\uDFD9 Anhang...\",\n  \"\uD83D\uDCCA {{createdBy}} created: {{ pollName}}\": \"\uD83D\uDCCA {{createdBy}} hat erstellt: {{ pollName}}\",\n  \"\uD83D\uDCCA {{votedBy}} voted: {{pollOptionText}}\": \"\uD83D\uDCCA {{votedBy}} hat abgestimmt: {{pollOptionText}}\"\n}\n", "{\n  \"Add a comment\": \"Add a comment\",\n  \"Add an option\": \"Add an option\",\n  \"All results loaded\": \"All results loaded\",\n  \"Allow access to camera\": \"Allow access to camera\",\n  \"Allow access to microphone\": \"Allow access to microphone\",\n  \"Allow comments\": \"Allow comments\",\n  \"Allow option suggestion\": \"Allow option suggestion\",\n  \"An error has occurred during recording\": \"An error has occurred during recording\",\n  \"An error has occurred during the recording processing\": \"An error has occurred during the recording processing\",\n  \"Anonymous\": \"Anonymous\",\n  \"Anonymous poll\": \"Anonymous poll\",\n  \"Archive\": \"Archive\",\n  \"Ask a question\": \"Ask a question\",\n  \"Attach files\": \"Attach files\",\n  \"Cancel\": \"Cancel\",\n  \"Cannot seek in the recording\": \"Cannot seek in the recording\",\n  \"Channel Missing\": \"Channel Missing\",\n  \"Close\": \"Close\",\n  \"Close emoji picker\": \"Close emoji picker\",\n  \"Commands matching\": \"Commands matching\",\n  \"Connection failure, reconnecting now...\": \"Connection failure, reconnecting now...\",\n  \"Create\": \"Create\",\n  \"Create poll\": \"Create poll\",\n  \"Delete\": \"Delete\",\n  \"Delivered\": \"Delivered\",\n  \"Download attachment {{ name }}\": \"Download attachment {{ name }}\",\n  \"Drag your files here\": \"Drag your files here\",\n  \"Drag your files here to add to your post\": \"Drag your files here to add to your post\",\n  \"Edit Message\": \"Edit Message\",\n  \"Edit message request failed\": \"Edit message request failed\",\n  \"Edited\": \"Edited\",\n  \"Emoji matching\": \"Emoji matching\",\n  \"Empty message...\": \"Empty message...\",\n  \"End\": \"End\",\n  \"End vote\": \"End vote\",\n  \"Error adding flag\": \"Error adding flag\",\n  \"Error connecting to chat, refresh the page to try again.\": \"Error connecting to chat, refresh the page to try again.\",\n  \"Error deleting message\": \"Error deleting message\",\n  \"Error fetching reactions\": \"Error loading reactions\",\n  \"Error marking message unread. Cannot mark unread messages older than the newest 100 channel messages.\": \"Error marking message unread. Cannot mark unread messages older than the newest 100 channel messages.\",\n  \"Error muting a user ...\": \"Error muting a user ...\",\n  \"Error pinning message\": \"Error pinning message\",\n  \"Error removing message pin\": \"Error removing message pin\",\n  \"Error reproducing the recording\": \"Error reproducing the recording\",\n  \"Error starting recording\": \"Error starting recording\",\n  \"Error unmuting a user ...\": \"Error unmuting a user ...\",\n  \"Error uploading attachment\": \"Error uploading attachment\",\n  \"Error uploading file\": \"Error uploading file\",\n  \"Error uploading image\": \"Error uploading image\",\n  \"Error \u00B7 Unsent\": \"Error \u00B7 Unsent\",\n  \"Error: {{ errorMessage }}\": \"Error: {{ errorMessage }}\",\n  \"Failed to jump to the first unread message\": \"Failed to jump to the first unread message\",\n  \"Failed to mark channel as read\": \"Failed to mark channel as read\",\n  \"Failed to play the recording\": \"Failed to play the recording\",\n  \"File\": \"File\",\n  \"File is too large: {{ size }}, maximum upload size is {{ limit }}\": \"File is too large: {{ size }}, maximum upload size is {{ limit }}\",\n  \"Flag\": \"Flag\",\n  \"Generating...\": \"Generating...\",\n  \"Latest Messages\": \"Latest Messages\",\n  \"Load more\": \"Load more\",\n  \"Mark as unread\": \"Mark as unread\",\n  \"Maximum number of votes (from 2 to 10)\": \"Maximum number of votes (from 2 to 10)\",\n  \"Menu\": \"Menu\",\n  \"Message Failed \u00B7 Click to try again\": \"Message Failed \u00B7 Click to try again\",\n  \"Message Failed \u00B7 Unauthorized\": \"Message Failed \u00B7 Unauthorized\",\n  \"Message deleted\": \"Message deleted\",\n  \"Message has been successfully flagged\": \"Message has been successfully flagged\",\n  \"Message pinned\": \"Message pinned\",\n  \"Message was blocked by moderation policies\": \"Message was blocked by moderation policies\",\n  \"Messages have been marked unread.\": \"Messages have been marked unread.\",\n  \"Missing permissions to upload the attachment\": \"Missing permissions to upload the attachment\",\n  \"Multiple answers\": \"Multiple answers\",\n  \"Mute\": \"Mute\",\n  \"New\": \"New\",\n  \"New Messages!\": \"New Messages!\",\n  \"No chats here yet\u2026\": \"No chats here yet\u2026\",\n  \"No results found\": \"No results found\",\n  \"Nobody will be able to vote in this poll anymore.\": \"Nobody will be able to vote in this poll anymore.\",\n  \"Nothing yet...\": \"Nothing yet...\",\n  \"Ok\": \"Ok\",\n  \"Open emoji picker\": \"Open emoji picker\",\n  \"Option already exists\": \"Option already exists\",\n  \"Options\": \"Options\",\n  \"People matching\": \"People matching\",\n  \"Pin\": \"Pin\",\n  \"Pinned by\": \"Pinned by\",\n  \"Poll\": \"Poll\",\n  \"Poll comments\": \"Poll comments\",\n  \"Poll options\": \"Poll options\",\n  \"Poll results\": \"Poll results\",\n  \"Question\": \"Question\",\n  \"Quote\": \"Quote\",\n  \"Recording format is not supported and cannot be reproduced\": \"Recording format is not supported and cannot be reproduced\",\n  \"Reply\": \"Reply\",\n  \"Reply to Message\": \"Reply to Message\",\n  \"Search\": \"Search\",\n  \"Searching...\": \"Searching...\",\n  \"See all options ({{count}})_one\": \"See all options ({{count}})\",\n  \"See all options ({{count}})_other\": \"See all options ({{count}})\",\n  \"Select one\": \"Select one\",\n  \"Select one or more\": \"Select one or more\",\n  \"Select up to {{count}}_one\": \"Select up to {{count}}\",\n  \"Select up to {{count}}_other\": \"Select up to {{count}}\",\n  \"Send\": \"Send\",\n  \"Send Anyway\": \"Send Anyway\",\n  \"Send message request failed\": \"Send message request failed\",\n  \"Sending...\": \"Sending...\",\n  \"Show all\": \"Show all\",\n  \"Shuffle\": \"Shuffle\",\n  \"Slow Mode ON\": \"Slow Mode ON\",\n  \"Some of the files will not be accepted\": \"Some of the files will not be accepted\",\n  \"Start typing to search\": \"Start typing to search\",\n  \"Submit\": \"Submit\",\n  \"Suggest an option\": \"Suggest an option\",\n  \"Thinking...\": \"Thinking...\",\n  \"This message did not meet our content guidelines\": \"This message did not meet our content guidelines\",\n  \"This message was deleted...\": \"This message was deleted...\",\n  \"Thread\": \"Thread\",\n  \"To start recording, allow the camera access in your browser\": \"To start recording, allow the camera access in your browser\",\n  \"To start recording, allow the microphone access in your browser\": \"To start recording, allow the microphone access in your browser\",\n  \"Type a number from 2 to 10\": \"Type a number from 2 to 10\",\n  \"Type your message\": \"Type your message\",\n  \"Unarchive\": \"Unarchive\",\n  \"Unmute\": \"Unmute\",\n  \"Unpin\": \"Unpin\",\n  \"Unread messages\": \"Unread messages\",\n  \"Unsupported attachment\": \"Unsupported attachment\",\n  \"Update your comment\": \"Update your comment\",\n  \"Upload type: \\\"{{ type }}\\\" is not allowed\": \"Upload type: \\\"{{ type }}\\\" is not allowed\",\n  \"User uploaded content\": \"User uploaded content\",\n  \"View results\": \"View results\",\n  \"View {{count}} comments_one\": \"View {{count}} comment\",\n  \"View {{count}} comments_other\": \"View {{count}} comments\",\n  \"Voice message\": \"Voice message\",\n  \"Vote ended\": \"Vote ended\",\n  \"Wait until all attachments have uploaded\": \"Wait until all attachments have uploaded\",\n  \"You\": \"You\",\n  \"You have no channels currently\": \"You have no channels currently\",\n  \"You've reached the maximum number of files\": \"You've reached the maximum number of files\",\n  \"aria/Attachment\": \"Attachment\",\n  \"aria/Cancel Reply\": \"Cancel Reply\",\n  \"aria/Cancel upload\": \"Cancel upload\",\n  \"aria/Channel list\": \"Channel list\",\n  \"aria/Channel search results\": \"Channel search results\",\n  \"aria/Close thread\": \"Close thread\",\n  \"aria/Download attachment\": \"aria/Download attachment\",\n  \"aria/Emoji picker\": \"Emoji picker\",\n  \"aria/File input\": \"File input\",\n  \"aria/File upload\": \"File upload\",\n  \"aria/Image input\": \"Image input\",\n  \"aria/Load More Channels\": \"Load More Channels\",\n  \"aria/Menu\": \"Menu\",\n  \"aria/Message Options\": \"Message Options\",\n  \"aria/Open Attachment Selector\": \"aria/Open Attachment Selector\",\n  \"aria/Open Message Actions Menu\": \"Open Message Actions Menu\",\n  \"aria/Open Reaction Selector\": \"Open Reaction Selector\",\n  \"aria/Open Thread\": \"Open Thread\",\n  \"aria/Reaction list\": \"Reaction list\",\n  \"aria/Remove attachment\": \"Remove attachment\",\n  \"aria/Retry upload\": \"Retry upload\",\n  \"aria/Search results\": \"Search results\",\n  \"aria/Search results header filter button\": \"Search results header filter button\",\n  \"aria/Send\": \"Send\",\n  \"aria/Stop AI Generation\": \"Stop AI Generation\",\n  \"live\": \"live\",\n  \"replyCount_one\": \"1 reply\",\n  \"replyCount_other\": \"{{ count }} replies\",\n  \"search-results-header-filter-source-button-label--channels\": \"channels\",\n  \"search-results-header-filter-source-button-label--messages\": \"messages\",\n  \"search-results-header-filter-source-button-label--users\": \"users\",\n  \"searchResultsCount_one\": \"1 result\",\n  \"searchResultsCount_other\": \"{{ count }} results\",\n  \"this content could not be displayed\": \"this content could not be displayed\",\n  \"timestamp/DateSeparator\": \"{{ timestamp | timestampFormatter(calendar: true) }}\",\n  \"timestamp/MessageTimestamp\": \"{{ timestamp | timestampFormatter(calendar: true) }}\",\n  \"timestamp/PollVote\": \"{{ timestamp | timestampFormatter(format: MMM D [at] HH:mm) }}\",\n  \"timestamp/PollVoteTooltip\": \"{{ timestamp | timestampFormatter(calendar: true) }}\",\n  \"timestamp/SystemMessage\": \"{{ timestamp | timestampFormatter(format: dddd L) }}\",\n  \"unreadMessagesSeparatorText_one\": \"1 unread message\",\n  \"unreadMessagesSeparatorText_other\": \"{{count}} unread messages\",\n  \"{{ commaSeparatedUsers }} and {{ moreCount }} more\": \"{{ commaSeparatedUsers }} and {{ moreCount }} more\",\n  \"{{ commaSeparatedUsers }}, and {{ lastUser }}\": \"{{ commaSeparatedUsers }}, and {{ lastUser }}\",\n  \"{{ firstUser }} and {{ secondUser }}\": \"{{ firstUser }} and {{ secondUser }}\",\n  \"{{ imageCount }} more\": \"{{ imageCount }} more\",\n  \"{{ memberCount }} members\": \"{{ memberCount }} members\",\n  \"{{ user }} has been muted\": \"{{ user }} has been muted\",\n  \"{{ user }} has been unmuted\": \"{{ user }} has been unmuted\",\n  \"{{ user }} is typing...\": \"{{ user }} is typing...\",\n  \"{{ users }} and more are typing...\": \"{{ users }} and more are typing...\",\n  \"{{ users }} and {{ user }} are typing...\": \"{{ users }} and {{ user }} are typing...\",\n  \"{{ watcherCount }} online\": \"{{ watcherCount }} online\",\n  \"{{count}} unread_one\": \"{{count}} unread\",\n  \"{{count}} unread_other\": \"{{count}} unread\",\n  \"{{count}} votes_one\": \"{{count}} vote\",\n  \"{{count}} votes_other\": \"{{count}} votes\",\n  \"\uD83C\uDFD9 Attachment...\": \"\uD83C\uDFD9 Attachment...\",\n  \"\uD83D\uDCCA {{createdBy}} created: {{ pollName}}\": \"\uD83D\uDCCA {{createdBy}} created: {{ pollName}}\",\n  \"\uD83D\uDCCA {{votedBy}} voted: {{pollOptionText}}\": \"\uD83D\uDCCA {{votedBy}} voted: {{pollOptionText}}\"\n}\n", "{\n  \"Add a comment\": \"Agregar un comentario\",\n  \"Add an option\": \"Agregar una opci\u00F3n\",\n  \"All results loaded\": \"Todos los resultados cargados\",\n  \"Allow access to camera\": \"Permitir acceso a la c\u00E1mara\",\n  \"Allow access to microphone\": \"Permitir acceso al micr\u00F3fono\",\n  \"Allow comments\": \"Permitir comentarios\",\n  \"Allow option suggestion\": \"Permitir sugerencia de opciones\",\n  \"An error has occurred during recording\": \"Se ha producido un error durante la grabaci\u00F3n\",\n  \"An error has occurred during the recording processing\": \"Se ha producido un error durante el procesamiento de la grabaci\u00F3n\",\n  \"Anonymous\": \"An\u00F3nimo\",\n  \"Anonymous poll\": \"Encuesta an\u00F3nima\",\n  \"Archive\": \"Archivo\",\n  \"Ask a question\": \"Hacer una pregunta\",\n  \"Attach files\": \"Adjuntar archivos\",\n  \"Cancel\": \"Cancelar\",\n  \"Cannot seek in the recording\": \"No se puede buscar en la grabaci\u00F3n\",\n  \"Channel Missing\": \"Falta canal\",\n  \"Close\": \"Cerrar\",\n  \"Close emoji picker\": \"Cerrar el selector de emojis\",\n  \"Commands matching\": \"Coincidencia de comandos\",\n  \"Connection failure, reconnecting now...\": \"Fallo de conexi\u00F3n, reconectando ahora...\",\n  \"Create\": \"Crear\",\n  \"Create poll\": \"Crear encuesta\",\n  \"Delete\": \"Borrar\",\n  \"Delivered\": \"Entregado\",\n  \"Download attachment {{ name }}\": \"Descargar adjunto {{ name }}\",\n  \"Drag your files here\": \"Arrastra tus archivos aqu\u00ED\",\n  \"Drag your files here to add to your post\": \"Arrastra tus archivos aqu\u00ED para agregarlos a tu publicaci\u00F3n\",\n  \"Edit Message\": \"Editar mensaje\",\n  \"Edit message request failed\": \"Error al editar la solicitud de mensaje\",\n  \"Edited\": \"Editado\",\n  \"Emoji matching\": \"Coincidencia de emoji\",\n  \"Empty message...\": \"Mensaje vac\u00EDo...\",\n  \"End\": \"Final\",\n  \"End vote\": \"Finalizar votaci\u00F3n\",\n  \"Error adding flag\": \"Error al agregar la bandera\",\n  \"Error connecting to chat, refresh the page to try again.\": \"Error al conectarse al chat, actualice la p\u00E1gina para volver a intentarlo.\",\n  \"Error deleting message\": \"Error al eliminar el mensaje\",\n  \"Error fetching reactions\": \"Error al cargar las reacciones\",\n  \"Error marking message unread. Cannot mark unread messages older than the newest 100 channel messages.\": \"Error al marcar el mensaje como no le\u00EDdo. No se pueden marcar mensajes no le\u00EDdos m\u00E1s antiguos que los \u00FAltimos 100 mensajes del canal.\",\n  \"Error muting a user ...\": \"Error al silenciar el usuario...\",\n  \"Error pinning message\": \"Error al fijar el mensaje\",\n  \"Error removing message pin\": \"Error al quitar el pin del mensaje\",\n  \"Error reproducing the recording\": \"Error al reproducir la grabaci\u00F3n\",\n  \"Error starting recording\": \"Error al iniciar la grabaci\u00F3n\",\n  \"Error unmuting a user ...\": \"Error al desactivar el silencio del usuario...\",\n  \"Error uploading attachment\": \"Error al subir el archivo adjunto\",\n  \"Error uploading file\": \"Error al cargar el archivo\",\n  \"Error uploading image\": \"Error al subir la imagen\",\n  \"Error \u00B7 Unsent\": \"Error \u00B7 No enviado\",\n  \"Error: {{ errorMessage }}\": \"Error: {{ errorMessage }}\",\n  \"Failed to jump to the first unread message\": \"Error al saltar al primer mensaje no le\u00EDdo\",\n  \"Failed to mark channel as read\": \"Error al marcar el canal como le\u00EDdo\",\n  \"Failed to play the recording\": \"No se pudo reproducir la grabaci\u00F3n\",\n  \"File\": \"Archivo\",\n  \"File is too large: {{ size }}, maximum upload size is {{ limit }}\": \"El archivo es demasiado grande: {{ size }}, el tama\u00F1o m\u00E1ximo de carga es de {{ limit }}\",\n  \"Flag\": \"Marcar\",\n  \"Generating...\": \"Generando...\",\n  \"Latest Messages\": \"\u00DAltimos mensajes\",\n  \"Load more\": \"Cargar m\u00E1s\",\n  \"Mark as unread\": \"Marcar como no le\u00EDdo\",\n  \"Maximum number of votes (from 2 to 10)\": \"N\u00FAmero m\u00E1ximo de votos (de 2 a 10)\",\n  \"Menu\": \"Men\u00FA\",\n  \"Message Failed \u00B7 Click to try again\": \"Mensaje fallido \u00B7 Haga clic para volver a intentarlo\",\n  \"Message Failed \u00B7 Unauthorized\": \"Mensaje fallido \u00B7 No autorizado\",\n  \"Message deleted\": \"Mensaje eliminado\",\n  \"Message has been successfully flagged\": \"El mensaje se marc\u00F3 correctamente\",\n  \"Message pinned\": \"Mensaje fijado\",\n  \"Message was blocked by moderation policies\": \"El mensaje fue bloqueado por las pol\u00EDticas de moderaci\u00F3n\",\n  \"Messages have been marked unread.\": \"Los mensajes han sido marcados como no le\u00EDdos.\",\n  \"Missing permissions to upload the attachment\": \"Faltan permisos para subir el archivo adjunto\",\n  \"Multiple answers\": \"M\u00FAltiples respuestas\",\n  \"Mute\": \"Silenciar\",\n  \"New\": \"Nuevo\",\n  \"New Messages!\": \"\u00A1Nuevos mensajes!\",\n  \"No chats here yet\u2026\": \"A\u00FAn no hay mensajes aqu\u00ED...\",\n  \"No results found\": \"No se han encontrado resultados\",\n  \"Nobody will be able to vote in this poll anymore.\": \"Nadie podr\u00E1 votar en esta encuesta.\",\n  \"Nothing yet...\": \"Nada a\u00FAn...\",\n  \"Ok\": \"Ok\",\n  \"Open emoji picker\": \"Abrir el selector de emojis\",\n  \"Option already exists\": \"La opci\u00F3n ya existe\",\n  \"Options\": \"Opciones\",\n  \"People matching\": \"Personas que coinciden\",\n  \"Pin\": \"Fijar\",\n  \"Pinned by\": \"Fijado por\",\n  \"Poll\": \"Encuesta\",\n  \"Poll comments\": \"Comentarios de la encuesta\",\n  \"Poll options\": \"Opciones de la encuesta\",\n  \"Poll results\": \"Resultados de la encuesta\",\n  \"Question\": \"Pregunta\",\n  \"Quote\": \"Citar\",\n  \"Recording format is not supported and cannot be reproduced\": \"El formato de grabaci\u00F3n no es compatible y no se puede reproducir\",\n  \"Reply\": \"Responder\",\n  \"Reply to Message\": \"Responder al mensaje\",\n  \"Search\": \"Buscar\",\n  \"Searching...\": \"Buscando...\",\n  \"See all options ({{count}})_many\": \"Ver todas las opciones ({{count}})\",\n  \"See all options ({{count}})_one\": \"Ver todas las opciones ({{count}})\",\n  \"See all options ({{count}})_other\": \"Ver todas las opciones ({{count}})\",\n  \"Select one\": \"Seleccionar uno\",\n  \"Select one or more\": \"Seleccionar uno o m\u00E1s\",\n  \"Select up to {{count}}_many\": \"Selecciona hasta {{count}}\",\n  \"Select up to {{count}}_one\": \"Selecciona hasta {{count}}\",\n  \"Select up to {{count}}_other\": \"Selecciona hasta {{count}}\",\n  \"Send\": \"Enviar\",\n  \"Send Anyway\": \"Enviar de todos modos\",\n  \"Send message request failed\": \"Error al enviar la solicitud de mensaje\",\n  \"Sending...\": \"Enviando...\",\n  \"Show all\": \"Mostrar todo\",\n  \"Shuffle\": \"Mezclar\",\n  \"Slow Mode ON\": \"Modo lento activado\",\n  \"Some of the files will not be accepted\": \"Algunos archivos no ser\u00E1n aceptados\",\n  \"Start typing to search\": \"Empieza a escribir para buscar\",\n  \"Submit\": \"Enviar\",\n  \"Suggest an option\": \"Sugerir una opci\u00F3n\",\n  \"Thinking...\": \"Pensando...\",\n  \"This message did not meet our content guidelines\": \"Este mensaje no cumple con nuestras directrices de contenido\",\n  \"This message was deleted...\": \"Este mensaje fue eliminado...\",\n  \"Thread\": \"Hilo\",\n  \"To start recording, allow the camera access in your browser\": \"Para comenzar a grabar, permita el acceso a la c\u00E1mara en su navegador\",\n  \"To start recording, allow the microphone access in your browser\": \"Para comenzar a grabar, permita el acceso al micr\u00F3fono en su navegador\",\n  \"Type a number from 2 to 10\": \"Escribe un n\u00FAmero del 2 al 10\",\n  \"Type your message\": \"Escribe tu mensaje\",\n  \"Unarchive\": \"Desarchivar\",\n  \"Unmute\": \"Activar sonido\",\n  \"Unpin\": \"Desfijar\",\n  \"Unread messages\": \"Mensajes no le\u00EDdos\",\n  \"Unsupported attachment\": \"Adjunto no compatible\",\n  \"Update your comment\": \"Actualizar tu comentario\",\n  \"Upload type: \\\"{{ type }}\\\" is not allowed\": \"Tipo de carga: \\\"{{ type }}\\\" no est\u00E1 permitido\",\n  \"User uploaded content\": \"Contenido subido por el usuario\",\n  \"View results\": \"Ver resultados\",\n  \"View {{count}} comments_many\": \"Ver {{count}} comentarios\",\n  \"View {{count}} comments_one\": \"Ver {{count}} comentario\",\n  \"View {{count}} comments_other\": \"Ver {{count}} comentarios\",\n  \"Voice message\": \"Mensaje de voz\",\n  \"Vote ended\": \"Votaci\u00F3n finalizada\",\n  \"Wait until all attachments have uploaded\": \"Espere hasta que se hayan cargado todos los archivos adjuntos\",\n  \"You\": \"T\u00FA\",\n  \"You have no channels currently\": \"Actualmente no tienes canales\",\n  \"You've reached the maximum number of files\": \"Has alcanzado el n\u00FAmero m\u00E1ximo de archivos\",\n  \"aria/Attachment\": \"Adjunto\",\n  \"aria/Cancel Reply\": \"Cancelar respuesta\",\n  \"aria/Cancel upload\": \"Cancelar carga\",\n  \"aria/Channel list\": \"Lista de canales\",\n  \"aria/Channel search results\": \"Resultados de b\u00FAsqueda de canales\",\n  \"aria/Close thread\": \"Cerrar hilo\",\n  \"aria/Download attachment\": \"Descargar adjunto\",\n  \"aria/Emoji picker\": \"Selector de emojis\",\n  \"aria/File input\": \"Entrada de archivo\",\n  \"aria/File upload\": \"Carga de archivo\",\n  \"aria/Image input\": \"Entrada de imagen\",\n  \"aria/Load More Channels\": \"Cargar m\u00E1s canales\",\n  \"aria/Menu\": \"Men\u00FA\",\n  \"aria/Message Options\": \"Opciones de mensaje\",\n  \"aria/Open Attachment Selector\": \"Abrir selector de adjuntos\",\n  \"aria/Open Message Actions Menu\": \"Abrir men\u00FA de acciones de mensaje\",\n  \"aria/Open Reaction Selector\": \"Abrir selector de reacciones\",\n  \"aria/Open Thread\": \"Abrir hilo\",\n  \"aria/Reaction list\": \"Lista de reacciones\",\n  \"aria/Remove attachment\": \"Eliminar adjunto\",\n  \"aria/Retry upload\": \"Reintentar carga\",\n  \"aria/Search results\": \"Resultados de b\u00FAsqueda\",\n  \"aria/Search results header filter button\": \"Bot\u00F3n de filtro del encabezado de resultados de b\u00FAsqueda\",\n  \"aria/Send\": \"Enviar\",\n  \"aria/Stop AI Generation\": \"Detener generaci\u00F3n de IA\",\n  \"ban-command-args\": \"[@usuario] [texto]\",\n  \"ban-command-description\": \"Prohibir a un usuario\",\n  \"giphy-command-args\": \"[texto]\",\n  \"giphy-command-description\": \"Publicar un gif aleatorio en el canal\",\n  \"live\": \"En vivo\",\n  \"mute-command-args\": \"[@usuario]\",\n  \"mute-command-description\": \"Silenciar a un usuario\",\n  \"replyCount_many\": \"{{ count }} respuestas\",\n  \"replyCount_one\": \"1 respuesta\",\n  \"replyCount_other\": \"{{ count }} respuestas\",\n  \"search-results-header-filter-source-button-label--channels\": \"canales\",\n  \"search-results-header-filter-source-button-label--messages\": \"mensajes\",\n  \"search-results-header-filter-source-button-label--users\": \"usuarios\",\n  \"searchResultsCount_many\": \"{{ count }} resultados\",\n  \"searchResultsCount_one\": \"1 resultado\",\n  \"searchResultsCount_other\": \"{{ count }} resultados\",\n  \"this content could not be displayed\": \"Este contenido no se pudo mostrar\",\n  \"timestamp/DateSeparator\": \"{{ timestamp | timestampFormatter(calendar: true) }}\",\n  \"timestamp/MessageTimestamp\": \"{{ timestamp | timestampFormatter(calendar: true) }}\",\n  \"timestamp/PollVote\": \"{{ timestamp | timestampFormatter(format: MMM D [at] HH:mm) }}\",\n  \"timestamp/PollVoteTooltip\": \"{{ timestamp | timestampFormatter(calendar: true) }}\",\n  \"timestamp/SystemMessage\": \"{{ timestamp | timestampFormatter(format: dddd L) }}\",\n  \"unban-command-args\": \"[@usuario]\",\n  \"unban-command-description\": \"Quitar la prohibici\u00F3n a un usuario\",\n  \"unmute-command-args\": \"[@usuario]\",\n  \"unmute-command-description\": \"Desactivar el silencio de un usuario\",\n  \"unreadMessagesSeparatorText_many\": \"{{count}} mensajes no le\u00EDdos\",\n  \"unreadMessagesSeparatorText_one\": \"1 mensaje no le\u00EDdo\",\n  \"unreadMessagesSeparatorText_other\": \"{{count}} mensajes no le\u00EDdos\",\n  \"{{ commaSeparatedUsers }} and {{ moreCount }} more\": \"{{ commaSeparatedUsers }} y {{ moreCount }} m\u00E1s\",\n  \"{{ commaSeparatedUsers }}, and {{ lastUser }}\": \"{{ commaSeparatedUsers }} y {{ lastUser }}\",\n  \"{{ firstUser }} and {{ secondUser }}\": \"{{ firstUser }} y {{ secondUser }}\",\n  \"{{ imageCount }} more\": \"{{ imageCount }} m\u00E1s\",\n  \"{{ memberCount }} members\": \"{{ memberCount }} miembros\",\n  \"{{ user }} has been muted\": \"{{ user }} ha sido silenciado\",\n  \"{{ user }} has been unmuted\": \"Se ha desactivado el silencio de {{ user }}\",\n  \"{{ user }} is typing...\": \"{{ user }} est\u00E1 escribiendo...\",\n  \"{{ users }} and more are typing...\": \"{{ users }} y m\u00E1s est\u00E1n escribiendo...\",\n  \"{{ users }} and {{ user }} are typing...\": \"{{ users }} y {{ user }} est\u00E1n escribiendo...\",\n  \"{{ watcherCount }} online\": \"{{ watcherCount }} en l\u00EDnea\",\n  \"{{count}} unread_many\": \"{{count}} no le\u00EDdos\",\n  \"{{count}} unread_one\": \"{{count}} no le\u00EDdo\",\n  \"{{count}} unread_other\": \"{{count}} no le\u00EDdos\",\n  \"{{count}} votes_many\": \"{{count}} votos\",\n  \"{{count}} votes_one\": \"1 voto\",\n  \"{{count}} votes_other\": \"{{count}} votos\",\n  \"\uD83C\uDFD9 Attachment...\": \"\uD83C\uDFD9 Adjunto...\",\n  \"\uD83D\uDCCA {{createdBy}} created: {{ pollName}}\": \"\uD83D\uDCCA {{createdBy}} cre\u00F3: {{ pollName}}\",\n  \"\uD83D\uDCCA {{votedBy}} voted: {{pollOptionText}}\": \"\uD83D\uDCCA {{votedBy}} vot\u00F3: {{pollOptionText}}\"\n}\n", "{\n  \"Add a comment\": \"Ajouter un commentaire\",\n  \"Add an option\": \"Ajouter une option\",\n  \"All results loaded\": \"Tous les r\u00E9sultats sont charg\u00E9s\",\n  \"Allow access to camera\": \"Autoriser l'acc\u00E8s \u00E0 la cam\u00E9ra\",\n  \"Allow access to microphone\": \"Autoriser l'acc\u00E8s au microphone\",\n  \"Allow comments\": \"Autoriser les commentaires\",\n  \"Allow option suggestion\": \"Autoriser la suggestion d'options\",\n  \"An error has occurred during recording\": \"Une erreur s'est produite pendant l'enregistrement\",\n  \"An error has occurred during the recording processing\": \"Une erreur s'est produite pendant le traitement de l'enregistrement\",\n  \"Anonymous\": \"Anonyme\",\n  \"Anonymous poll\": \"Sondage anonyme\",\n  \"Archive\": \"Archive\",\n  \"Ask a question\": \"Poser une question\",\n  \"Attach files\": \"Joindre des fichiers\",\n  \"Cancel\": \"Annuler\",\n  \"Cannot seek in the recording\": \"Impossible de rechercher dans l'enregistrement\",\n  \"Channel Missing\": \"Canal Manquant\",\n  \"Close\": \"Fermer\",\n  \"Close emoji picker\": \"Fermer le s\u00E9lecteur d'\u00E9mojis\",\n  \"Commands matching\": \"Correspondance des commandes\",\n  \"Connection failure, reconnecting now...\": \"\u00C9chec de la connexion, reconnexion en cours...\",\n  \"Create\": \"Cr\u00E9er\",\n  \"Create poll\": \"Cr\u00E9er un sondage\",\n  \"Delete\": \"Supprimer\",\n  \"Delivered\": \"Publi\u00E9\",\n  \"Download attachment {{ name }}\": \"T\u00E9l\u00E9charger la pi\u00E8ce jointe {{ name }}\",\n  \"Drag your files here\": \"Glissez vos fichiers ici\",\n  \"Drag your files here to add to your post\": \"Glissez vos fichiers ici pour les ajouter \u00E0 votre publication\",\n  \"Edit Message\": \"\u00C9diter un message\",\n  \"Edit message request failed\": \"\u00C9chec de la demande de modification du message\",\n  \"Edited\": \"Modifi\u00E9\",\n  \"Emoji matching\": \"Correspondance d'\u00E9mojis\",\n  \"Empty message...\": \"Message vide...\",\n  \"End\": \"Fin\",\n  \"End vote\": \"Fin du vote\",\n  \"Error adding flag\": \"Erreur lors de l'ajout du signalement\",\n  \"Error connecting to chat, refresh the page to try again.\": \"Erreur de connexion au chat, rafra\u00EEchissez la page pour r\u00E9essayer.\",\n  \"Error deleting message\": \"Erreur lors de la suppression du message\",\n  \"Error fetching reactions\": \"Erreur lors du chargement des r\u00E9actions\",\n  \"Error marking message unread. Cannot mark unread messages older than the newest 100 channel messages.\": \"Erreur lors de la marque du message comme non lu. Impossible de marquer des messages non lus plus anciens que les 100 derniers messages du canal.\",\n  \"Error muting a user ...\": \"Erreur lors de la mise en sourdine d'un utilisateur...\",\n  \"Error pinning message\": \"Erreur lors de l'\u00E9pinglage du message\",\n  \"Error removing message pin\": \"Erreur lors du retrait de l'\u00E9pinglage du message\",\n  \"Error reproducing the recording\": \"Erreur lors de la reproduction de l'enregistrement\",\n  \"Error starting recording\": \"Erreur lors du d\u00E9marrage de l'enregistrement\",\n  \"Error unmuting a user ...\": \"Erreur lors du d\u00E9marrage de la sourdine d'un utilisateur ...\",\n  \"Error uploading attachment\": \"Erreur lors du t\u00E9l\u00E9chargement de la pi\u00E8ce jointe\",\n  \"Error uploading file\": \"Erreur lors du t\u00E9l\u00E9chargement du fichier\",\n  \"Error uploading image\": \"Erreur lors de l'envoi de l'image\",\n  \"Error \u00B7 Unsent\": \"Erreur - Non envoy\u00E9\",\n  \"Error: {{ errorMessage }}\": \"Erreur : {{ errorMessage }}\",\n  \"Failed to jump to the first unread message\": \"\u00C9chec du saut vers le premier message non lu\",\n  \"Failed to mark channel as read\": \"\u00C9chec du marquage du canal comme lu\",\n  \"Failed to play the recording\": \"Impossible de lire l'enregistrement\",\n  \"File\": \"Fichier\",\n  \"File is too large: {{ size }}, maximum upload size is {{ limit }}\": \"Le fichier est trop volumineux : {{ size }}, la taille maximale de t\u00E9l\u00E9chargement est de {{ limit }}\",\n  \"Flag\": \"Signaler\",\n  \"Generating...\": \"G\u00E9n\u00E9ration...\",\n  \"Latest Messages\": \"Derniers messages\",\n  \"Load more\": \"Charger plus\",\n  \"Mark as unread\": \"Marquer comme non lu\",\n  \"Maximum number of votes (from 2 to 10)\": \"Nombre maximum de votes (de 2 \u00E0 10)\",\n  \"Menu\": \"Menu\",\n  \"Message Failed \u00B7 Click to try again\": \"\u00C9chec de l'envoi du message - Cliquez pour r\u00E9essayer\",\n  \"Message Failed \u00B7 Unauthorized\": \"\u00C9chec de l'envoi du message - Non autoris\u00E9\",\n  \"Message deleted\": \"Message supprim\u00E9\",\n  \"Message has been successfully flagged\": \"Le message a \u00E9t\u00E9 signal\u00E9 avec succ\u00E8s\",\n  \"Message pinned\": \"Message \u00E9pingl\u00E9\",\n  \"Message was blocked by moderation policies\": \"Le message a \u00E9t\u00E9 bloqu\u00E9 par les politiques de mod\u00E9ration\",\n  \"Messages have been marked unread.\": \"Les messages ont \u00E9t\u00E9 marqu\u00E9s comme non lus.\",\n  \"Missing permissions to upload the attachment\": \"Autorisations manquantes pour t\u00E9l\u00E9charger la pi\u00E8ce jointe\",\n  \"Multiple answers\": \"R\u00E9ponses multiples\",\n  \"Mute\": \"Muet\",\n  \"New\": \"Nouveau\",\n  \"New Messages!\": \"Nouveaux Messages!\",\n  \"No chats here yet\u2026\": \"Pas encore de messages ici...\",\n  \"No results found\": \"Aucun r\u00E9sultat trouv\u00E9\",\n  \"Nobody will be able to vote in this poll anymore.\": \"Personne ne pourra plus voter dans ce sondage.\",\n  \"Nothing yet...\": \"Rien pour l'instant...\",\n  \"Ok\": \"D'accord\",\n  \"Open emoji picker\": \"Ouvrir le s\u00E9lecteur d'\u00E9mojis\",\n  \"Option already exists\": \"L'option existe d\u00E9j\u00E0\",\n  \"Options\": \"Options\",\n  \"People matching\": \"Correspondance de personnes\",\n  \"Pin\": \"\u00C9pingler\",\n  \"Pinned by\": \"\u00C9pingl\u00E9 par\",\n  \"Poll\": \"Sondage\",\n  \"Poll comments\": \"Commentaires du sondage\",\n  \"Poll options\": \"Options du sondage\",\n  \"Poll results\": \"R\u00E9sultats du sondage\",\n  \"Question\": \"Question\",\n  \"Quote\": \"Citer\",\n  \"Recording format is not supported and cannot be reproduced\": \"Le format d'enregistrement n'est pas pris en charge et ne peut pas \u00EAtre reproduit\",\n  \"Reply\": \"R\u00E9pondre\",\n  \"Reply to Message\": \"R\u00E9pondre au message\",\n  \"Search\": \"Rechercher\",\n  \"Searching...\": \"Recherche en cours...\",\n  \"See all options ({{count}})_many\": \"Voir toutes les options ({{count}})\",\n  \"See all options ({{count}})_one\": \"Voir toutes les options ({{count}})\",\n  \"See all options ({{count}})_other\": \"Voir toutes les options ({{count}})\",\n  \"Select one\": \"S\u00E9lectionner un\",\n  \"Select one or more\": \"S\u00E9lectionner un ou plusieurs\",\n  \"Select up to {{count}}_many\": \"S\u00E9lectionner jusqu'\u00E0 {{count}}\",\n  \"Select up to {{count}}_one\": \"S\u00E9lectionner jusqu'\u00E0 {{count}}\",\n  \"Select up to {{count}}_other\": \"S\u00E9lectionner jusqu'\u00E0 {{count}}\",\n  \"Send\": \"Envoyer\",\n  \"Send Anyway\": \"Envoyer quand m\u00EAme\",\n  \"Send message request failed\": \"\u00C9chec de la demande d'envoi de message\",\n  \"Sending...\": \"Envoi en cours...\",\n  \"Show all\": \"Tout afficher\",\n  \"Shuffle\": \"M\u00E9langer\",\n  \"Slow Mode ON\": \"Mode lent activ\u00E9\",\n  \"Some of the files will not be accepted\": \"Certains fichiers ne seront pas accept\u00E9s\",\n  \"Start typing to search\": \"Commencez \u00E0 taper pour rechercher\",\n  \"Submit\": \"Envoyer\",\n  \"Suggest an option\": \"Sugg\u00E9rer une option\",\n  \"Thinking...\": \"R\u00E9flexion...\",\n  \"This message did not meet our content guidelines\": \"Ce message ne respecte pas nos directives de contenu\",\n  \"This message was deleted...\": \"Ce message a \u00E9t\u00E9 supprim\u00E9...\",\n  \"Thread\": \"Fil de discussion\",\n  \"To start recording, allow the camera access in your browser\": \"Pour commencer l'enregistrement, autorisez l'acc\u00E8s \u00E0 la cam\u00E9ra dans votre navigateur\",\n  \"To start recording, allow the microphone access in your browser\": \"Pour commencer l'enregistrement, autorisez l'acc\u00E8s au microphone dans votre navigateur\",\n  \"Type a number from 2 to 10\": \"Tapez un nombre de 2 \u00E0 10\",\n  \"Type your message\": \"Tapez votre message\",\n  \"Unarchive\": \"D\u00E9sarchiver\",\n  \"Unmute\": \"D\u00E9sactiver muet\",\n  \"Unpin\": \"D\u00E9tacher\",\n  \"Unread messages\": \"Messages non lus\",\n  \"Unsupported attachment\": \"Pi\u00E8ce jointe non prise en charge\",\n  \"Update your comment\": \"Mettre \u00E0 jour votre commentaire\",\n  \"Upload type: \\\"{{ type }}\\\" is not allowed\": \"Le type de fichier : \\\"{{ type }}\\\" n'est pas autoris\u00E9\",\n  \"User uploaded content\": \"Contenu t\u00E9l\u00E9charg\u00E9 par l'utilisateur\",\n  \"View results\": \"Voir les r\u00E9sultats\",\n  \"View {{count}} comments_many\": \"Voir {{count}} commentaires\",\n  \"View {{count}} comments_one\": \"Voir {{count}} commentaire\",\n  \"View {{count}} comments_other\": \"Voir {{count}} commentaires\",\n  \"Voice message\": \"Message vocal\",\n  \"Vote ended\": \"Vote termin\u00E9\",\n  \"Wait until all attachments have uploaded\": \"Attendez que toutes les pi\u00E8ces jointes soient t\u00E9l\u00E9charg\u00E9es\",\n  \"You\": \"Vous\",\n  \"You have no channels currently\": \"Vous n'avez actuellement aucun canal\",\n  \"You've reached the maximum number of files\": \"Vous avez atteint le nombre maximal de fichiers\",\n  \"aria/Attachment\": \"Pi\u00E8ce jointe\",\n  \"aria/Cancel Reply\": \"Annuler la r\u00E9ponse\",\n  \"aria/Cancel upload\": \"Annuler le t\u00E9l\u00E9chargement\",\n  \"aria/Channel list\": \"Liste des canaux\",\n  \"aria/Channel search results\": \"R\u00E9sultats de recherche de canaux\",\n  \"aria/Close thread\": \"Fermer le fil\",\n  \"aria/Download attachment\": \"T\u00E9l\u00E9charger la pi\u00E8ce jointe\",\n  \"aria/Emoji picker\": \"S\u00E9lecteur d'\u00E9mojis\",\n  \"aria/File input\": \"Entr\u00E9e de fichier\",\n  \"aria/File upload\": \"T\u00E9l\u00E9chargement de fichier\",\n  \"aria/Image input\": \"Entr\u00E9e d'image\",\n  \"aria/Load More Channels\": \"Charger plus de canaux\",\n  \"aria/Menu\": \"Menu\",\n  \"aria/Message Options\": \"Options du message\",\n  \"aria/Open Attachment Selector\": \"Ouvrir le s\u00E9lecteur de pi\u00E8ces jointes\",\n  \"aria/Open Message Actions Menu\": \"Ouvrir le menu des actions du message\",\n  \"aria/Open Reaction Selector\": \"Ouvrir le s\u00E9lecteur de r\u00E9actions\",\n  \"aria/Open Thread\": \"Ouvrir le fil\",\n  \"aria/Reaction list\": \"Liste des r\u00E9actions\",\n  \"aria/Remove attachment\": \"Supprimer la pi\u00E8ce jointe\",\n  \"aria/Retry upload\": \"R\u00E9essayer le t\u00E9l\u00E9chargement\",\n  \"aria/Search results\": \"R\u00E9sultats de recherche\",\n  \"aria/Search results header filter button\": \"Bouton de filtre d'en-t\u00EAte des r\u00E9sultats de recherche\",\n  \"aria/Send\": \"Envoyer\",\n  \"aria/Stop AI Generation\": \"Arr\u00EAter la g\u00E9n\u00E9ration d'IA\",\n  \"ban-command-args\": \"[@nomdutilisateur] [texte]\",\n  \"ban-command-description\": \"Bannir un utilisateur\",\n  \"giphy-command-args\": \"[texte]\",\n  \"giphy-command-description\": \"Poster un GIF al\u00E9atoire dans le canal\",\n  \"live\": \"en direct\",\n  \"mute-command-args\": \"[@nomdutilisateur]\",\n  \"mute-command-description\": \"Muter un utilisateur\",\n  \"replyCount_many\": \"{{ count }} r\u00E9ponses\",\n  \"replyCount_one\": \"1 r\u00E9ponse\",\n  \"replyCount_other\": \"{{ count }} r\u00E9ponses\",\n  \"search-results-header-filter-source-button-label--channels\": \"canaux\",\n  \"search-results-header-filter-source-button-label--messages\": \"messages\",\n  \"search-results-header-filter-source-button-label--users\": \"utilisateurs\",\n  \"searchResultsCount_many\": \"{{ count }} r\u00E9sultats\",\n  \"searchResultsCount_one\": \"1 r\u00E9sultat\",\n  \"searchResultsCount_other\": \"{{ count }} r\u00E9sultats\",\n  \"this content could not be displayed\": \"ce contenu n'a pas pu \u00EAtre affich\u00E9\",\n  \"timestamp/DateSeparator\": \"{{ timestamp | timestampFormatter(calendar: true) }}\",\n  \"timestamp/MessageTimestamp\": \"{{ timestamp | timestampFormatter(calendar: true) }}\",\n  \"timestamp/PollVote\": \"{{ timestamp | timestampFormatter(format: MMM D [at] HH:mm) }}\",\n  \"timestamp/PollVoteTooltip\": \"{{ timestamp | timestampFormatter(calendar: true) }}\",\n  \"timestamp/SystemMessage\": \"{{ timestamp | timestampFormatter(format: dddd L) }}\",\n  \"unban-command-args\": \"[@nomdutilisateur]\",\n  \"unban-command-description\": \"D\u00E9bannir un utilisateur\",\n  \"unmute-command-args\": \"[@nomdutilisateur]\",\n  \"unmute-command-description\": \"D\u00E9muter un utilisateur\",\n  \"unreadMessagesSeparatorText_many\": \"{{count}} messages non lus\",\n  \"unreadMessagesSeparatorText_one\": \"1 message non lu\",\n  \"unreadMessagesSeparatorText_other\": \"{{count}} messages non lus\",\n  \"{{ commaSeparatedUsers }} and {{ moreCount }} more\": \"{{ commaSeparatedUsers }} et {{ moreCount }} autres\",\n  \"{{ commaSeparatedUsers }}, and {{ lastUser }}\": \"{{ commaSeparatedUsers }} et {{ lastUser }}\",\n  \"{{ firstUser }} and {{ secondUser }}\": \"{{ firstUser }} et {{ secondUser }}\",\n  \"{{ imageCount }} more\": \"{{ imageCount }} suppl\u00E9mentaires\",\n  \"{{ memberCount }} members\": \"{{ memberCount }} membres\",\n  \"{{ user }} has been muted\": \"{{ user }} a \u00E9t\u00E9 mis en sourdine\",\n  \"{{ user }} has been unmuted\": \"{{ user }} n'est plus en sourdine\",\n  \"{{ user }} is typing...\": \"{{ user }} est en train d'\u00E9crire...\",\n  \"{{ users }} and more are typing...\": \"{{ users }} et plus sont en train d'\u00E9crire...\",\n  \"{{ users }} and {{ user }} are typing...\": \"{{ users }} et {{ user }} sont en train d'\u00E9crire...\",\n  \"{{ watcherCount }} online\": \"{{ watcherCount }} en ligne\",\n  \"{{count}} unread_many\": \"{{count}} non lus\",\n  \"{{count}} unread_one\": \"{{count}} non lu\",\n  \"{{count}} unread_other\": \"{{count}} non lus\",\n  \"{{count}} votes_many\": \"{{count}} votes\",\n  \"{{count}} votes_one\": \"{{count}} vote\",\n  \"{{count}} votes_other\": \"{{count}} votes\",\n  \"\uD83C\uDFD9 Attachment...\": \"\uD83C\uDFD9 Pi\u00E8ce jointe...\",\n  \"\uD83D\uDCCA {{createdBy}} created: {{ pollName}}\": \"\uD83D\uDCCA {{createdBy}} a cr\u00E9\u00E9 : {{ pollName}}\",\n  \"\uD83D\uDCCA {{votedBy}} voted: {{pollOptionText}}\": \"\uD83D\uDCCA {{votedBy}} a vot\u00E9 : {{pollOptionText}}\"\n}\n", "{\n  \"Add a comment\": \"\u090F\u0915 \u091F\u093F\u092A\u094D\u092A\u0923\u0940 \u091C\u094B\u0921\u093C\u0947\u0902\",\n  \"Add an option\": \"\u090F\u0915 \u0935\u093F\u0915\u0932\u094D\u092A \u091C\u094B\u0921\u093C\u0947\u0902\",\n  \"All results loaded\": \"\u0938\u092D\u0940 \u092A\u0930\u093F\u0923\u093E\u092E \u0932\u094B\u0921 \u0939\u094B \u0917\u090F\",\n  \"Allow access to camera\": \"\u0915\u0948\u092E\u0930\u093E \u0924\u0915 \u092A\u0939\u0941\u0901\u091A \u0926\u0947\u0902\",\n  \"Allow access to microphone\": \"\u092E\u093E\u0907\u0915\u094D\u0930\u094B\u092B\u093C\u094B\u0928 \u0924\u0915 \u092A\u0939\u0941\u0901\u091A \u0926\u0947\u0902\",\n  \"Allow comments\": \"\u091F\u093F\u092A\u094D\u092A\u0923\u093F\u092F\u093E\u0901 \u0915\u0940 \u0905\u0928\u0941\u092E\u0924\u093F \u0926\u0947\u0902\",\n  \"Allow option suggestion\": \"\u0935\u093F\u0915\u0932\u094D\u092A \u0938\u0941\u091D\u093E\u0935 \u0915\u0940 \u0905\u0928\u0941\u092E\u0924\u093F \u0926\u0947\u0902\",\n  \"An error has occurred during recording\": \"\u0930\u0947\u0915\u0949\u0930\u094D\u0921\u093F\u0902\u0917 \u0915\u0947 \u0926\u094C\u0930\u093E\u0928 \u090F\u0915 \u0924\u094D\u0930\u0941\u091F\u093F \u0906 \u0917\u0908 \u0939\u0948\",\n  \"An error has occurred during the recording processing\": \"\u0930\u0947\u0915\u0949\u0930\u094D\u0921\u093F\u0902\u0917 \u092A\u094D\u0930\u094B\u0938\u0947\u0938\u093F\u0902\u0917 \u0915\u0947 \u0926\u094C\u0930\u093E\u0928 \u090F\u0915 \u0924\u094D\u0930\u0941\u091F\u093F \u0906 \u0917\u0908 \u0939\u0948\",\n  \"Anonymous\": \"\u0917\u0941\u092E\u0928\u093E\u092E\",\n  \"Anonymous poll\": \"\u0917\u0941\u092E\u0928\u093E\u092E \u092E\u0924\u0926\u093E\u0928\",\n  \"Archive\": \"\u0906\u0930\u094D\u0915\u093E\u0907\u0935\",\n  \"Ask a question\": \"\u090F\u0915 \u092A\u094D\u0930\u0936\u094D\u0928 \u092A\u0942\u091B\u0947\u0902\",\n  \"Attach files\": \"\u092B\u093E\u0907\u0932\u094D\u0938 \u0905\u091F\u0948\u091A \u0915\u0930\u0947\",\n  \"Cancel\": \"\u0930\u0926\u094D\u0926 \u0915\u0930\u0947\u0902\",\n  \"Cannot seek in the recording\": \"\u0930\u0947\u0915\u0949\u0930\u094D\u0921\u093F\u0902\u0917 \u092E\u0947\u0902 \u0916\u094B\u091C \u0928\u0939\u0940\u0902 \u0915\u0940 \u091C\u093E \u0938\u0915\u0924\u0940\",\n  \"Channel Missing\": \"\u091A\u0948\u0928\u0932 \u0909\u092A\u0932\u092C\u094D\u0927 \u0928\u0939\u0940\u0902 \u0939\u0948\",\n  \"Close\": \"\u092C\u0902\u0926 \u0915\u0930\u0947\",\n  \"Close emoji picker\": \"\u0907\u092E\u094B\u091C\u0940 \u092A\u093F\u0915\u0930 \u092C\u0902\u0926 \u0915\u0930\u0947\u0902\",\n  \"Commands matching\": \"\u092E\u0947\u0932 \u0916\u093E\u0924\u0940 \u0939\u0948\",\n  \"Connection failure, reconnecting now...\": \"\u0915\u0928\u0947\u0915\u094D\u0936\u0928 \u0935\u093F\u092B\u0932 \u0930\u0939\u093E, \u0905\u092C \u092A\u0941\u0928\u0903 \u0915\u0928\u0947\u0915\u094D\u091F \u0939\u094B \u0930\u0939\u093E \u0939\u0948 ...\",\n  \"Create\": \"\u092C\u0928\u093E\u090F\u0901\",\n  \"Create poll\": \"\u092E\u0924\u0926\u093E\u0928 \u092C\u0928\u093E\u090F\u0901\",\n  \"Delete\": \"\u0921\u093F\u0932\u0940\u091F\",\n  \"Delivered\": \"\u092A\u0939\u0941\u0902\u091A \u0917\u092F\u093E\",\n  \"Download attachment {{ name }}\": \"\u0905\u0928\u0941\u0932\u0917\u094D\u0928\u0915 {{ name }} \u0921\u093E\u0909\u0928\u0932\u094B\u0921 \u0915\u0930\u0947\u0902\",\n  \"Drag your files here\": \"\u0905\u092A\u0928\u0940 \u092B\u093C\u093E\u0907\u0932\u0947\u0902 \u092F\u0939\u093E\u0901 \u0916\u0940\u0902\u091A\u0947\u0902\",\n  \"Drag your files here to add to your post\": \"\u0905\u092A\u0928\u0940 \u092B\u093C\u093E\u0907\u0932\u0947\u0902 \u092F\u0939\u093E\u0901 \u0916\u0940\u0902\u091A\u0947\u0902 \u0914\u0930 \u0905\u092A\u0928\u0947 \u092A\u094B\u0938\u094D\u091F \u092E\u0947\u0902 \u091C\u094B\u0921\u093C\u0928\u0947 \u0915\u0947 \u0932\u093F\u090F\",\n  \"Edit Message\": \"\u092E\u0948\u0938\u0947\u091C \u092E\u0947\u0902 \u092C\u0926\u0932\u093E\u0935 \u0915\u0930\u0947\",\n  \"Edit message request failed\": \"\u0938\u0902\u0926\u0947\u0936 \u0938\u0902\u092A\u093E\u0926\u093F\u0924 \u0915\u0930\u0928\u0947 \u0915\u093E \u0905\u0928\u0941\u0930\u094B\u0927 \u0935\u093F\u092B\u0932 \u0930\u0939\u093E\",\n  \"Edited\": \"\u0938\u0902\u092A\u093E\u0926\u093F\u0924\",\n  \"Emoji matching\": \"\u0907\u092E\u094B\u091C\u0940 \u092E\u093F\u0932\u093E\u0928\",\n  \"Empty message...\": \"\u0916\u093E\u0932\u0940 \u0938\u0902\u0926\u0947\u0936 ...\",\n  \"End\": \"\u0938\u092E\u093E\u092A\u094D\u0924\",\n  \"End vote\": \"\u092E\u0924 \u0938\u092E\u093E\u092A\u094D\u0924 \u0915\u0930\u0947\u0902\",\n  \"Error adding flag\": \"\u0927\u094D\u0935\u091C \u091C\u094B\u0921\u093C\u0928\u0947 \u092E\u0947\u0902 \u0924\u094D\u0930\u0941\u091F\u093F\",\n  \"Error connecting to chat, refresh the page to try again.\": \"\u091A\u0948\u091F \u0938\u0947 \u0915\u0928\u0947\u0915\u094D\u091F \u0915\u0930\u0928\u0947 \u092E\u0947\u0902 \u0924\u094D\u0930\u0941\u091F\u093F, \u092A\u0947\u091C \u0915\u094B \u0930\u093F\u092B\u094D\u0930\u0947\u0936 \u0915\u0930\u0947\u0902\",\n  \"Error deleting message\": \"\u0938\u0902\u0926\u0947\u0936 \u0939\u091F\u093E\u0928\u0947 \u092E\u0947\u0902 \u0924\u094D\u0930\u0941\u091F\u093F\",\n  \"Error fetching reactions\": \"\u092A\u094D\u0930\u0924\u093F\u0915\u094D\u0930\u093F\u092F\u093E\u090F\u0901 \u0932\u094B\u0921 \u0915\u0930\u0928\u0947 \u092E\u0947\u0902 \u0924\u094D\u0930\u0941\u091F\u093F\",\n  \"Error marking message unread\": \"\u0938\u0902\u0926\u0947\u0936 \u0915\u094B \u0905\u092A\u0920\u093F\u0924 \u091A\u093F\u0939\u094D\u0928\u093F\u0924 \u0915\u0930\u0928\u0947 \u092E\u0947\u0902 \u0924\u094D\u0930\u0941\u091F\u093F\",\n  \"Error marking message unread. Cannot mark unread messages older than the newest 100 channel messages.\": \"\u0938\u0902\u0926\u0947\u0936 \u0915\u094B \u0905\u092A\u0920\u093F\u0924 \u092E\u093E\u0930\u094D\u0915 \u0915\u0930\u0928\u0947 \u092E\u0947\u0902 \u0924\u094D\u0930\u0941\u091F\u093F\u0964 \u0938\u092C\u0938\u0947 \u0928\u090F 100 \u091A\u0948\u0928\u0932 \u0938\u0902\u0926\u0947\u0936 \u0938\u0947 \u092A\u0939\u0932\u0947 \u0915\u0947 \u0938\u092D\u0940 \u0905\u092A\u0920\u093F\u0924 \u0938\u0902\u0926\u0947\u0936\u094B\u0902 \u0915\u094B \u0905\u092A\u0920\u093F\u0924 \u092E\u093E\u0930\u094D\u0915 \u0928\u0939\u0940\u0902 \u0915\u093F\u092F\u093E \u091C\u093E \u0938\u0915\u0924\u093E \u0939\u0948\u0964\",\n  \"Error muting a user ...\": \"\u092F\u0942\u091C\u0930 \u0915\u094B \u092E\u094D\u092F\u0942\u091F \u0915\u0930\u0928\u0947 \u0915\u093E \u092A\u094D\u0930\u092F\u093E\u0938 \u092B\u0947\u0932 \u0939\u0941\u0906\",\n  \"Error pinning message\": \"\u0938\u0902\u0926\u0947\u0936 \u0915\u094B \u092A\u093F\u0928 \u0915\u0930\u0928\u0947 \u092E\u0947\u0902 \u0924\u094D\u0930\u0941\u091F\u093F\",\n  \"Error removing message pin\": \"\u0938\u0902\u0926\u0947\u0936 \u092A\u093F\u0928 \u0928\u093F\u0915\u093E\u0932\u0928\u0947 \u092E\u0947\u0902 \u0924\u094D\u0930\u0941\u091F\u093F\",\n  \"Error reproducing the recording\": \"\u0930\u093F\u0915\u0949\u0930\u094D\u0921\u093F\u0902\u0917 \u092A\u0941\u0928: \u0909\u0924\u094D\u092A\u0928\u094D\u0928 \u0915\u0930\u0928\u0947 \u092E\u0947\u0902 \u0924\u094D\u0930\u0941\u091F\u093F\",\n  \"Error starting recording\": \"\u0930\u0947\u0915\u0949\u0930\u094D\u0921\u093F\u0902\u0917 \u0936\u0941\u0930\u0942 \u0915\u0930\u0928\u0947 \u092E\u0947\u0902 \u0924\u094D\u0930\u0941\u091F\u093F\",\n  \"Error unmuting a user ...\": \"\u092F\u0942\u091C\u0930 \u0915\u094B \u0905\u0928\u092E\u094D\u092F\u0942\u091F \u0915\u0930\u0928\u0947 \u0915\u093E \u092A\u094D\u0930\u092F\u093E\u0938 \u092B\u0947\u0932 \u0939\u0941\u0906\",\n  \"Error uploading attachment\": \"\u0905\u091F\u0948\u091A\u092E\u0947\u0902\u091F \u0905\u092A\u0932\u094B\u0921 \u0915\u0930\u0924\u0947 \u0938\u092E\u092F \u0924\u094D\u0930\u0941\u091F\u093F\",\n  \"Error uploading file\": \"\u092B\u093C\u093E\u0907\u0932 \u0905\u092A\u0932\u094B\u0921 \u0915\u0930\u0928\u0947 \u092E\u0947\u0902 \u0924\u094D\u0930\u0941\u091F\u093F\",\n  \"Error uploading image\": \"\u091B\u0935\u093F \u0905\u092A\u0932\u094B\u0921 \u0915\u0930\u0928\u0947 \u092E\u0947\u0902 \u0924\u094D\u0930\u0941\u091F\u093F\",\n  \"Error \u00B7 Unsent\": \"\u092B\u0947\u0932\",\n  \"Error: {{ errorMessage }}\": \"\u092B\u0947\u0932: {{ errorMessage }}\",\n  \"Failed to jump to the first unread message\": \"\u092A\u0939\u0932\u0947 \u0905\u092A\u0920\u093F\u0924 \u0938\u0902\u0926\u0947\u0936 \u092A\u0930 \u091C\u093E\u0928\u0947 \u092E\u0947\u0902 \u0935\u093F\u092B\u0932\",\n  \"Failed to mark channel as read\": \"\u091A\u0948\u0928\u0932 \u0915\u094B \u092A\u0922\u093C\u093E \u0939\u0941\u0906 \u091A\u093F\u0939\u094D\u0928\u093F\u0924 \u0915\u0930\u0928\u0947 \u092E\u0947\u0902 \u0935\u093F\u092B\u0932\u0964\",\n  \"Failed to play the recording\": \"\u0930\u0947\u0915\u0949\u0930\u094D\u0921\u093F\u0902\u0917 \u092A\u094D\u0932\u0947 \u0915\u0930\u0928\u0947 \u092E\u0947\u0902 \u0935\u093F\u092B\u0932\",\n  \"File\": \"\u092B\u093C\u093E\u0907\u0932\",\n  \"File is too large: {{ size }}, maximum upload size is {{ limit }}\": \"\u092B\u093C\u093E\u0907\u0932 \u092C\u0939\u0941\u0924 \u092C\u0921\u093C\u0940 \u0939\u0948: {{ size }}, \u0905\u0927\u093F\u0915\u0924\u092E \u0905\u092A\u0932\u094B\u0921 \u0938\u093E\u0907\u091C\u093C {{ limit }} \u0939\u0948\",\n  \"Flag\": \"\u092B\u094D\u0932\u0948\u0917 \u0915\u0930\u0947\",\n  \"Generating...\": \"\u092C\u0928\u093E \u0930\u0939\u093E \u0939\u0948...\",\n  \"Latest Messages\": \"\u0928\u0935\u0940\u0928\u0924\u092E \u0938\u0902\u0926\u0947\u0936\",\n  \"Load more\": \"\u0914\u0930 \u0932\u094B\u0921 \u0915\u0930\u0947\u0902\",\n  \"Mark as unread\": \"\u0905\u092A\u0920\u093F\u0924 \u091A\u093F\u0939\u094D\u0928\u093F\u0924 \u0915\u0930\u0947\u0902\",\n  \"Maximum number of votes (from 2 to 10)\": \"\u0905\u0927\u093F\u0915\u0924\u092E \u0935\u094B\u091F\u094B\u0902 \u0915\u0940 \u0938\u0902\u0916\u094D\u092F\u093E (2 \u0938\u0947 10)\",\n  \"Menu\": \"\u092E\u0947\u0928\u094D\u092F\u0942\",\n  \"Message Failed \u00B7 Click to try again\": \"\u092E\u0948\u0938\u0947\u091C \u092B\u093C\u0948\u0932 - \u092A\u0941\u0928\u0903 \u0915\u094B\u0936\u093F\u0936 \u0915\u0930\u0947\u0902\",\n  \"Message Failed \u00B7 Unauthorized\": \"\u092E\u0948\u0938\u0947\u091C \u092B\u093C\u0948\u0932 - \u0905\u0928\u0927\u093F\u0915\u0943\u0924\",\n  \"Message deleted\": \"\u092E\u0948\u0938\u0947\u091C \u0939\u091F\u093E \u0926\u093F\u092F\u093E \u0917\u092F\u093E\",\n  \"Message has been successfully flagged\": \"\u092E\u0948\u0938\u0947\u091C \u0915\u094B \u092B\u094D\u0932\u0948\u0917 \u0915\u0930 \u0926\u093F\u092F\u093E \u0917\u092F\u093E \u0939\u0948\",\n  \"Message pinned\": \"\u0938\u0902\u0926\u0947\u0936 \u092A\u093F\u0928 \u0915\u093F\u092F\u093E \u0917\u092F\u093E\",\n  \"Message was blocked by moderation policies\": \"\u0938\u0902\u0926\u0947\u0936 \u0915\u094B \u092E\u0949\u0921\u0930\u0947\u0936\u0928 \u0928\u0940\u0924\u093F\u092F\u094B\u0902 \u0926\u094D\u0935\u093E\u0930\u093E \u092C\u094D\u0932\u0949\u0915 \u0915\u0930 \u0926\u093F\u092F\u093E \u0917\u092F\u093E \u0939\u0948\",\n  \"Messages have been marked unread.\": \"\u0938\u0902\u0926\u0947\u0936\u094B\u0902 \u0915\u094B \u0905\u092A\u0920\u093F\u0924 \u091A\u093F\u0939\u094D\u0928\u093F\u0924 \u0915\u093F\u092F\u093E \u0917\u092F\u093E \u0939\u0948\u0964\",\n  \"Missing permissions to upload the attachment\": \"\u0905\u091F\u0948\u091A\u092E\u0947\u0902\u091F \u0905\u092A\u0932\u094B\u0921 \u0915\u0930\u0928\u0947 \u0915\u0947 \u0932\u093F\u090F \u0905\u0928\u0941\u092E\u0924\u093F\u092F\u093E\u0902 \u0917\u093E\u092F\u092C\",\n  \"Multiple answers\": \"\u0915\u0908 \u0909\u0924\u094D\u0924\u0930\",\n  \"Mute\": \"\u092E\u094D\u092F\u0942\u091F \u0915\u0930\u0947\",\n  \"New\": \"\u0928\u090F\",\n  \"New Messages!\": \"\u0928\u090F \u092E\u0948\u0938\u0947\u091C!\",\n  \"No chats here yet\u2026\": \"\u092F\u0939\u093E\u0902 \u0905\u092D\u0940 \u0924\u0915 \u0915\u094B\u0908 \u091A\u0948\u091F \u0928\u0939\u0940\u0902...\",\n  \"No results found\": \"\u0915\u094B\u0908 \u092A\u0930\u093F\u0923\u093E\u092E \u0928\u0939\u0940\u0902 \u092E\u093F\u0932\u093E\",\n  \"Nobody will be able to vote in this poll anymore.\": \"\u0905\u092C \u0915\u094B\u0908 \u092D\u0940 \u0907\u0938 \u092E\u0924\u0926\u093E\u0928 \u092E\u0947\u0902 \u092E\u0924\u0926\u093E\u0928 \u0928\u0939\u0940\u0902 \u0915\u0930 \u0938\u0915\u0947\u0917\u093E\u0964\",\n  \"Nothing yet...\": \"\u0915\u094B\u0908 \u092E\u0948\u0938\u0947\u091C \u0928\u0939\u0940\u0902 \u0939\u0948\",\n  \"Ok\": \"\u0920\u0940\u0915 \u0939\u0948\",\n  \"Open emoji picker\": \"\u0907\u092E\u094B\u091C\u0940 \u092A\u093F\u0915\u0930 \u0916\u094B\u0932\u093F\u092F\u0947\",\n  \"Option already exists\": \"\u0935\u093F\u0915\u0932\u094D\u092A \u092A\u0939\u0932\u0947 \u0938\u0947 \u092E\u094C\u091C\u0942\u0926 \u0939\u0948\",\n  \"Options\": \"\u0935\u093F\u0915\u0932\u094D\u092A\",\n  \"People matching\": \"\u092E\u0947\u0932 \u0916\u093E\u0924\u0947 \u0932\u094B\u0917\",\n  \"Pin\": \"\u092A\u093F\u0928\",\n  \"Pinned by\": \"\u0926\u094D\u0935\u093E\u0930\u093E \u092A\u093F\u0928 \u0915\u093F\u092F\u093E \u0917\u092F\u093E\",\n  \"Poll\": \"\u092E\u0924\u0926\u093E\u0928\",\n  \"Poll comments\": \"\u092E\u0924\u0926\u093E\u0928 \u091F\u093F\u092A\u094D\u092A\u0923\u093F\u092F\u093E\u0901\",\n  \"Poll options\": \"\u092E\u0924\u0926\u093E\u0928 \u0935\u093F\u0915\u0932\u094D\u092A\",\n  \"Poll results\": \"\u092E\u0924\u0926\u093E\u0928 \u092A\u0930\u093F\u0923\u093E\u092E\",\n  \"Question\": \"\u092A\u094D\u0930\u0936\u094D\u0928\",\n  \"Quote\": \"\u0909\u0926\u094D\u0927\u0930\u0923\",\n  \"Recording format is not supported and cannot be reproduced\": \"\u0930\u0947\u0915\u0949\u0930\u094D\u0921\u093F\u0902\u0917 \u092B\u093C\u0949\u0930\u094D\u092E\u0947\u091F \u0938\u092E\u0930\u094D\u0925\u093F\u0924 \u0928\u0939\u0940\u0902 \u0939\u0948 \u0914\u0930 \u092A\u0941\u0928\u0903 \u0909\u0924\u094D\u092A\u0928\u094D\u0928 \u0928\u0939\u0940\u0902 \u0915\u093F\u092F\u093E \u091C\u093E \u0938\u0915\u0924\u093E\",\n  \"Reply\": \"\u091C\u0935\u093E\u092C \u0926\u0947 \u0926\u094B\",\n  \"Reply to Message\": \"\u0938\u0902\u0926\u0947\u0936 \u0915\u093E \u091C\u0935\u093E\u092C \u0926\u0947\u0902\",\n  \"Search\": \"\u0916\u094B\u091C\",\n  \"Searching...\": \"\u0916\u094B\u091C \u0915\u0930...\",\n  \"See all options ({{count}})_one\": \"\u0938\u092D\u0940 \u0935\u093F\u0915\u0932\u094D\u092A \u0926\u0947\u0916\u0947\u0902 ({{count}})\",\n  \"See all options ({{count}})_other\": \"\u0938\u092D\u0940 \u0935\u093F\u0915\u0932\u094D\u092A \u0926\u0947\u0916\u0947\u0902 ({{count}})\",\n  \"Select one\": \"\u090F\u0915 \u091A\u0941\u0928\u0947\u0902\",\n  \"Select one or more\": \"\u090F\u0915 \u092F\u093E \u0905\u0927\u093F\u0915 \u091A\u0941\u0928\u0947\u0902\",\n  \"Select up to {{count}}_one\": \"\u0905\u0927\u093F\u0915\u0924\u092E {{count}} \u0924\u0915 \u091A\u0941\u0928\u0947\u0902\",\n  \"Select up to {{count}}_other\": \"\u0905\u0927\u093F\u0915\u0924\u092E {{count}} \u0924\u0915 \u091A\u0941\u0928\u0947\u0902\",\n  \"Send\": \"\u092D\u0947\u091C\u0947\",\n  \"Send Anyway\": \"\u0935\u0948\u0938\u0947 \u092D\u0940 \u092D\u0947\u091C\u0947\u0902\",\n  \"Send message request failed\": \"\u0938\u0902\u0926\u0947\u0936 \u092D\u0947\u091C\u0928\u0947 \u0915\u093E \u0905\u0928\u0941\u0930\u094B\u0927 \u0935\u093F\u092B\u0932 \u0930\u0939\u093E\",\n  \"Sending...\": \"\u092D\u0947\u091C\u093E \u091C\u093E \u0930\u0939\u093E \u0939\u0948\",\n  \"Show all\": \"\u0938\u092D\u0940 \u0926\u093F\u0916\u093E\u090F\u0901\",\n  \"Shuffle\": \"\u092E\u093F\u0936\u094D\u0930\u093F\u0924 \u0915\u0930\u0947\u0902\",\n  \"Slow Mode ON\": \"\u0938\u094D\u0932\u094B \u092E\u094B\u0921 \u0911\u0928\",\n  \"Some of the files will not be accepted\": \"\u0915\u0941\u091B \u092B\u093C\u093E\u0907\u0932\u0947\u0902 \u0938\u094D\u0935\u0940\u0915\u093E\u0930 \u0928\u0939\u0940\u0902 \u0915\u0940 \u091C\u093E\u090F\u0902\u0917\u0940\",\n  \"Start typing to search\": \"\u0916\u094B\u091C\u0928\u0947 \u0915\u0947 \u0932\u093F\u090F \u091F\u093E\u0907\u092A \u0915\u0930\u0928\u093E \u0936\u0941\u0930\u0942 \u0915\u0930\u0947\u0902\",\n  \"Submit\": \"\u091C\u092E\u093E \u0915\u0930\u0947\u0902\",\n  \"Suggest an option\": \"\u090F\u0915 \u0935\u093F\u0915\u0932\u094D\u092A \u0938\u0941\u091D\u093E\u0935 \u0926\u0947\u0902\",\n  \"Thinking...\": \"\u0938\u094B\u091A \u0930\u0939\u093E \u0939\u0948...\",\n  \"This message did not meet our content guidelines\": \"\u092F\u0939 \u0938\u0902\u0926\u0947\u0936 \u0939\u092E\u093E\u0930\u0947 \u0938\u093E\u092E\u0917\u094D\u0930\u0940 \u0926\u093F\u0936\u093E\u0928\u093F\u0930\u094D\u0926\u0947\u0936\u094B\u0902 \u0915\u0947 \u0905\u0928\u0941\u0930\u0942\u092A \u0928\u0939\u0940\u0902 \u0925\u093E\",\n  \"This message was deleted...\": \"\u092E\u0948\u0938\u0947\u091C \u0939\u091F\u093E \u0926\u093F\u092F\u093E \u0917\u092F\u093E\",\n  \"Thread\": \"\u0930\u093F\u092A\u094D\u0932\u093E\u0908 \u0925\u094D\u0930\u0947\u0921\",\n  \"To start recording, allow the camera access in your browser\": \"\u0930\u093F\u0915\u0949\u0930\u094D\u0921\u093F\u0902\u0917 \u0936\u0941\u0930\u0942 \u0915\u0930\u0928\u0947 \u0915\u0947 \u0932\u093F\u090F, \u0905\u092A\u0928\u0947 \u092C\u094D\u0930\u093E\u0909\u091C\u093C\u0930 \u092E\u0947\u0902 \u0915\u0948\u092E\u0930\u093E \u0924\u0915 \u092A\u0939\u0941\u0901\u091A \u0926\u0947\u0902\",\n  \"To start recording, allow the microphone access in your browser\": \"\u0930\u093F\u0915\u0949\u0930\u094D\u0921\u093F\u0902\u0917 \u0936\u0941\u0930\u0942 \u0915\u0930\u0928\u0947 \u0915\u0947 \u0932\u093F\u090F, \u0905\u092A\u0928\u0947 \u092C\u094D\u0930\u093E\u0909\u091C\u093C\u0930 \u092E\u0947\u0902 \u092E\u093E\u0907\u0915\u094D\u0930\u094B\u092B\u093C\u094B\u0928 \u0924\u0915 \u092A\u0939\u0941\u0901\u091A \u0926\u0947\u0902\",\n  \"Type a number from 2 to 10\": \"2 \u0938\u0947 10 \u0924\u0915 \u0915\u093E \u090F\u0915 \u0928\u0902\u092C\u0930 \u091F\u093E\u0907\u092A \u0915\u0930\u0947\u0902\",\n  \"Type your message\": \"\u0905\u092A\u0928\u093E \u092E\u0948\u0938\u0947\u091C \u0932\u093F\u0916\u0947\",\n  \"Unarchive\": \"\u0905\u0928\u0906\u0930\u094D\u0915\u093E\u0907\u0935\",\n  \"Unmute\": \"\u0905\u0928\u092E\u094D\u092F\u0942\u091F\",\n  \"Unpin\": \"\u0905\u0928\u092A\u093F\u0928\",\n  \"Unread messages\": \"\u0905\u092A\u0920\u093F\u0924 \u0938\u0902\u0926\u0947\u0936\",\n  \"Unsupported attachment\": \"\u0905\u0938\u092E\u0930\u094D\u0925\u093F\u0924 \u0905\u091F\u0948\u091A\u092E\u0947\u0902\u091F\",\n  \"Update your comment\": \"\u0905\u092A\u0928\u0947 \u091F\u093F\u092A\u094D\u092A\u0923\u0940 \u0915\u094B \u0905\u092A\u0921\u0947\u091F \u0915\u0930\u0947\u0902\",\n  \"Upload type: \\\"{{ type }}\\\" is not allowed\": \"\u0905\u092A\u0932\u094B\u0921 \u092A\u094D\u0930\u0915\u093E\u0930: \\\"{{ type }}\\\" \u0915\u0940 \u0905\u0928\u0941\u092E\u0924\u093F \u0928\u0939\u0940\u0902 \u0939\u0948\",\n  \"User uploaded content\": \"\u0909\u092A\u092F\u094B\u0917\u0915\u0930\u094D\u0924\u093E \u0905\u092A\u0932\u094B\u0921 \u0915\u0940 \u0917\u0908 \u0938\u093E\u092E\u0917\u094D\u0930\u0940\",\n  \"View results\": \"\u092A\u0930\u093F\u0923\u093E\u092E \u0926\u0947\u0916\u0947\u0902\",\n  \"View {{count}} comments_one\": \"\u0926\u0947\u0916\u0947\u0902 {{count}} \u091F\u093F\u092A\u094D\u092A\u0923\u0940\",\n  \"View {{count}} comments_other\": \"\u0926\u0947\u0916\u0947\u0902 {{count}} \u091F\u093F\u092A\u094D\u092A\u0923\u093F\u092F\u093E\u0901\",\n  \"Voice message\": \"\u0906\u0935\u093E\u091C \u0938\u0902\u0926\u0947\u0936\",\n  \"Vote ended\": \"\u092E\u0924\u0926\u093E\u0928 \u0938\u092E\u093E\u092A\u094D\u0924\",\n  \"Wait until all attachments have uploaded\": \"\u0938\u092D\u0940 \u0905\u091F\u0948\u091A\u092E\u0947\u0902\u091F \u0905\u092A\u0932\u094B\u0921 \u0939\u094B\u0928\u0947 \u0924\u0915 \u092A\u094D\u0930\u0924\u0940\u0915\u094D\u0937\u093E \u0915\u0930\u0947\u0902\",\n  \"You\": \"\u0906\u092A\",\n  \"You have no channels currently\": \"\u0906\u092A\u0915\u0947 \u092A\u093E\u0938 \u0915\u094B\u0908 \u091A\u0948\u0928\u0932 \u0928\u0939\u0940\u0902 \u0939\u0948\",\n  \"You've reached the maximum number of files\": \"\u0906\u092A \u0905\u0927\u093F\u0915\u0924\u092E \u092B\u093C\u093E\u0907\u0932\u094B\u0902 \u0924\u0915 \u092A\u0939\u0941\u0901\u091A \u0917\u090F \u0939\u0948\u0902\",\n  \"aria/Attachment\": \"\u0905\u0928\u0941\u0932\u0917\u094D\u0928\u0915\",\n  \"aria/Cancel Reply\": \"\u0909\u0924\u094D\u0924\u0930 \u0930\u0926\u094D\u0926 \u0915\u0930\u0947\u0902\",\n  \"aria/Cancel upload\": \"\u0905\u092A\u0932\u094B\u0921 \u0930\u0926\u094D\u0926 \u0915\u0930\u0947\u0902\",\n  \"aria/Channel list\": \"\u091A\u0948\u0928\u0932 \u0938\u0942\u091A\u0940\",\n  \"aria/Channel search results\": \"\u091A\u0948\u0928\u0932 \u0916\u094B\u091C \u092A\u0930\u093F\u0923\u093E\u092E\",\n  \"aria/Close thread\": \"\u0925\u094D\u0930\u0947\u0921 \u092C\u0902\u0926 \u0915\u0930\u0947\u0902\",\n  \"aria/Download attachment\": \"\u0905\u0928\u0941\u0932\u0917\u094D\u0928\u0915 \u0921\u093E\u0909\u0928\u0932\u094B\u0921 \u0915\u0930\u0947\u0902\",\n  \"aria/Emoji picker\": \"\u0907\u092E\u094B\u091C\u0940 \u091A\u0941\u0928\u0928\u0947 \u0935\u093E\u0932\u093E\",\n  \"aria/File input\": \"\u092B\u093C\u093E\u0907\u0932 \u0907\u0928\u092A\u0941\u091F\",\n  \"aria/File upload\": \"\u092B\u093C\u093E\u0907\u0932 \u0905\u092A\u0932\u094B\u0921\",\n  \"aria/Image input\": \"\u091B\u0935\u093F \u0907\u0928\u092A\u0941\u091F\",\n  \"aria/Load More Channels\": \"\u0914\u0930 \u091A\u0948\u0928\u0932 \u0932\u094B\u0921 \u0915\u0930\u0947\u0902\",\n  \"aria/Menu\": \"\u092E\u0947\u0928\u094D\u092F\u0942\",\n  \"aria/Message Options\": \"\u0938\u0902\u0926\u0947\u0936 \u0935\u093F\u0915\u0932\u094D\u092A\",\n  \"aria/Open Attachment Selector\": \"\u0905\u091F\u0948\u091A\u092E\u0947\u0902\u091F \u091A\u092F\u0928\u0915\u0930\u094D\u0924\u093E \u0916\u094B\u0932\u0947\u0902\",\n  \"aria/Open Message Actions Menu\": \"\u0938\u0902\u0926\u0947\u0936 \u0915\u094D\u0930\u093F\u092F\u093E \u092E\u0947\u0928\u094D\u092F\u0942 \u0916\u094B\u0932\u0947\u0902\",\n  \"aria/Open Reaction Selector\": \"\u092A\u094D\u0930\u0924\u093F\u0915\u094D\u0930\u093F\u092F\u093E \u091A\u092F\u0928\u0915\u0930\u094D\u0924\u093E \u0916\u094B\u0932\u0947\u0902\",\n  \"aria/Open Thread\": \"\u0925\u094D\u0930\u0947\u0921 \u0916\u094B\u0932\u0947\u0902\",\n  \"aria/Reaction list\": \"\u092A\u094D\u0930\u0924\u093F\u0915\u094D\u0930\u093F\u092F\u093E \u0938\u0942\u091A\u0940\",\n  \"aria/Remove attachment\": \"\u0938\u0902\u0932\u0917\u094D\u0928\u0915 \u0939\u091F\u093E\u090F\u0902\",\n  \"aria/Retry upload\": \"\u0905\u092A\u0932\u094B\u0921 \u092A\u0941\u0928\u0903 \u092A\u094D\u0930\u092F\u093E\u0938 \u0915\u0930\u0947\u0902\",\n  \"aria/Search results\": \"\u0916\u094B\u091C \u092A\u0930\u093F\u0923\u093E\u092E\",\n  \"aria/Search results header filter button\": \"\u0916\u094B\u091C \u092A\u0930\u093F\u0923\u093E\u092E \u0939\u0947\u0921\u0930 \u092B\u093C\u093F\u0932\u094D\u091F\u0930 \u092C\u091F\u0928\",\n  \"aria/Send\": \"\u092D\u0947\u091C\u0947\u0902\",\n  \"aria/Stop AI Generation\": \"\u090F\u0906\u0908 \u091C\u0928\u0930\u0947\u0936\u0928 \u0930\u094B\u0915\u0947\u0902\",\n  \"ban-command-args\": \"[@\u0909\u092A\u092F\u094B\u0917\u0915\u0930\u094D\u0924\u0928\u093E\u092E] [\u092A\u093E\u0920]\",\n  \"ban-command-description\": \"\u090F\u0915 \u0909\u092A\u092F\u094B\u0917\u0915\u0930\u094D\u0924\u093E \u0915\u094B \u092A\u094D\u0930\u0924\u093F\u0937\u0947\u0927\u093F\u0924 \u0915\u0930\u0947\u0902\",\n  \"giphy-command-args\": \"[\u092A\u093E\u0920]\",\n  \"giphy-command-description\": \"\u091A\u0948\u0928\u0932 \u092A\u0930 \u090F\u0915 \u0915\u094D\u0930\u0949\u092B\u093F\u0932 \u091C\u0940\u0906\u0907\u090F\u092B \u092A\u094B\u0938\u094D\u091F \u0915\u0930\u0947\u0902\",\n  \"live\": \"\u0932\u093E\u0907\u0935\",\n  \"mute-command-args\": \"[@\u0909\u092A\u092F\u094B\u0917\u0915\u0930\u094D\u0924\u0928\u093E\u092E]\",\n  \"mute-command-description\": \"\u090F\u0915 \u0909\u092A\u092F\u094B\u0917\u0915\u0930\u094D\u0924\u093E \u0915\u094B \u092E\u094D\u092F\u0942\u091F \u0915\u0930\u0947\u0902\",\n  \"replyCount_one\": \"1 \u0930\u093F\u092A\u094D\u0932\u093E\u0908\",\n  \"replyCount_other\": \"{{ count }} \u0930\u093F\u092A\u094D\u0932\u093E\u0908\",\n  \"search-results-header-filter-source-button-label--channels\": \"\u091A\u0948\u0928\u0932\u094D\u0938\",\n  \"search-results-header-filter-source-button-label--messages\": \"\u0938\u0902\u0926\u0947\u0936\",\n  \"search-results-header-filter-source-button-label--users\": \"\u0909\u092A\u092F\u094B\u0917\u0915\u0930\u094D\u0924\u093E\",\n  \"searchResultsCount_one\": \"1 \u092A\u0930\u093F\u0923\u093E\u092E\",\n  \"searchResultsCount_other\": \"{{ count }} \u092A\u0930\u093F\u0923\u093E\u092E\",\n  \"this content could not be displayed\": \"\u092F\u0939 \u0915\u0949\u0928\u094D\u091F\u0947\u0902\u091F \u0932\u094B\u0921 \u0928\u0939\u0940\u0902 \u0939\u094B \u092A\u093E\u092F\u093E\",\n  \"timestamp/DateSeparator\": \"{{ timestamp | timestampFormatter(calendar: true) }}\",\n  \"timestamp/MessageTimestamp\": \"{{ timestamp | timestampFormatter(calendar: true) }}\",\n  \"timestamp/PollVote\": \"{{ timestamp | timestampFormatter(format: MMM D [at] HH:mm) }}\",\n  \"timestamp/PollVoteTooltip\": \"{{ timestamp | timestampFormatter(calendar: true) }}\",\n  \"timestamp/SystemMessage\": \"{{ timestamp | timestampFormatter(format: dddd L) }}\",\n  \"unban-command-args\": \"[@\u0909\u092A\u092F\u094B\u0917\u0915\u0930\u094D\u0924\u0928\u093E\u092E]\",\n  \"unban-command-description\": \"\u090F\u0915 \u0909\u092A\u092F\u094B\u0917\u0915\u0930\u094D\u0924\u093E \u0915\u094B \u092A\u094D\u0930\u0924\u093F\u0937\u0947\u0927 \u0938\u0947 \u092E\u0941\u0915\u094D\u0924 \u0915\u0930\u0947\u0902\",\n  \"unmute-command-args\": \"[@\u0909\u092A\u092F\u094B\u0917\u0915\u0930\u094D\u0924\u0928\u093E\u092E]\",\n  \"unmute-command-description\": \"\u090F\u0915 \u0909\u092A\u092F\u094B\u0917\u0915\u0930\u094D\u0924\u093E \u0915\u094B \u0905\u0928\u092E\u094D\u092F\u0942\u091F \u0915\u0930\u0947\u0902\",\n  \"unreadMessagesSeparatorText_one\": \"1 \u0905\u092A\u0920\u093F\u0924 \u0938\u0902\u0926\u0947\u0936\",\n  \"unreadMessagesSeparatorText_other\": \"{{count}} \u0905\u092A\u0920\u093F\u0924 \u0938\u0902\u0926\u0947\u0936\",\n  \"{{ commaSeparatedUsers }} and {{ moreCount }} more\": \"{{ commaSeparatedUsers }} \u0914\u0930 {{ moreCount }} \u0914\u0930\",\n  \"{{ commaSeparatedUsers }}, and {{ lastUser }}\": \"{{ commaSeparatedUsers }} \u0914\u0930 {{ lastUser }}\",\n  \"{{ firstUser }} and {{ secondUser }}\": \"{{ firstUser }} \u0914\u0930 {{ secondUser }}\",\n  \"{{ imageCount }} more\": \"{{ imageCount }} \u0914\u0930\",\n  \"{{ memberCount }} members\": \"{{ memberCount }} \u092E\u0947\u0902\u092C\u0930\u094D\u0938\",\n  \"{{ user }} has been muted\": \"{{ user }} \u0915\u094B \u092E\u094D\u092F\u0942\u091F \u0915\u0930 \u0926\u093F\u092F\u093E \u0917\u092F\u093E \u0939\u0948\",\n  \"{{ user }} has been unmuted\": \"{{ user }} \u0915\u094B \u0905\u0928\u092E\u094D\u092F\u0942\u091F \u0915\u0930 \u0926\u093F\u092F\u093E \u0917\u092F\u093E \u0939\u0948\",\n  \"{{ user }} is typing...\": \"{{ user }} \u091F\u093E\u0907\u092A \u0915\u0930 \u0930\u0939\u093E \u0939\u0948...\",\n  \"{{ users }} and more are typing...\": \"{{ users }} \u0914\u0930 \u0905\u0927\u093F\u0915 \u091F\u093E\u0907\u092A \u0915\u0930 \u0930\u0939\u0947 \u0939\u0948\u0902...\",\n  \"{{ users }} and {{ user }} are typing...\": \"{{ users }} \u0914\u0930 {{ user }} \u091F\u093E\u0907\u092A \u0915\u0930 \u0930\u0939\u0947 \u0939\u0948\u0902...\",\n  \"{{ watcherCount }} online\": \"{{ watcherCount }} \u0911\u0928\u0932\u093E\u0907\u0928\",\n  \"{{count}} unread_one\": \"{{count}} \u0905\u092A\u0920\u093F\u0924\",\n  \"{{count}} unread_other\": \"{{count}} \u0905\u092A\u0920\u093F\u0924\",\n  \"{{count}} votes_one\": \"{{count}} \u0935\u094B\u091F\",\n  \"{{count}} votes_other\": \"{{count}} \u0935\u094B\u091F\",\n  \"\uD83C\uDFD9 Attachment...\": \"\uD83C\uDFD9 \u0905\u091F\u0948\u091A\u092E\u0947\u0902\u091F\",\n  \"\uD83D\uDCCA {{createdBy}} created: {{ pollName}}\": \"\uD83D\uDCCA {{createdBy}} \u0928\u0947 \u092C\u0928\u093E\u092F\u093E: {{ pollName}}\",\n  \"\uD83D\uDCCA {{votedBy}} voted: {{pollOptionText}}\": \"\uD83D\uDCCA {{votedBy}} \u0928\u0947 \u0935\u094B\u091F \u0926\u093F\u092F\u093E: {{pollOptionText}}\"\n}\n", "{\n  \"Add a comment\": \"Aggiungi un commento\",\n  \"Add an option\": \"Aggiungi un'opzione\",\n  \"All results loaded\": \"Tutti i risultati caricati\",\n  \"Allow access to camera\": \"Consenti l'accesso alla fotocamera\",\n  \"Allow access to microphone\": \"Consenti l'accesso al microfono\",\n  \"Allow comments\": \"Consenti i commenti\",\n  \"Allow option suggestion\": \"Consenti il suggerimento di opzioni\",\n  \"An error has occurred during recording\": \"Si \u00E8 verificato un errore durante la registrazione\",\n  \"An error has occurred during the recording processing\": \"Si \u00E8 verificato un errore durante l'elaborazione della registrazione\",\n  \"Anonymous\": \"Anonimo\",\n  \"Anonymous poll\": \"Sondaggio anonimo\",\n  \"Archive\": \"Archivia\",\n  \"Ask a question\": \"Fai una domanda\",\n  \"Attach files\": \"Allega file\",\n  \"Cancel\": \"Annulla\",\n  \"Cannot seek in the recording\": \"Impossibile cercare nella registrazione\",\n  \"Channel Missing\": \"Il canale non esiste\",\n  \"Close\": \"Chiudi\",\n  \"Close emoji picker\": \"Chiudi il selettore di emoji\",\n  \"Commands matching\": \"Comandi corrispondenti\",\n  \"Connection failure, reconnecting now...\": \"Errore di connessione, riconnessione in corso...\",\n  \"Create\": \"Crea\",\n  \"Create poll\": \"Crea sondaggio\",\n  \"Delete\": \"Elimina\",\n  \"Delivered\": \"Consegnato\",\n  \"Download attachment {{ name }}\": \"Scarica l'allegato {{ name }}\",\n  \"Drag your files here\": \"Trascina i tuoi file qui\",\n  \"Drag your files here to add to your post\": \"Trascina i tuoi file qui per aggiungerli al tuo post\",\n  \"Edit Message\": \"Modifica messaggio\",\n  \"Edit message request failed\": \"Richiesta di modifica del messaggio non riuscita\",\n  \"Edited\": \"Modificato\",\n  \"Emoji matching\": \"Abbinamento emoji\",\n  \"Empty message...\": \"Messaggio vuoto...\",\n  \"End\": \"Fine\",\n  \"End vote\": \"Termina il voto\",\n  \"Error adding flag\": \"Errore durante l'aggiunta del flag\",\n  \"Error connecting to chat, refresh the page to try again.\": \"Errore di connessione alla chat, aggiorna la pagina per riprovare.\",\n  \"Error deleting message\": \"Errore durante l'eliminazione del messaggio\",\n  \"Error fetching reactions\": \"Errore nel caricamento delle reazioni\",\n  \"Error marking message unread. Cannot mark unread messages older than the newest 100 channel messages.\": \"Errore durante la marcatura del messaggio come non letto. Impossibile marcare messaggi non letti pi\u00F9 vecchi dei pi\u00F9 recenti 100 messaggi del canale.\",\n  \"Error muting a user ...\": \"Errore nel silenziare un utente ...\",\n  \"Error pinning message\": \"Errore durante il blocco del messaggio\",\n  \"Error removing message pin\": \"Errore durante la rimozione del PIN del messaggio\",\n  \"Error reproducing the recording\": \"Errore durante la riproduzione della registrazione\",\n  \"Error starting recording\": \"Errore durante l'avvio della registrazione\",\n  \"Error unmuting a user ...\": \"Errore nel riattivare un utente ...\",\n  \"Error uploading attachment\": \"Errore durante il caricamento dell'allegato\",\n  \"Error uploading file\": \"Errore durante il caricamento del file\",\n  \"Error uploading image\": \"Errore durante il caricamento dell'immagine\",\n  \"Error \u00B7 Unsent\": \"Errore \u00B7 Non inviato\",\n  \"Error: {{ errorMessage }}\": \"Errore: {{ errorMessage }}\",\n  \"Failed to jump to the first unread message\": \"Impossibile passare al primo messaggio non letto\",\n  \"Failed to mark channel as read\": \"Impossibile contrassegnare il canale come letto\",\n  \"Failed to play the recording\": \"Impossibile riprodurre la registrazione\",\n  \"File\": \"File\",\n  \"File is too large: {{ size }}, maximum upload size is {{ limit }}\": \"Il file \u00E8 troppo grande: {{ size }}, la dimensione massima di caricamento \u00E8 {{ limit }}\",\n  \"Flag\": \"Segnala\",\n  \"Generating...\": \"Generando...\",\n  \"Latest Messages\": \"Ultimi messaggi\",\n  \"Load more\": \"Carica di pi\u00F9\",\n  \"Mark as unread\": \"Contrassegna come non letto\",\n  \"Maximum number of votes (from 2 to 10)\": \"Numero massimo di voti (da 2 a 10)\",\n  \"Menu\": \"Men\u00F9\",\n  \"Message Failed \u00B7 Click to try again\": \"Invio messaggio fallito \u00B7 Clicca per riprovare\",\n  \"Message Failed \u00B7 Unauthorized\": \"Invio messaggio fallito \u00B7 Non autorizzato\",\n  \"Message deleted\": \"Messaggio cancellato\",\n  \"Message has been successfully flagged\": \"Il messaggio \u00E8 stato segnalato con successo\",\n  \"Message pinned\": \"Messaggio bloccato\",\n  \"Message was blocked by moderation policies\": \"Il messaggio \u00E8 stato bloccato dalle politiche di moderazione\",\n  \"Messages have been marked unread.\": \"I messaggi sono stati contrassegnati come non letti.\",\n  \"Missing permissions to upload the attachment\": \"Autorizzazioni mancanti per caricare l'allegato\",\n  \"Multiple answers\": \"Risposte multiple\",\n  \"Mute\": \"Silenzia\",\n  \"New\": \"Nuovo\",\n  \"New Messages!\": \"Nuovi messaggi!\",\n  \"No chats here yet\u2026\": \"Non ci sono ancora messaggi qui...\",\n  \"No results found\": \"Nessun risultato trovato\",\n  \"Nobody will be able to vote in this poll anymore.\": \"Nessuno potr\u00E0 pi\u00F9 votare in questo sondaggio.\",\n  \"Nothing yet...\": \"Ancora niente...\",\n  \"Ok\": \"Ok\",\n  \"Open emoji picker\": \"Apri il selettore di emoji\",\n  \"Option already exists\": \"L'opzione esiste gi\u00E0\",\n  \"Options\": \"Opzioni\",\n  \"People matching\": \"Persone che corrispondono\",\n  \"Pin\": \"Pin\",\n  \"Pinned by\": \"Appuntato da\",\n  \"Poll\": \"Sondaggio\",\n  \"Poll comments\": \"Commenti del sondaggio\",\n  \"Poll options\": \"Opzioni del sondaggio\",\n  \"Poll results\": \"Risultati del sondaggio\",\n  \"Question\": \"Domanda\",\n  \"Quote\": \"Citazione\",\n  \"Recording format is not supported and cannot be reproduced\": \"Il formato di registrazione non \u00E8 supportato e non pu\u00F2 essere riprodotto\",\n  \"Reply\": \"Rispondi\",\n  \"Reply to Message\": \"Rispondi al messaggio\",\n  \"Search\": \"Cerca\",\n  \"Searching...\": \"Ricerca in corso...\",\n  \"See all options ({{count}})_many\": \"Vedi tutte le opzioni ({{count}})\",\n  \"See all options ({{count}})_one\": \"Vedi tutte le opzioni ({{count}})\",\n  \"See all options ({{count}})_other\": \"Vedi tutte le opzioni ({{count}})\",\n  \"Select one\": \"Seleziona uno\",\n  \"Select one or more\": \"Seleziona uno o pi\u00F9\",\n  \"Select up to {{count}}_many\": \"Seleziona fino a {{count}}\",\n  \"Select up to {{count}}_one\": \"Seleziona fino a {{count}}\",\n  \"Select up to {{count}}_other\": \"Seleziona fino a {{count}}\",\n  \"Send\": \"Invia\",\n  \"Send Anyway\": \"Invia comunque\",\n  \"Send message request failed\": \"Richiesta di invio messaggio non riuscita\",\n  \"Sending...\": \"Invio in corso...\",\n  \"Show all\": \"Mostra tutto\",\n  \"Shuffle\": \"Mescolare\",\n  \"Slow Mode ON\": \"Modalit\u00E0 lenta attivata\",\n  \"Some of the files will not be accepted\": \"Alcuni dei file non saranno accettati\",\n  \"Start typing to search\": \"Inizia a digitare per cercare\",\n  \"Submit\": \"Invia\",\n  \"Suggest an option\": \"Suggerisci un'opzione\",\n  \"Thinking...\": \"Pensando...\",\n  \"This message did not meet our content guidelines\": \"Questo messaggio non soddisfa le nostre linee guida sui contenuti\",\n  \"This message was deleted...\": \"Questo messaggio \u00E8 stato cancellato...\",\n  \"Thread\": \"Discussione\",\n  \"To start recording, allow the camera access in your browser\": \"Per iniziare a registrare, consenti l'accesso alla fotocamera nel tuo browser\",\n  \"To start recording, allow the microphone access in your browser\": \"Per iniziare a registrare, consenti l'accesso al microfono nel tuo browser\",\n  \"Type a number from 2 to 10\": \"Digita un numero da 2 a 10\",\n  \"Type your message\": \"Scrivi il tuo messaggio\",\n  \"Unarchive\": \"Ripristina\",\n  \"Unmute\": \"Riattiva il notifiche\",\n  \"Unpin\": \"Sblocca\",\n  \"Unread messages\": \"Messaggi non letti\",\n  \"Unsupported attachment\": \"Allegato non supportato\",\n  \"Update your comment\": \"Aggiorna il tuo commento\",\n  \"Upload type: \\\"{{ type }}\\\" is not allowed\": \"Tipo di caricamento: \\\"{{ type }}\\\" non \u00E8 consentito\",\n  \"User uploaded content\": \"Contenuto caricato dall'utente\",\n  \"View results\": \"Vedi risultati\",\n  \"View {{count}} comments_many\": \"Visualizza {{count}} commenti\",\n  \"View {{count}} comments_one\": \"Visualizza {{count}} commento\",\n  \"View {{count}} comments_other\": \"Visualizza {{count}} commenti\",\n  \"Voice message\": \"Messaggio vocale\",\n  \"Vote ended\": \"Voto terminato\",\n  \"Wait until all attachments have uploaded\": \"Attendi il caricamento di tutti gli allegati\",\n  \"You\": \"Tu\",\n  \"You have no channels currently\": \"Al momento non sono presenti canali\",\n  \"You've reached the maximum number of files\": \"Hai raggiunto il numero massimo di file\",\n  \"aria/Attachment\": \"Allegato\",\n  \"aria/Cancel Reply\": \"Annulla risposta\",\n  \"aria/Cancel upload\": \"Annulla caricamento\",\n  \"aria/Channel list\": \"Elenco dei canali\",\n  \"aria/Channel search results\": \"Risultati della ricerca dei canali\",\n  \"aria/Close thread\": \"Chiudi discussione\",\n  \"aria/Download attachment\": \"Scarica l'allegato\",\n  \"aria/Emoji picker\": \"Selettore di emoji\",\n  \"aria/File input\": \"Input di file\",\n  \"aria/File upload\": \"Caricamento di file\",\n  \"aria/Image input\": \"Input di immagine\",\n  \"aria/Load More Channels\": \"Carica altri canali\",\n  \"aria/Menu\": \"Menu\",\n  \"aria/Message Options\": \"Opzioni di messaggio\",\n  \"aria/Open Attachment Selector\": \"Apri selettore allegati\",\n  \"aria/Open Message Actions Menu\": \"Apri il menu delle azioni di messaggio\",\n  \"aria/Open Reaction Selector\": \"Apri il selettore di reazione\",\n  \"aria/Open Thread\": \"Apri discussione\",\n  \"aria/Reaction list\": \"Elenco delle reazioni\",\n  \"aria/Remove attachment\": \"Rimuovi allegato\",\n  \"aria/Retry upload\": \"Riprova caricamento\",\n  \"aria/Search results\": \"Risultati della ricerca\",\n  \"aria/Search results header filter button\": \"Pulsante filtro intestazione risultati ricerca\",\n  \"aria/Send\": \"Invia\",\n  \"aria/Stop AI Generation\": \"Interrompi generazione IA\",\n  \"ban-command-args\": \"[@nomeutente] [testo]\",\n  \"ban-command-description\": \"Vietare un utente\",\n  \"giphy-command-args\": \"[testo]\",\n  \"giphy-command-description\": \"Pubblica un gif casuale sul canale\",\n  \"live\": \"live\",\n  \"mute-command-args\": \"[@nomeutente]\",\n  \"mute-command-description\": \"Silenzia un utente\",\n  \"replyCount_many\": \"{{ count }} risposte\",\n  \"replyCount_one\": \"Una risposta\",\n  \"replyCount_other\": \"{{ count }} risposte\",\n  \"search-results-header-filter-source-button-label--channels\": \"canali\",\n  \"search-results-header-filter-source-button-label--messages\": \"messaggi\",\n  \"search-results-header-filter-source-button-label--users\": \"utenti\",\n  \"searchResultsCount_many\": \"{{ count }} risultati\",\n  \"searchResultsCount_one\": \"1 risultato\",\n  \"searchResultsCount_other\": \"{{ count }} risultati\",\n  \"this content could not be displayed\": \"questo contenuto non pu\u00F2 essere mostrato\",\n  \"timestamp/DateSeparator\": \"{{ timestamp | timestampFormatter(calendar: true) }}\",\n  \"timestamp/MessageTimestamp\": \"{{ timestamp | timestampFormatter(calendar: true) }}\",\n  \"timestamp/PollVote\": \"{{ timestamp | timestampFormatter(format: MMM D [at] HH:mm) }}\",\n  \"timestamp/PollVoteTooltip\": \"{{ timestamp | timestampFormatter(calendar: true) }}\",\n  \"timestamp/SystemMessage\": \"{{ timestamp | timestampFormatter(format: dddd L) }}\",\n  \"unban-command-args\": \"[@nomeutente]\",\n  \"unban-command-description\": \"Togliere il divieto a un utente\",\n  \"unmute-command-args\": \"[@nomeutente]\",\n  \"unmute-command-description\": \"Togliere il silenzio a un utente\",\n  \"unreadMessagesSeparatorText_many\": \"{{count}} messaggi non letti\",\n  \"unreadMessagesSeparatorText_one\": \"1 messaggio non letto\",\n  \"unreadMessagesSeparatorText_other\": \"{{count}} messaggi non letti\",\n  \"{{ commaSeparatedUsers }} and {{ moreCount }} more\": \"{{ commaSeparatedUsers }} e altri {{ moreCount }}\",\n  \"{{ commaSeparatedUsers }}, and {{ lastUser }}\": \"{{ commaSeparatedUsers }} e {{ lastUser }}\",\n  \"{{ firstUser }} and {{ secondUser }}\": \"{{ firstUser }} e {{ secondUser }}\",\n  \"{{ imageCount }} more\": \"+ {{ imageCount }}\",\n  \"{{ memberCount }} members\": \"{{ memberCount }} membri\",\n  \"{{ user }} has been muted\": \"{{ user }} \u00E8 stato silenziato\",\n  \"{{ user }} has been unmuted\": \"Notifiche riattivate per {{ user }}\",\n  \"{{ user }} is typing...\": \"{{ user }} sta digitando...\",\n  \"{{ users }} and more are typing...\": \"{{ users }} e altri stanno digitando...\",\n  \"{{ users }} and {{ user }} are typing...\": \"{{ users }} e {{ user }} stanno digitando...\",\n  \"{{ watcherCount }} online\": \"{{ watcherCount }} online\",\n  \"{{count}} unread_many\": \"{{count}} non letti\",\n  \"{{count}} unread_one\": \"{{count}} non letto\",\n  \"{{count}} unread_other\": \"{{count}} non letti\",\n  \"{{count}} votes_many\": \"{{count}} voti\",\n  \"{{count}} votes_one\": \"{{count}} voto\",\n  \"{{count}} votes_other\": \"{{count}} voti\",\n  \"\uD83C\uDFD9 Attachment...\": \"\uD83C\uDFD9 Allegato...\",\n  \"\uD83D\uDCCA {{createdBy}} created: {{ pollName}}\": \"\uD83D\uDCCA {{createdBy}} ha creato: {{ pollName}}\",\n  \"\uD83D\uDCCA {{votedBy}} voted: {{pollOptionText}}\": \"\uD83D\uDCCA {{votedBy}} ha votato: {{pollOptionText}}\"\n}\n", "{\n  \"Add a comment\": \"\u30B3\u30E1\u30F3\u30C8\u3092\u8FFD\u52A0\",\n  \"Add an option\": \"\u30AA\u30D7\u30B7\u30E7\u30F3\u3092\u8FFD\u52A0\",\n  \"All results loaded\": \"\u3059\u3079\u3066\u306E\u7D50\u679C\u304C\u8AAD\u307F\u8FBC\u307E\u308C\u307E\u3057\u305F\",\n  \"Allow access to camera\": \"\u30AB\u30E1\u30E9\u3078\u306E\u30A2\u30AF\u30BB\u30B9\u3092\u8A31\u53EF\u3059\u308B\",\n  \"Allow access to microphone\": \"\u30DE\u30A4\u30AF\u30ED\u30D5\u30A9\u30F3\u3078\u306E\u30A2\u30AF\u30BB\u30B9\u3092\u8A31\u53EF\u3059\u308B\",\n  \"Allow comments\": \"\u30B3\u30E1\u30F3\u30C8\u3092\u8A31\u53EF\",\n  \"Allow option suggestion\": \"\u30AA\u30D7\u30B7\u30E7\u30F3\u306E\u63D0\u6848\u3092\u8A31\u53EF\",\n  \"An error has occurred during recording\": \"\u9332\u97F3\u4E2D\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F\",\n  \"An error has occurred during the recording processing\": \"\u9332\u97F3\u51E6\u7406\u4E2D\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F\",\n  \"Anonymous\": \"\u533F\u540D\",\n  \"Anonymous poll\": \"\u533F\u540D\u6295\u7968\",\n  \"Archive\": \"\u30A2\u30FC\u30AB\u30A4\u30D6\",\n  \"Ask a question\": \"\u8CEA\u554F\u3059\u308B\",\n  \"Attach files\": \"\u30D5\u30A1\u30A4\u30EB\u3092\u6DFB\u4ED8\u3059\u308B\",\n  \"Cancel\": \"\u30AD\u30E3\u30F3\u30BB\u30EB\",\n  \"Cannot seek in the recording\": \"\u9332\u97F3\u4E2D\u306B\u30B7\u30FC\u30AF\u3067\u304D\u307E\u305B\u3093\",\n  \"Channel Missing\": \"\u30C1\u30E3\u30CD\u30EB\u304C\u3042\u308A\u307E\u305B\u3093\",\n  \"Close\": \"\u9589\u3081\u308B\",\n  \"Close emoji picker\": \"\u7D75\u6587\u5B57\u30D4\u30C3\u30AB\u30FC\u3092\u9589\u3081\u308B\",\n  \"Commands matching\": \"\u4E00\u81F4\u3059\u308B\u30B3\u30DE\u30F3\u30C9\",\n  \"Connection failure, reconnecting now...\": \"\u63A5\u7D9A\u304C\u5931\u6557\u3057\u307E\u3057\u305F\u3002\u518D\u63A5\u7D9A\u4E2D...\",\n  \"Create\": \"\u4F5C\u6210\",\n  \"Create poll\": \"\u6295\u7968\u3092\u4F5C\u6210\",\n  \"Delete\": \"\u6D88\u53BB\",\n  \"Delivered\": \"\u914D\u4FE1\u3057\u307E\u3057\u305F\",\n  \"Download attachment {{ name }}\": \"\u6DFB\u4ED8\u30D5\u30A1\u30A4\u30EB {{ name }} \u3092\u30C0\u30A6\u30F3\u30ED\u30FC\u30C9\",\n  \"Drag your files here\": \"\u3053\u3053\u306B\u30D5\u30A1\u30A4\u30EB\u3092\u30C9\u30E9\u30C3\u30B0\",\n  \"Drag your files here to add to your post\": \"\u6295\u7A3F\u306B\u8FFD\u52A0\u3059\u308B\u305F\u3081\u306B\u3053\u3053\u306B\u30D5\u30A1\u30A4\u30EB\u3092\u30C9\u30E9\u30C3\u30B0\",\n  \"Edit Message\": \"\u30E1\u30C3\u30BB\u30FC\u30B8\u3092\u7DE8\u96C6\",\n  \"Edit message request failed\": \"\u30E1\u30C3\u30BB\u30FC\u30B8\u306E\u7DE8\u96C6\u8981\u6C42\u304C\u5931\u6557\u3057\u307E\u3057\u305F\",\n  \"Edited\": \"\u7DE8\u96C6\u6E08\u307F\",\n  \"Emoji matching\": \"\u7D75\u6587\u5B57\u30DE\u30C3\u30C1\u30F3\u30B0\",\n  \"Empty message...\": \"\u7A7A\u306E\u30E1\u30C3\u30BB\u30FC\u30B8...\",\n  \"End\": \"\u7D42\u4E86\",\n  \"End vote\": \"\u6295\u7968\u3092\u7D42\u4E86\",\n  \"Error adding flag\": \"\u30D5\u30E9\u30B0\u3092\u8FFD\u52A0\u306E\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F\",\n  \"Error connecting to chat, refresh the page to try again.\": \"\u30C1\u30E3\u30C3\u30C8\u3078\u306E\u63A5\u7D9A\u304C\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\u3002\u30DA\u30FC\u30B8\u3092\u66F4\u65B0\u3057\u3066\u304F\u3060\u3055\u3044\u3002\",\n  \"Error deleting message\": \"\u30E1\u30C3\u30BB\u30FC\u30B8\u3092\u524A\u9664\u3059\u308B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F\",\n  \"Error fetching reactions\": \"\u53CD\u5FDC\u306E\u8AAD\u307F\u8FBC\u307F\u30A8\u30E9\u30FC\",\n  \"Error marking message unread. Cannot mark unread messages older than the newest 100 channel messages.\": \"\u30E1\u30C3\u30BB\u30FC\u30B8\u3092\u672A\u8AAD\u306B\u3059\u308B\u969B\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002\u6700\u65B0\u306E100\u4EF6\u306E\u30C1\u30E3\u30F3\u30CD\u30EB\u30E1\u30C3\u30BB\u30FC\u30B8\u3088\u308A\u53E4\u3044\u672A\u8AAD\u30E1\u30C3\u30BB\u30FC\u30B8\u306F\u30DE\u30FC\u30AF\u3067\u304D\u307E\u305B\u3093\u3002\",\n  \"Error muting a user ...\": \"\u30E6\u30FC\u30B6\u30FC\u3092\u7121\u97F3\u3059\u308B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F...\",\n  \"Error pinning message\": \"\u30E1\u30C3\u30BB\u30FC\u30B8\u3092\u30D4\u30F3\u306E\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F\",\n  \"Error removing message pin\": \"\u30E1\u30C3\u30BB\u30FC\u30B8\u306E\u30D4\u30F3\u3092\u524A\u9664\u306E\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F\",\n  \"Error reproducing the recording\": \"\u9332\u97F3\u306E\u518D\u751F\u4E2D\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F\",\n  \"Error starting recording\": \"\u9332\u97F3\u306E\u958B\u59CB\u6642\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F\",\n  \"Error unmuting a user ...\": \"\u30E6\u30FC\u30B6\u30FC\u306E\u7121\u97F3\u89E3\u9664\u306E\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F...\",\n  \"Error uploading attachment\": \"\u6DFB\u4ED8\u30D5\u30A1\u30A4\u30EB\u306E\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u4E2D\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F\",\n  \"Error uploading file\": \"\u30D5\u30A1\u30A4\u30EB\u3092\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u306E\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F\",\n  \"Error uploading image\": \"\u753B\u50CF\u3092\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u306E\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F\",\n  \"Error \u00B7 Unsent\": \"\u30A8\u30E9\u30FC\u30FB\u672A\u9001\u4FE1\",\n  \"Error: {{ errorMessage }}\": \"\u30A8\u30E9\u30FC: {{ errorMessage }}\",\n  \"Failed to jump to the first unread message\": \"\u6700\u521D\u306E\u672A\u8AAD\u30E1\u30C3\u30BB\u30FC\u30B8\u306B\u30B8\u30E3\u30F3\u30D7\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\",\n  \"Failed to mark channel as read\": \"\u30C1\u30E3\u30F3\u30CD\u30EB\u3092\u65E2\u8AAD\u306B\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\",\n  \"Failed to play the recording\": \"\u9332\u97F3\u306E\u518D\u751F\u306B\u5931\u6557\u3057\u307E\u3057\u305F\",\n  \"File\": \"\u30D5\u30A1\u30A4\u30EB\",\n  \"File is too large: {{ size }}, maximum upload size is {{ limit }}\": \"\u30D5\u30A1\u30A4\u30EB\u304C\u5927\u304D\u3059\u304E\u307E\u3059\uFF1A{{ size }}\u3001\u6700\u5927\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u30B5\u30A4\u30BA\u306F{{ limit }}\u3067\u3059\",\n  \"Flag\": \"\u30D5\u30E9\u30B0\",\n  \"Generating...\": \"\u751F\u6210\u4E2D...\",\n  \"Latest Messages\": \"\u6700\u65B0\u306E\u30E1\u30C3\u30BB\u30FC\u30B8\",\n  \"Load more\": \"\u3082\u3063\u3068\u8AAD\u307F\u8FBC\u3080\",\n  \"Mark as unread\": \"\u672A\u8AAD\u3068\u3057\u3066\u30DE\u30FC\u30AF\",\n  \"Maximum number of votes (from 2 to 10)\": \"\u6700\u5927\u6295\u7968\u6570\uFF082\u304B\u308910\u307E\u3067\uFF09\",\n  \"Menu\": \"\u30E1\u30CB\u30E5\u30FC\",\n  \"Message Failed \u00B7 Click to try again\": \"\u30E1\u30C3\u30BB\u30FC\u30B8\u304C\u5931\u6557\u3057\u307E\u3057\u305F \u00B7 \u30AF\u30EA\u30C3\u30AF\u3057\u3066\u518D\u8A66\u884C\u3057\u3066\u304F\u3060\u3055\u3044\",\n  \"Message Failed \u00B7 Unauthorized\": \"\u30E1\u30C3\u30BB\u30FC\u30B8\u304C\u5931\u6557\u3057\u307E\u3057\u305F \u00B7 \u8A31\u53EF\u3055\u308C\u3066\u3044\u307E\u305B\u3093\",\n  \"Message deleted\": \"\u30E1\u30C3\u30BB\u30FC\u30B8\u304C\u524A\u9664\u3055\u308C\u307E\u3057\u305F\",\n  \"Message has been successfully flagged\": \"\u30E1\u30C3\u30BB\u30FC\u30B8\u306B\u6B63\u5E38\u306B\u30D5\u30E9\u30B0\u304C\u4ED8\u3051\u3089\u308C\u307E\u3057\u305F\",\n  \"Message pinned\": \"\u30E1\u30C3\u30BB\u30FC\u30B8\u306B\u30D4\u30F3\u304C\u4ED8\u3051\u3089\u308C\u307E\u3057\u305F\",\n  \"Message was blocked by moderation policies\": \"\u30E1\u30C3\u30BB\u30FC\u30B8\u306F\u30E2\u30C7\u30EC\u30FC\u30B7\u30E7\u30F3\u30DD\u30EA\u30B7\u30FC\u306B\u3088\u3063\u3066\u30D6\u30ED\u30C3\u30AF\u3055\u308C\u307E\u3057\u305F\",\n  \"Messages have been marked unread.\": \"\u30E1\u30C3\u30BB\u30FC\u30B8\u306F\u672A\u8AAD\u3068\u3057\u3066\u30DE\u30FC\u30AF\u3055\u308C\u307E\u3057\u305F\u3002\",\n  \"Missing permissions to upload the attachment\": \"\u6DFB\u4ED8\u30D5\u30A1\u30A4\u30EB\u3092\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u3059\u308B\u305F\u3081\u306E\u8A31\u53EF\u304C\u3042\u308A\u307E\u305B\u3093\",\n  \"Multiple answers\": \"\u8907\u6570\u56DE\u7B54\",\n  \"Mute\": \"\u7121\u97F3\",\n  \"New\": \"\u65B0\u3057\u3044\",\n  \"New Messages!\": \"\u65B0\u3057\u3044\u30E1\u30C3\u30BB\u30FC\u30B8!\",\n  \"No chats here yet\u2026\": \"\u3053\u3053\u306B\u306F\u307E\u3060\u30C1\u30E3\u30C3\u30C8\u306F\u3042\u308A\u307E\u305B\u3093\u2026\",\n  \"No results found\": \"\u7D50\u679C\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093\",\n  \"Nobody will be able to vote in this poll anymore.\": \"\u3053\u306E\u6295\u7968\u3067\u306F\u3001\u8AB0\u3082\u6295\u7968\u3067\u304D\u306A\u304F\u306A\u308A\u307E\u3059\u3002\",\n  \"Nothing yet...\": \"\u307E\u3060\u4F55\u3082\u3042\u308A\u307E\u305B\u3093...\",\n  \"Ok\": \"OK\",\n  \"Open emoji picker\": \"\u7D75\u6587\u5B57\u30D4\u30C3\u30AB\u30FC\u3092\u958B\u304F\",\n  \"Option already exists\": \"\u30AA\u30D7\u30B7\u30E7\u30F3\u306F\u65E2\u306B\u5B58\u5728\u3057\u307E\u3059\",\n  \"Options\": \"\u30AA\u30D7\u30B7\u30E7\u30F3\",\n  \"People matching\": \"\u4E00\u81F4\u3059\u308B\u4EBA\",\n  \"Pin\": \"\u30D4\u30F3\",\n  \"Pinned by\": \"\u30D4\u30F3\u3057\u305F\u65B9\",\n  \"Poll\": \"\u6295\u7968\",\n  \"Poll comments\": \"\u6295\u7968\u30B3\u30E1\u30F3\u30C8\",\n  \"Poll options\": \"\u6295\u7968\u30AA\u30D7\u30B7\u30E7\u30F3\",\n  \"Poll results\": \"\u6295\u7968\u7D50\u679C\",\n  \"Question\": \"\u8CEA\u554F\",\n  \"Quote\": \"\u5F15\u7528\",\n  \"Recording format is not supported and cannot be reproduced\": \"\u9332\u97F3\u5F62\u5F0F\u306F\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u304A\u3089\u305A\u3001\u518D\u751F\u3067\u304D\u307E\u305B\u3093\",\n  \"Reply\": \"\u8FD4\u4E8B\",\n  \"Reply to Message\": \"\u30E1\u30C3\u30BB\u30FC\u30B8\u306B\u8FD4\u4FE1\",\n  \"Search\": \"\u63A2\u3059\",\n  \"Searching...\": \"\u691C\u7D22\u4E2D...\",\n  \"See all options ({{count}})_other\": \"\u3059\u3079\u3066\u306E\u30AA\u30D7\u30B7\u30E7\u30F3\u3092\u898B\u308B ({{count}})\",\n  \"Select one\": \"1\u3064\u9078\u629E\",\n  \"Select one or more\": \"1\u3064\u4EE5\u4E0A\u9078\u629E\",\n  \"Select up to {{count}}_other\": \"\u6700\u5927{{count}}\u307E\u3067\u9078\u629E\",\n  \"Send\": \"\u9001\u4FE1\",\n  \"Send Anyway\": \"\u3068\u306B\u304B\u304F\u9001\u4FE1\u3059\u308B\",\n  \"Send message request failed\": \"\u30E1\u30C3\u30BB\u30FC\u30B8\u9001\u4FE1\u30EA\u30AF\u30A8\u30B9\u30C8\u304C\u5931\u6557\u3057\u307E\u3057\u305F\",\n  \"Sending...\": \"\u9001\u4FE1\u4E2D...\",\n  \"Show all\": \"\u3059\u3079\u3066\u8868\u793A\",\n  \"Shuffle\": \"\u30B7\u30E3\u30C3\u30D5\u30EB\",\n  \"Slow Mode ON\": \"\u30B9\u30ED\u30FC\u30E2\u30FC\u30C9\u30AA\u30F3\",\n  \"Some of the files will not be accepted\": \"\u4E00\u90E8\u306E\u30D5\u30A1\u30A4\u30EB\u306F\u53D7\u3051\u4ED8\u3051\u3089\u308C\u307E\u305B\u3093\",\n  \"Start typing to search\": \"\u691C\u7D22\u3059\u308B\u306B\u306F\u5165\u529B\u3092\u958B\u59CB\u3057\u3066\u304F\u3060\u3055\u3044\",\n  \"Submit\": \"\u9001\u4FE1\",\n  \"Suggest an option\": \"\u30AA\u30D7\u30B7\u30E7\u30F3\u3092\u63D0\u6848\",\n  \"Thinking...\": \"\u8003\u3048\u4E2D...\",\n  \"This message did not meet our content guidelines\": \"\u3053\u306E\u30E1\u30C3\u30BB\u30FC\u30B8\u306F\u30B3\u30F3\u30C6\u30F3\u30C4\u30AC\u30A4\u30C9\u30E9\u30A4\u30F3\u306B\u9069\u5408\u3057\u3066\u3044\u307E\u305B\u3093\",\n  \"This message was deleted...\": \"\u3053\u306E\u30E1\u30C3\u30BB\u30FC\u30B8\u306F\u524A\u9664\u3055\u308C\u307E\u3057\u305F...\",\n  \"Thread\": \"\u30B9\u30EC\u30C3\u30C9\",\n  \"To start recording, allow the camera access in your browser\": \"\u9332\u97F3\u3092\u958B\u59CB\u3059\u308B\u306B\u306F\u3001\u30D6\u30E9\u30A6\u30B6\u30FC\u3067\u30AB\u30E1\u30E9\u3078\u306E\u30A2\u30AF\u30BB\u30B9\u3092\u8A31\u53EF\u3057\u3066\u304F\u3060\u3055\u3044\",\n  \"To start recording, allow the microphone access in your browser\": \"\u9332\u97F3\u3092\u958B\u59CB\u3059\u308B\u306B\u306F\u3001\u30D6\u30E9\u30A6\u30B6\u30FC\u3067\u30DE\u30A4\u30AF\u30ED\u30D5\u30A9\u30F3\u3078\u306E\u30A2\u30AF\u30BB\u30B9\u3092\u8A31\u53EF\u3057\u3066\u304F\u3060\u3055\u3044\",\n  \"Type a number from 2 to 10\": \"2\u304B\u308910\u307E\u3067\u306E\u6570\u5B57\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\",\n  \"Type your message\": \"\u30E1\u30C3\u30BB\u30FC\u30B8\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\",\n  \"Unarchive\": \"\u30A2\u30FC\u30AB\u30A4\u30D6\u89E3\u9664\",\n  \"Unmute\": \"\u7121\u97F3\u3092\u89E3\u9664\u3059\u308B\",\n  \"Unpin\": \"\u30D4\u30F3\u3092\u89E3\u9664\u3059\u308B\",\n  \"Unread messages\": \"\u672A\u8AAD\u30E1\u30C3\u30BB\u30FC\u30B8\",\n  \"Unsupported attachment\": \"\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u306A\u3044\u6DFB\u4ED8\u30D5\u30A1\u30A4\u30EB\",\n  \"Update your comment\": \"\u30B3\u30E1\u30F3\u30C8\u3092\u66F4\u65B0\",\n  \"Upload type: \\\"{{ type }}\\\" is not allowed\": \"\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u30BF\u30A4\u30D7\uFF1A\\\"{{ type }}\\\"\u306F\u8A31\u53EF\u3055\u308C\u3066\u3044\u307E\u305B\u3093\",\n  \"User uploaded content\": \"\u30E6\u30FC\u30B6\u30FC\u304C\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u3057\u305F\u30B3\u30F3\u30C6\u30F3\u30C4\",\n  \"View results\": \"\u7D50\u679C\u3092\u8868\u793A\",\n  \"View {{count}} comments_other\": \"{{count}} \u30B3\u30E1\u30F3\u30C8\u3092\u8868\u793A\",\n  \"Voice message\": \"\u30DC\u30A4\u30B9\u30E1\u30C3\u30BB\u30FC\u30B8\",\n  \"Vote ended\": \"\u6295\u7968\u304C\u7D42\u4E86\u3057\u307E\u3057\u305F\",\n  \"Wait until all attachments have uploaded\": \"\u3059\u3079\u3066\u306E\u6DFB\u4ED8\u30D5\u30A1\u30A4\u30EB\u304C\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u3055\u308C\u308B\u307E\u3067\u304A\u5F85\u3061\u304F\u3060\u3055\u3044\",\n  \"You\": \"\u3042\u306A\u305F\",\n  \"You have no channels currently\": \"\u73FE\u5728\u30C1\u30E3\u30F3\u30CD\u30EB\u306F\u3042\u308A\u307E\u305B\u3093\",\n  \"You've reached the maximum number of files\": \"\u30D5\u30A1\u30A4\u30EB\u306E\u6700\u5927\u6570\u306B\u9054\u3057\u307E\u3057\u305F\",\n  \"aria/Attachment\": \"\u6DFB\u4ED8\u30D5\u30A1\u30A4\u30EB\",\n  \"aria/Cancel Reply\": \"\u8FD4\u4FE1\u3092\u30AD\u30E3\u30F3\u30BB\u30EB\",\n  \"aria/Cancel upload\": \"\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u3092\u30AD\u30E3\u30F3\u30BB\u30EB\",\n  \"aria/Channel list\": \"\u30C1\u30E3\u30F3\u30CD\u30EB\u4E00\u89A7\",\n  \"aria/Channel search results\": \"\u30C1\u30E3\u30F3\u30CD\u30EB\u691C\u7D22\u7D50\u679C\",\n  \"aria/Close thread\": \"\u30B9\u30EC\u30C3\u30C9\u3092\u9589\u3058\u308B\",\n  \"aria/Download attachment\": \"\u6DFB\u4ED8\u30D5\u30A1\u30A4\u30EB\u3092\u30C0\u30A6\u30F3\u30ED\u30FC\u30C9\",\n  \"aria/Emoji picker\": \"\u7D75\u6587\u5B57\u30D4\u30C3\u30AB\u30FC\",\n  \"aria/File input\": \"\u30D5\u30A1\u30A4\u30EB\u5165\u529B\",\n  \"aria/File upload\": \"\u30D5\u30A1\u30A4\u30EB\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\",\n  \"aria/Image input\": \"\u753B\u50CF\u5165\u529B\",\n  \"aria/Load More Channels\": \"\u3055\u3089\u306B\u30C1\u30E3\u30F3\u30CD\u30EB\u3092\u8AAD\u307F\u8FBC\u3080\",\n  \"aria/Menu\": \"\u30E1\u30CB\u30E5\u30FC\",\n  \"aria/Message Options\": \"\u30E1\u30C3\u30BB\u30FC\u30B8\u30AA\u30D7\u30B7\u30E7\u30F3\",\n  \"aria/Open Attachment Selector\": \"\u6DFB\u4ED8\u30D5\u30A1\u30A4\u30EB\u9078\u629E\u3092\u958B\u304F\",\n  \"aria/Open Message Actions Menu\": \"\u30E1\u30C3\u30BB\u30FC\u30B8\u30A2\u30AF\u30B7\u30E7\u30F3\u30E1\u30CB\u30E5\u30FC\u3092\u958B\u304F\",\n  \"aria/Open Reaction Selector\": \"\u30EA\u30A2\u30AF\u30B7\u30E7\u30F3\u30BB\u30EC\u30AF\u30BF\u30FC\u3092\u958B\u304F\",\n  \"aria/Open Thread\": \"\u30B9\u30EC\u30C3\u30C9\u3092\u958B\u304F\",\n  \"aria/Reaction list\": \"\u30EA\u30A2\u30AF\u30B7\u30E7\u30F3\u4E00\u89A7\",\n  \"aria/Remove attachment\": \"\u6DFB\u4ED8\u30D5\u30A1\u30A4\u30EB\u3092\u524A\u9664\",\n  \"aria/Retry upload\": \"\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u3092\u518D\u8A66\u884C\",\n  \"aria/Search results\": \"\u691C\u7D22\u7D50\u679C\",\n  \"aria/Search results header filter button\": \"\u691C\u7D22\u7D50\u679C\u30D8\u30C3\u30C0\u30FC\u30D5\u30A3\u30EB\u30BF\u30FC\u30DC\u30BF\u30F3\",\n  \"aria/Send\": \"\u9001\u4FE1\",\n  \"aria/Stop AI Generation\": \"AI\u751F\u6210\u3092\u505C\u6B62\",\n  \"ban-command-args\": \"[@\u30E6\u30FC\u30B6\u540D] [\u30C6\u30AD\u30B9\u30C8]\",\n  \"ban-command-description\": \"\u30E6\u30FC\u30B6\u30FC\u3092\u7981\u6B62\u3059\u308B\",\n  \"giphy-command-args\": \"[\u30C6\u30AD\u30B9\u30C8]\",\n  \"giphy-command-description\": \"\u30C1\u30E3\u30F3\u30CD\u30EB\u306B\u30E9\u30F3\u30C0\u30E0\u306AGIF\u3092\u6295\u7A3F\u3059\u308B\",\n  \"live\": \"\u30E9\u30A4\u30D6\",\n  \"mute-command-args\": \"[@\u30E6\u30FC\u30B6\u540D]\",\n  \"mute-command-description\": \"\u30E6\u30FC\u30B6\u30FC\u3092\u30DF\u30E5\u30FC\u30C8\u3059\u308B\",\n  \"replyCount_one\": \"1\u4EF6\u306E\u8FD4\u4FE1\",\n  \"replyCount_other\": \"{{ count }} \u8FD4\u4FE1\",\n  \"search-results-header-filter-source-button-label--channels\": \"\u30C1\u30E3\u30F3\u30CD\u30EB\",\n  \"search-results-header-filter-source-button-label--messages\": \"\u30E1\u30C3\u30BB\u30FC\u30B8\",\n  \"search-results-header-filter-source-button-label--users\": \"\u30E6\u30FC\u30B6\u30FC\",\n  \"searchResultsCount_one\": \"1\u4EF6\u306E\u7D50\u679C\",\n  \"searchResultsCount_other\": \"{{ count }}\u4EF6\u306E\u7D50\u679C\",\n  \"this content could not be displayed\": \"\u3053\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u306F\u8868\u793A\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\",\n  \"timestamp/DateSeparator\": \"{{ timestamp | timestampFormatter(calendar: true) }}\",\n  \"timestamp/MessageTimestamp\": \"{{ timestamp | timestampFormatter(calendar: true) }}\",\n  \"timestamp/PollVote\": \"{{ timestamp | timestampFormatter(format: MMM D [at] HH:mm) }}\",\n  \"timestamp/PollVoteTooltip\": \"{{ timestamp | timestampFormatter(calendar: true) }}\",\n  \"timestamp/SystemMessage\": \"{{ timestamp | timestampFormatter(format: dddd L) }}\",\n  \"unban-command-args\": \"[@\u30E6\u30FC\u30B6\u540D]\",\n  \"unban-command-description\": \"\u30E6\u30FC\u30B6\u30FC\u306E\u7981\u6B62\u3092\u89E3\u9664\u3059\u308B\",\n  \"unmute-command-args\": \"[@\u30E6\u30FC\u30B6\u540D]\",\n  \"unmute-command-description\": \"\u30E6\u30FC\u30B6\u30FC\u306E\u30DF\u30E5\u30FC\u30C8\u3092\u89E3\u9664\u3059\u308B\",\n  \"unreadMessagesSeparatorText_other\": \"\u672A\u8AAD\u30E1\u30C3\u30BB\u30FC\u30B8 {{count}} \u4EF6\",\n  \"{{ commaSeparatedUsers }} and {{ moreCount }} more\": \"{{ commaSeparatedUsers }} \u3068 {{ moreCount }} \u4ED6\u4EBA\",\n  \"{{ commaSeparatedUsers }}, and {{ lastUser }}\": \"{{ commaSeparatedUsers }} \u3068 {{ lastUser }}\",\n  \"{{ firstUser }} and {{ secondUser }}\": \"{{ firstUser }} \u3068 {{ secondUser }}\",\n  \"{{ imageCount }} more\": \"{{ imageCount }} \u30A4\u30E1\u30FC\u30B8\",\n  \"{{ memberCount }} members\": \"{{ memberCount }} \u30E1\u30F3\u30D0\u30FC\",\n  \"{{ user }} has been muted\": \"{{ user }} \u7121\u97F3\u3055\u308C\u3066\u3044\u307E\u3059\",\n  \"{{ user }} has been unmuted\": \"{{ user }} \u7121\u97F3\u3055\u308C\u3066\u3044\u307E\u305B\u3093\",\n  \"{{ user }} is typing...\": \"{{ user }} \u304C\u5165\u529B\u4E2D...\",\n  \"{{ users }} and more are typing...\": \"{{ users }} \u3068\u305D\u306E\u4ED6\u304C\u5165\u529B\u4E2D...\",\n  \"{{ users }} and {{ user }} are typing...\": \"{{ users }} \u3068 {{ user }} \u304C\u5165\u529B\u4E2D...\",\n  \"{{ watcherCount }} online\": \"{{ watcherCount }} \u30AA\u30F3\u30E9\u30A4\u30F3\",\n  \"{{count}} unread_other\": \"{{count}} \u672A\u8AAD\",\n  \"{{count}} votes_other\": \"{{count}} \u7968\",\n  \"\uD83C\uDFD9 Attachment...\": \"\uD83C\uDFD9 \u30A2\u30BF\u30C3\u30C1\u30E1\u30F3\u30C8...\",\n  \"\uD83D\uDCCA {{createdBy}} created: {{ pollName}}\": \"\uD83D\uDCCA {{createdBy}} \u304C\u4F5C\u6210: {{ pollName}}\",\n  \"\uD83D\uDCCA {{votedBy}} voted: {{pollOptionText}}\": \"\uD83D\uDCCA {{votedBy}} \u304C\u6295\u7968: {{pollOptionText}}\"\n}\n", "{\n  \"Add a comment\": \"\uB313\uAE00 \uCD94\uAC00\",\n  \"Add an option\": \"\uC635\uC158 \uCD94\uAC00\",\n  \"All results loaded\": \"\uBAA8\uB4E0 \uACB0\uACFC\uAC00 \uB85C\uB4DC\uB418\uC5C8\uC2B5\uB2C8\uB2E4\",\n  \"Allow access to camera\": \"\uCE74\uBA54\uB77C\uC5D0 \uB300\uD55C \uC561\uC138\uC2A4 \uD5C8\uC6A9\",\n  \"Allow access to microphone\": \"\uB9C8\uC774\uD06C\uB85C\uD3F0\uC5D0 \uB300\uD55C \uC561\uC138\uC2A4 \uD5C8\uC6A9\",\n  \"Allow comments\": \"\uB313\uAE00 \uD5C8\uC6A9\",\n  \"Allow option suggestion\": \"\uC635\uC158 \uC81C\uC548 \uD5C8\uC6A9\",\n  \"An error has occurred during recording\": \"\uB179\uC74C \uC911 \uC624\uB958\uAC00 \uBC1C\uC0DD\uD588\uC2B5\uB2C8\uB2E4\",\n  \"An error has occurred during the recording processing\": \"\uB179\uC74C \uCC98\uB9AC \uC911 \uC624\uB958\uAC00 \uBC1C\uC0DD\uD588\uC2B5\uB2C8\uB2E4\",\n  \"Anonymous\": \"\uC775\uBA85\",\n  \"Anonymous poll\": \"\uC775\uBA85 \uD22C\uD45C\",\n  \"Archive\": \"\uC544\uCE74\uC774\uBE0C\",\n  \"Ask a question\": \"\uC9C8\uBB38\uD558\uAE30\",\n  \"Attach files\": \"\uD30C\uC77C \uCCA8\uBD80\",\n  \"Cancel\": \"\uCDE8\uC18C\",\n  \"Cannot seek in the recording\": \"\uB179\uC74C\uC5D0\uC11C \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4\",\n  \"Channel Missing\": \"\uCC44\uB110 \uB204\uB77D\",\n  \"Close\": \"\uB2EB\uAE30\",\n  \"Close emoji picker\": \"\uC774\uBAA8\uD2F0\uCF58 \uC120\uD0DD\uAE30 \uB2EB\uAE30\",\n  \"Commands matching\": \"\uC77C\uCE58\uD558\uB294 \uBA85\uB839\",\n  \"Connection failure, reconnecting now...\": \"\uC5F0\uACB0 \uC2E4\uD328, \uC9C0\uAE08 \uB2E4\uC2DC \uC5F0\uACB0 \uC911...\",\n  \"Create\": \"\uC0DD\uC131\",\n  \"Create poll\": \"\uD22C\uD45C \uC0DD\uC131\",\n  \"Delete\": \"\uC0AD\uC81C\",\n  \"Delivered\": \"\uBC30\uB2EC\uB428\",\n  \"Download attachment {{ name }}\": \"\uCCA8\uBD80 \uD30C\uC77C {{ name }} \uB2E4\uC6B4\uB85C\uB4DC\",\n  \"Drag your files here\": \"\uC5EC\uAE30\uB85C \uD30C\uC77C\uC744 \uB04C\uC5B4\uB2E4 \uB193\uC73C\uC138\uC694\",\n  \"Drag your files here to add to your post\": \"\uAC8C\uC2DC\uBB3C\uC5D0 \uCD94\uAC00\uD558\uB824\uBA74 \uD30C\uC77C\uC744 \uC5EC\uAE30\uB85C \uB04C\uC5B4\uB2E4 \uB193\uC73C\uC138\uC694\",\n  \"Edit Message\": \"\uBA54\uC2DC\uC9C0 \uC218\uC815\",\n  \"Edit message request failed\": \"\uBA54\uC2DC\uC9C0 \uC218\uC815 \uC694\uCCAD \uC2E4\uD328\",\n  \"Edited\": \"\uD3B8\uC9D1\uB428\",\n  \"Emoji matching\": \"\uC774\uBAA8\uD2F0\uCF58 \uB9E4\uCE6D\",\n  \"Empty message...\": \"\uBE48 \uBA54\uC2DC\uC9C0...\",\n  \"End\": \"\uC885\uB8CC\",\n  \"End vote\": \"\uD22C\uD45C \uC885\uB8CC\",\n  \"Error adding flag\": \"\uD50C\uB798\uADF8\uB97C \uCD94\uAC00\uD558\uB294 \uB3D9\uC548 \uC624\uB958\uAC00 \uBC1C\uC0DD\uD588\uC2B5\uB2C8\uB2E4.\",\n  \"Error connecting to chat, refresh the page to try again.\": \"\uCC44\uD305\uC5D0 \uC5F0\uACB0\uD558\uB294 \uB3D9\uC548 \uC624\uB958\uAC00 \uBC1C\uC0DD\uD588\uC2B5\uB2C8\uB2E4. \uD398\uC774\uC9C0\uB97C \uC0C8\uB85C\uACE0\uCE68\uD558\uC5EC \uB2E4\uC2DC \uC2DC\uB3C4\uD558\uC138\uC694.\",\n  \"Error deleting message\": \"\uBA54\uC2DC\uC9C0\uB97C \uC0AD\uC81C\uD558\uB294 \uC911\uC5D0 \uC624\uB958\uAC00 \uBC1C\uC0DD\uD588\uC2B5\uB2C8\uB2E4.\",\n  \"Error fetching reactions\": \"\uBC18\uC751 \uB85C\uB529 \uC624\uB958.\",\n  \"Error marking message unread. Cannot mark unread messages older than the newest 100 channel messages.\": \"\uBA54\uC2DC\uC9C0\uB97C \uC77D\uC9C0 \uC54A\uC74C\uC73C\uB85C \uD45C\uC2DC\uD558\uB294 \uC911 \uC624\uB958\uAC00 \uBC1C\uC0DD\uD588\uC2B5\uB2C8\uB2E4. \uAC00\uC7A5 \uCD5C\uADFC 100\uAC1C\uC758 \uCC44\uB110 \uBA54\uC2DC\uC9C0\uBCF4\uB2E4 \uC624\uB798\uB41C \uC77D\uC9C0 \uC54A\uC740 \uBA54\uC2DC\uC9C0\uB294 \uD45C\uC2DC\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.\",\n  \"Error muting a user ...\": \"\uC0AC\uC6A9\uC790\uB97C \uC74C\uC18C\uAC70\uD558\uB294 \uC911\uC5D0 \uC624\uB958\uAC00 \uBC1C\uC0DD\uD588\uC2B5\uB2C8\uB2E4...\",\n  \"Error pinning message\": \"\uBA54\uC2DC\uC9C0\uB97C \uD540\uD558\uB294 \uC911\uC5D0 \uC624\uB958\uAC00 \uBC1C\uC0DD\uD588\uC2B5\uB2C8\uB2E4.\",\n  \"Error removing message pin\": \"\uBA54\uC2DC\uC9C0 \uD540\uC744 \uC81C\uAC70\uD558\uB294 \uC911\uC5D0 \uC624\uB958\uAC00 \uBC1C\uC0DD\uD588\uC2B5\uB2C8\uB2E4.\",\n  \"Error reproducing the recording\": \"\uB179\uC74C \uC7AC\uC0DD \uC911 \uC624\uB958 \uBC1C\uC0DD\",\n  \"Error starting recording\": \"\uB179\uC74C \uC2DC\uC791 \uC911 \uC624\uB958\uAC00 \uBC1C\uC0DD\uD588\uC2B5\uB2C8\uB2E4\",\n  \"Error unmuting a user ...\": \"\uC0AC\uC6A9\uC790 \uC74C\uC18C\uAC70 \uD574\uC81C \uC911 \uC624\uB958 \uBC1C\uC0DD...\",\n  \"Error uploading attachment\": \"\uCCA8\uBD80 \uD30C\uC77C \uC5C5\uB85C\uB4DC \uC911 \uC624\uB958\uAC00 \uBC1C\uC0DD\uD588\uC2B5\uB2C8\uB2E4\",\n  \"Error uploading file\": \"\uD30C\uC77C \uC5C5\uB85C\uB4DC \uC624\uB958\",\n  \"Error uploading image\": \"\uC774\uBBF8\uC9C0\uB97C \uC5C5\uB85C\uB4DC\uD558\uB294 \uB3D9\uC548 \uC624\uB958\uAC00 \uBC1C\uC0DD\uD588\uC2B5\uB2C8\uB2E4.\",\n  \"Error \u00B7 Unsent\": \"\uC624\uB958 \u00B7 \uC804\uC1A1\uB418\uC9C0 \uC54A\uC74C\",\n  \"Error: {{ errorMessage }}\": \"\uC624\uB958: {{ errorMessage }}\",\n  \"Failed to jump to the first unread message\": \"\uCCAB \uBC88\uC9F8 \uC77D\uC9C0 \uC54A\uC740 \uBA54\uC2DC\uC9C0\uB85C \uC774\uB3D9\uD558\uC9C0 \uBABB\uD588\uC2B5\uB2C8\uB2E4\",\n  \"Failed to mark channel as read\": \"\uCC44\uB110\uC744 \uC77D\uC74C\uC73C\uB85C \uD45C\uC2DC\uD558\uB294 \uB370 \uC2E4\uD328\uD588\uC2B5\uB2C8\uB2E4\",\n  \"Failed to play the recording\": \"\uB179\uC74C\uC744 \uC7AC\uC0DD\uD558\uC9C0 \uBABB\uD588\uC2B5\uB2C8\uB2E4\",\n  \"File\": \"\uD30C\uC77C\",\n  \"File is too large: {{ size }}, maximum upload size is {{ limit }}\": \"\uD30C\uC77C\uC774 \uB108\uBB34 \uD07D\uB2C8\uB2E4: {{ size }}, \uCD5C\uB300 \uC5C5\uB85C\uB4DC \uD06C\uAE30\uB294 {{ limit }}\uC785\uB2C8\uB2E4\",\n  \"Flag\": \"\uD50C\uB798\uADF8\",\n  \"Generating...\": \"\uC0DD\uC131 \uC911...\",\n  \"Latest Messages\": \"\uCD5C\uC2E0 \uBA54\uC2DC\uC9C0\",\n  \"Load more\": \"\uB354 \uBD88\uB7EC\uC624\uAE30\",\n  \"Mark as unread\": \"\uC77D\uC9C0 \uC54A\uC74C\uC73C\uB85C \uD45C\uC2DC\",\n  \"Maximum number of votes (from 2 to 10)\": \"\uCD5C\uB300 \uD22C\uD45C \uC218 (2\uC5D0\uC11C 10\uAE4C\uC9C0)\",\n  \"Menu\": \"\uBA54\uB274\",\n  \"Message Failed \u00B7 Click to try again\": \"\uBA54\uC2DC\uC9C0 \uC2E4\uD328 \u00B7 \uB2E4\uC2DC \uC2DC\uB3C4\uD558\uB824\uBA74 \uD074\uB9AD\uD558\uC138\uC694.\",\n  \"Message Failed \u00B7 Unauthorized\": \"\uBA54\uC2DC\uC9C0 \uC2E4\uD328 \u00B7 \uC2B9\uC778\uB418\uC9C0 \uC54A\uC74C\",\n  \"Message deleted\": \"\uBA54\uC2DC\uC9C0\uAC00 \uC0AD\uC81C\uB418\uC5C8\uC2B5\uB2C8\uB2E4.\",\n  \"Message has been successfully flagged\": \"\uBA54\uC2DC\uC9C0\uC5D0 \uD50C\uB798\uADF8\uAC00 \uC9C0\uC815\uB418\uC5C8\uC2B5\uB2C8\uB2E4.\",\n  \"Message pinned\": \"\uBA54\uC2DC\uC9C0 \uD540\uD588\uC2B5\uB2C8\uB2E4\",\n  \"Message was blocked by moderation policies\": \"\uBA54\uC2DC\uC9C0\uAC00 \uAD00\uB9AC \uC815\uCC45\uC5D0 \uC758\uD574 \uCC28\uB2E8\uB418\uC5C8\uC2B5\uB2C8\uB2E4.\",\n  \"Messages have been marked unread.\": \"\uBA54\uC2DC\uC9C0\uAC00 \uC77D\uC9C0 \uC54A\uC74C\uC73C\uB85C \uD45C\uC2DC\uB418\uC5C8\uC2B5\uB2C8\uB2E4.\",\n  \"Missing permissions to upload the attachment\": \"\uCCA8\uBD80 \uD30C\uC77C\uC744 \uC5C5\uB85C\uB4DC\uD558\uB824\uBA74 \uAD8C\uD55C\uC774 \uD544\uC694\uD569\uB2C8\uB2E4\",\n  \"Multiple answers\": \"\uBCF5\uC218 \uC751\uB2F5\",\n  \"Mute\": \"\uBB34\uC74C\",\n  \"New\": \"\uC0C8\uB85C\uC6B4\",\n  \"New Messages!\": \"\uC0C8 \uBA54\uC2DC\uC9C0!\",\n  \"No chats here yet\u2026\": \"\uC544\uC9C1 \uCC44\uD305\uC774 \uC5C6\uC2B5\uB2C8\uB2E4...\",\n  \"No results found\": \"\uAC80\uC0C9 \uACB0\uACFC\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4\",\n  \"Nobody will be able to vote in this poll anymore.\": \"\uC774 \uD22C\uD45C\uC5D0 \uB354 \uC774\uC0C1 \uC544\uBB34\uB3C4 \uD22C\uD45C\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.\",\n  \"Nothing yet...\": \"\uC544\uC9C1 \uC544\uBB34\uAC83\uB3C4...\",\n  \"Ok\": \"\uD655\uC778\",\n  \"Open emoji picker\": \"\uC774\uBAA8\uD2F0\uCF58 \uC120\uD0DD\uAE30 \uC5F4\uAE30\",\n  \"Option already exists\": \"\uC635\uC158\uC774 \uC774\uBBF8 \uC874\uC7AC\uD569\uB2C8\uB2E4\",\n  \"Options\": \"\uC635\uC158\",\n  \"People matching\": \"\uC77C\uCE58\uD558\uB294 \uC0AC\uB78C\",\n  \"Pin\": \"\uD540\",\n  \"Pinned by\": \"\uD540\uD588\uB358 \uBD84:\",\n  \"Poll\": \"\uD22C\uD45C\",\n  \"Poll comments\": \"\uD22C\uD45C \uB313\uAE00\",\n  \"Poll options\": \"\uD22C\uD45C \uC635\uC158\",\n  \"Poll results\": \"\uD22C\uD45C \uACB0\uACFC\",\n  \"Question\": \"\uC9C8\uBB38\",\n  \"Quote\": \"\uC778\uC6A9\",\n  \"Recording format is not supported and cannot be reproduced\": \"\uB179\uC74C \uD615\uC2DD\uC774 \uC9C0\uC6D0\uB418\uC9C0 \uC54A\uC73C\uBBC0\uB85C \uC7AC\uC0DD\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4\",\n  \"Reply\": \"\uB2F5\uC7A5\",\n  \"Reply to Message\": \"\uBA54\uC2DC\uC9C0\uC5D0 \uB2F5\uC7A5\",\n  \"Search\": \"\uCC3E\uB2E4\",\n  \"Searching...\": \"\uC218\uC0C9...\",\n  \"See all options ({{count}})_other\": \"\uBAA8\uB4E0 \uC635\uC158 \uBCF4\uAE30 ({{count}})\",\n  \"Select one\": \"\uD558\uB098 \uC120\uD0DD\",\n  \"Select one or more\": \"\uD558\uB098 \uC774\uC0C1 \uC120\uD0DD\",\n  \"Select up to {{count}}_other\": \"{{count}}\uAC1C\uAE4C\uC9C0 \uC120\uD0DD\",\n  \"Send\": \"\uBCF4\uB0B4\uB2E4\",\n  \"Send Anyway\": \"\uC5B4\uCA0C\uB4E0 \uBCF4\uB0B4\uAE30\",\n  \"Send message request failed\": \"\uBA54\uC2DC\uC9C0 \uBCF4\uB0B4\uAE30 \uC694\uCCAD \uC2E4\uD328\",\n  \"Sending...\": \"\uBC30\uC0C1\uC911...\",\n  \"Show all\": \"\uBAA8\uB450 \uBCF4\uAE30\",\n  \"Shuffle\": \"\uC154\uD50C\",\n  \"Slow Mode ON\": \"\uC2AC\uB85C\uC6B0 \uBAA8\uB4DC \uCF1C\uC9D0\",\n  \"Some of the files will not be accepted\": \"\uC77C\uBD80 \uD30C\uC77C\uC740 \uD5C8\uC6A9\uB418\uC9C0 \uC54A\uC744 \uC218 \uC788\uC2B5\uB2C8\uB2E4\",\n  \"Start typing to search\": \"\uAC80\uC0C9\uD558\uB824\uBA74 \uC785\uB825\uC744 \uC2DC\uC791\uD558\uC138\uC694\",\n  \"Submit\": \"\uC81C\uCD9C\",\n  \"Suggest an option\": \"\uC635\uC158 \uC81C\uC548\",\n  \"Thinking...\": \"\uC0DD\uAC01 \uC911...\",\n  \"This message did not meet our content guidelines\": \"\uC774 \uBA54\uC2DC\uC9C0\uB294 \uCF58\uD150\uCE20 \uAC00\uC774\uB4DC\uB77C\uC778\uC744 \uCDA9\uC871\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.\",\n  \"This message was deleted...\": \"\uC774 \uBA54\uC2DC\uC9C0\uB294 \uC0AD\uC81C\uB418\uC5C8\uC2B5\uB2C8\uB2E4...\",\n  \"Thread\": \"\uC2A4\uB808\uB4DC\",\n  \"To start recording, allow the camera access in your browser\": \"\uBE0C\uB77C\uC6B0\uC800\uC5D0\uC11C \uCE74\uBA54\uB77C \uC561\uC138\uC2A4\uB97C \uD5C8\uC6A9\uD558\uC5EC \uB179\uC74C\uC744 \uC2DC\uC791\uD569\uB2C8\uB2E4\",\n  \"To start recording, allow the microphone access in your browser\": \"\uBE0C\uB77C\uC6B0\uC800\uC5D0\uC11C \uB9C8\uC774\uD06C\uB85C\uD3F0 \uC561\uC138\uC2A4\uB97C \uD5C8\uC6A9\uD558\uC5EC \uB179\uC74C\uC744 \uC2DC\uC791\uD569\uB2C8\uB2E4\",\n  \"Type a number from 2 to 10\": \"2\uC5D0\uC11C 10 \uC0AC\uC774\uC758 \uC22B\uC790\uB97C \uC785\uB825\uD558\uC138\uC694\",\n  \"Type your message\": \"\uBA54\uC2DC\uC9C0 \uC785\uB825\",\n  \"Unarchive\": \"\uC544\uCE74\uC774\uBE0C \uD574\uC81C\",\n  \"Unmute\": \"\uC74C\uC18C\uAC70 \uD574\uC81C\",\n  \"Unpin\": \"\uD540 \uD574\uC81C\",\n  \"Unread messages\": \"\uC77D\uC9C0 \uC54A\uC740 \uBA54\uC2DC\uC9C0\",\n  \"Unsupported attachment\": \"\uC9C0\uC6D0\uB418\uC9C0 \uC54A\uB294 \uCCA8\uBD80 \uD30C\uC77C\",\n  \"Update your comment\": \"\uB313\uAE00 \uC5C5\uB370\uC774\uD2B8\",\n  \"Upload type: \\\"{{ type }}\\\" is not allowed\": \"\uC5C5\uB85C\uB4DC \uC720\uD615: \\\"{{ type }}\\\"\uC740(\uB294) \uD5C8\uC6A9\uB418\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.\",\n  \"User uploaded content\": \"\uC0AC\uC6A9\uC790 \uC5C5\uB85C\uB4DC \uCF58\uD150\uCE20\",\n  \"View results\": \"\uACB0\uACFC \uBCF4\uAE30\",\n  \"View {{count}} comments_other\": \"{{count}}\uAC1C\uC758 \uB313\uAE00 \uBCF4\uAE30\",\n  \"Voice message\": \"\uC74C\uC131 \uBA54\uC2DC\uC9C0\",\n  \"Vote ended\": \"\uD22C\uD45C \uC885\uB8CC\",\n  \"Wait until all attachments have uploaded\": \"\uBAA8\uB4E0 \uCCA8\uBD80 \uD30C\uC77C\uC774 \uC5C5\uB85C\uB4DC\uB420 \uB54C\uAE4C\uC9C0 \uAE30\uB2E4\uB9BD\uB2C8\uB2E4.\",\n  \"You\": \"\uB2F9\uC2E0\",\n  \"You have no channels currently\": \"\uD604\uC7AC \uCC44\uB110\uC774 \uC5C6\uC2B5\uB2C8\uB2E4.\",\n  \"You've reached the maximum number of files\": \"\uCD5C\uB300 \uD30C\uC77C \uC218\uC5D0 \uB3C4\uB2EC\uD588\uC2B5\uB2C8\uB2E4.\",\n  \"aria/Attachment\": \"\uCCA8\uBD80 \uD30C\uC77C\",\n  \"aria/Cancel Reply\": \"\uB2F5\uC7A5 \uCDE8\uC18C\",\n  \"aria/Cancel upload\": \"\uC5C5\uB85C\uB4DC \uCDE8\uC18C\",\n  \"aria/Channel list\": \"\uCC44\uB110 \uBAA9\uB85D\",\n  \"aria/Channel search results\": \"\uCC44\uB110 \uAC80\uC0C9 \uACB0\uACFC\",\n  \"aria/Close thread\": \"\uC2A4\uB808\uB4DC \uB2EB\uAE30\",\n  \"aria/Download attachment\": \"\uCCA8\uBD80 \uD30C\uC77C \uB2E4\uC6B4\uB85C\uB4DC\",\n  \"aria/Emoji picker\": \"\uC774\uBAA8\uC9C0 \uC120\uD0DD\uAE30\",\n  \"aria/File input\": \"\uD30C\uC77C \uC785\uB825\",\n  \"aria/File upload\": \"\uD30C\uC77C \uC5C5\uB85C\uB4DC\",\n  \"aria/Image input\": \"\uC774\uBBF8\uC9C0 \uC785\uB825\",\n  \"aria/Load More Channels\": \"\uB354 \uB9CE\uC740 \uCC44\uB110 \uBD88\uB7EC\uC624\uAE30\",\n  \"aria/Menu\": \"\uBA54\uB274\",\n  \"aria/Message Options\": \"\uBA54\uC2DC\uC9C0 \uC635\uC158\",\n  \"aria/Open Attachment Selector\": \"\uCCA8\uBD80 \uD30C\uC77C \uC120\uD0DD\uAE30 \uC5F4\uAE30\",\n  \"aria/Open Message Actions Menu\": \"\uBA54\uC2DC\uC9C0 \uC561\uC158 \uBA54\uB274 \uC5F4\uAE30\",\n  \"aria/Open Reaction Selector\": \"\uBC18\uC751 \uC120\uD0DD\uAE30 \uC5F4\uAE30\",\n  \"aria/Open Thread\": \"\uC2A4\uB808\uB4DC \uC5F4\uAE30\",\n  \"aria/Reaction list\": \"\uBC18\uC751 \uBAA9\uB85D\",\n  \"aria/Remove attachment\": \"\uCCA8\uBD80 \uD30C\uC77C \uC81C\uAC70\",\n  \"aria/Retry upload\": \"\uC5C5\uB85C\uB4DC \uB2E4\uC2DC \uC2DC\uB3C4\",\n  \"aria/Search results\": \"\uAC80\uC0C9 \uACB0\uACFC\",\n  \"aria/Search results header filter button\": \"\uAC80\uC0C9 \uACB0\uACFC \uD5E4\uB354 \uD544\uD130 \uBC84\uD2BC\",\n  \"aria/Send\": \"\uBCF4\uB0B4\uAE30\",\n  \"aria/Stop AI Generation\": \"AI \uC0DD\uC131 \uC911\uC9C0\",\n  \"ban-command-args\": \"[@\uC0AC\uC6A9\uC790\uC774\uB984] [\uD14D\uC2A4\uD2B8]\",\n  \"ban-command-description\": \"\uC0AC\uC6A9\uC790\uB97C \uCC28\uB2E8\",\n  \"giphy-command-args\": \"[\uD14D\uC2A4\uD2B8]\",\n  \"giphy-command-description\": \"\uCC44\uB110\uC5D0 \uBB34\uC791\uC704 GIF \uAC8C\uC2DC\",\n  \"live\": \"\uB77C\uC774\uBE0C\",\n  \"mute-command-args\": \"[@\uC0AC\uC6A9\uC790\uC774\uB984]\",\n  \"mute-command-description\": \"\uC0AC\uC6A9\uC790 \uC74C\uC18C\uAC70\",\n  \"replyCount_one\": \"\uB2F5\uC7A5 1\uAC1C\",\n  \"replyCount_other\": \"{{ count }} \uB2F5\uC7A5\",\n  \"search-results-header-filter-source-button-label--channels\": \"\uCC44\uB110\",\n  \"search-results-header-filter-source-button-label--messages\": \"\uBA54\uC2DC\uC9C0\",\n  \"search-results-header-filter-source-button-label--users\": \"\uC0AC\uC6A9\uC790\",\n  \"searchResultsCount_one\": \"1\uAC1C\uC758 \uACB0\uACFC\",\n  \"searchResultsCount_other\": \"{{ count }}\uAC1C \uACB0\uACFC\",\n  \"this content could not be displayed\": \"\uC774 \uCF58\uD150\uCE20\uB97C \uD45C\uC2DC\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4\",\n  \"timestamp/DateSeparator\": \"{{ timestamp | timestampFormatter(calendar: true) }}\",\n  \"timestamp/MessageTimestamp\": \"{{ timestamp | timestampFormatter(calendar: true) }}\",\n  \"timestamp/PollVote\": \"{{ timestamp | timestampFormatter(format: MMM D [at] HH:mm) }}\",\n  \"timestamp/PollVoteTooltip\": \"{{ timestamp | timestampFormatter(calendar: true) }}\",\n  \"timestamp/SystemMessage\": \"{{ timestamp | timestampFormatter(format: dddd L) }}\",\n  \"unban-command-args\": \"[@\uC0AC\uC6A9\uC790\uC774\uB984]\",\n  \"unban-command-description\": \"\uC0AC\uC6A9\uC790 \uCC28\uB2E8 \uD574\uC81C\",\n  \"unmute-command-args\": \"[@\uC0AC\uC6A9\uC790\uC774\uB984]\",\n  \"unmute-command-description\": \"\uC0AC\uC6A9\uC790 \uC74C\uC18C\uAC70 \uD574\uC81C\",\n  \"unreadMessagesSeparatorText_other\": \"\uC77D\uC9C0 \uC54A\uC740 \uBA54\uC2DC\uC9C0 {{count}}\uAC1C\",\n  \"{{ commaSeparatedUsers }} and {{ moreCount }} more\": \"{{ commaSeparatedUsers }} \uADF8\uB9AC\uACE0 {{ moreCount }}\uBA85 \uB354\",\n  \"{{ commaSeparatedUsers }}, and {{ lastUser }}\": \"{{ commaSeparatedUsers }} \uADF8\uB9AC\uACE0 {{ lastUser }}\",\n  \"{{ firstUser }} and {{ secondUser }}\": \"{{ firstUser }} \uADF8\uB9AC\uACE0 {{ secondUser }}\",\n  \"{{ imageCount }} more\": \"{{ imageCount }}\uAC1C \uB354\",\n  \"{{ memberCount }} members\": \"{{ memberCount }}\uBA85\",\n  \"{{ user }} has been muted\": \"{{ user }} \uC74C\uC18C\uAC70\uB418\uC5C8\uC2B5\uB2C8\uB2E4\",\n  \"{{ user }} has been unmuted\": \"{{ user }} \uC74C\uC18C\uAC70\uAC00 \uD574\uC81C\uB418\uC5C8\uC2B5\uB2C8\uB2E4\",\n  \"{{ user }} is typing...\": \"{{ user }}\uC774(\uAC00) \uC785\uB825 \uC911\uC785\uB2C8\uB2E4...\",\n  \"{{ users }} and more are typing...\": \"{{ users }}\uC640(\uACFC) \uB354 \uB9CE\uC740 \uC0AC\uB78C\uB4E4\uC774 \uC785\uB825 \uC911\uC785\uB2C8\uB2E4...\",\n  \"{{ users }} and {{ user }} are typing...\": \"{{ users }}\uC640(\uACFC) {{ user }}\uC774(\uAC00) \uC785\uB825 \uC911\uC785\uB2C8\uB2E4...\",\n  \"{{ watcherCount }} online\": \"{{ watcherCount }} \uC628\uB77C\uC778\",\n  \"{{count}} unread_other\": \"{{count}} \uC77D\uC9C0 \uC54A\uC74C\",\n  \"{{count}} votes_other\": \"{{count}} \uD22C\uD45C\",\n  \"\uD83C\uDFD9 Attachment...\": \"\uD83C\uDFD9 \uBD80\uCC29...\",\n  \"\uD83D\uDCCA {{createdBy}} created: {{ pollName}}\": \"\uD83D\uDCCA {{createdBy}}\uC774(\uAC00) \uC0DD\uC131\uD568: {{ pollName}}\",\n  \"\uD83D\uDCCA {{votedBy}} voted: {{pollOptionText}}\": \"\uD83D\uDCCA {{votedBy}}\uC774(\uAC00) \uD22C\uD45C\uD568: {{pollOptionText}}\"\n}\n", "{\n  \"Add a comment\": \"Voeg een opmerking toe\",\n  \"Add an option\": \"Voeg een optie toe\",\n  \"All results loaded\": \"Alle resultaten geladen\",\n  \"Allow access to camera\": \"Toegang tot camera toestaan\",\n  \"Allow access to microphone\": \"Toegang tot microfoon toestaan\",\n  \"Allow comments\": \"Sta opmerkingen toe\",\n  \"Allow option suggestion\": \"Sta optie-suggesties toe\",\n  \"An error has occurred during recording\": \"Er is een fout opgetreden tijdens het opnemen\",\n  \"An error has occurred during the recording processing\": \"Er is een fout opgetreden tijdens de verwerking van de opname\",\n  \"Anonymous\": \"Anoniem\",\n  \"Anonymous poll\": \"Anonieme peiling\",\n  \"Archive\": \"Archief\",\n  \"Ask a question\": \"Stel een vraag\",\n  \"Attach files\": \"Bijlage toevoegen\",\n  \"Cancel\": \"Annuleer\",\n  \"Cannot seek in the recording\": \"Kan niet zoeken in de opname\",\n  \"Channel Missing\": \"Kanaal niet gevonden\",\n  \"Close\": \"Sluit\",\n  \"Close emoji picker\": \"Sluit de emoji-kiezer\",\n  \"Commands matching\": \"Bijpassende opdrachten\",\n  \"Connection failure, reconnecting now...\": \"Verbindingsfout, opnieuw verbinden...\",\n  \"Create\": \"Maak\",\n  \"Create poll\": \"Maak peiling\",\n  \"Delete\": \"Verwijder\",\n  \"Delivered\": \"Afgeleverd\",\n  \"Download attachment {{ name }}\": \"Bijlage {{ name }} downloaden\",\n  \"Drag your files here\": \"Sleep je bestanden hier naartoe\",\n  \"Drag your files here to add to your post\": \"Sleep je bestanden hier naartoe om aan je bericht toe te voegen\",\n  \"Edit Message\": \"Bericht bewerken\",\n  \"Edit message request failed\": \"Verzoek om bericht bewerken mislukt\",\n  \"Edited\": \"Bewerkt\",\n  \"Emoji matching\": \"Emoji-overeenkomsten\",\n  \"Empty message...\": \"Leeg bericht...\",\n  \"End\": \"Einde\",\n  \"End vote\": \"Einde stem\",\n  \"Error adding flag\": \"Fout bij toevoegen van vlag\",\n  \"Error connecting to chat, refresh the page to try again.\": \"Fout bij het verbinden, ververs de pagina om nogmaals te proberen\",\n  \"Error deleting message\": \"Fout bij verwijderen van bericht\",\n  \"Error fetching reactions\": \"Fout bij het laden van reacties\",\n  \"Error marking message unread. Cannot mark unread messages older than the newest 100 channel messages.\": \"Fout bij markeren van bericht als ongelezen. Kan geen oudere ongelezen berichten markeren dan de nieuwste 100 kanaalberichten.\",\n  \"Error muting a user ...\": \"Fout bij het muten van de gebruiker\",\n  \"Error pinning message\": \"Fout bij vastzetten van bericht\",\n  \"Error removing message pin\": \"Fout bij verwijderen van berichtpin\",\n  \"Error reproducing the recording\": \"Fout bij het afspelen van de opname\",\n  \"Error starting recording\": \"Fout bij het starten van de opname\",\n  \"Error unmuting a user ...\": \"Fout bij het unmuten van de gebruiker\",\n  \"Error uploading attachment\": \"Fout bij het uploaden van de bijlage\",\n  \"Error uploading file\": \"Fout bij uploaden bestand\",\n  \"Error uploading image\": \"Fout bij uploaden afbeelding\",\n  \"Error \u00B7 Unsent\": \"Fout \u00B7 niet verzonden\",\n  \"Error: {{ errorMessage }}\": \"Fout: {{ errorMessage }}\",\n  \"Failed to jump to the first unread message\": \"Niet gelukt om naar het eerste ongelezen bericht te springen\",\n  \"Failed to mark channel as read\": \"Kanaal kon niet als gelezen worden gemarkeerd\",\n  \"Failed to play the recording\": \"Kan de opname niet afspelen\",\n  \"File\": \"Bestand\",\n  \"File is too large: {{ size }}, maximum upload size is {{ limit }}\": \"Bestand is te groot: {{ size }}, maximale uploadgrootte is {{ limit }}\",\n  \"Flag\": \"Markeer\",\n  \"Generating...\": \"Genereren...\",\n  \"Latest Messages\": \"Laatste berichten\",\n  \"Load more\": \"Meer laden\",\n  \"Mark as unread\": \"Markeren als ongelezen\",\n  \"Maximum number of votes (from 2 to 10)\": \"Maximaal aantal stemmen (van 2 tot 10)\",\n  \"Menu\": \"Menu\",\n  \"Message Failed \u00B7 Click to try again\": \"Bericht mislukt, klik om het nogmaals te proberen\",\n  \"Message Failed \u00B7 Unauthorized\": \"Bericht mislukt, ongeautoriseerd\",\n  \"Message deleted\": \"Bericht verwijderd\",\n  \"Message has been successfully flagged\": \"Bericht is succesvol gemarkeerd\",\n  \"Message pinned\": \"Bericht vastgezet\",\n  \"Message was blocked by moderation policies\": \"Bericht is geblokkeerd door moderatiebeleid\",\n  \"Messages have been marked unread.\": \"Berichten zijn gemarkeerd als ongelezen.\",\n  \"Missing permissions to upload the attachment\": \"Missende toestemmingen om de bijlage te uploaden\",\n  \"Multiple answers\": \"Meerdere antwoorden\",\n  \"Mute\": \"Dempen\",\n  \"New\": \"Nieuwe\",\n  \"New Messages!\": \"Nieuwe Berichten!\",\n  \"No chats here yet\u2026\": \"Nog geen chats hier...\",\n  \"No results found\": \"Geen resultaten gevonden\",\n  \"Nobody will be able to vote in this poll anymore.\": \"Niemand kan meer stemmen in deze peiling.\",\n  \"Nothing yet...\": \"Nog niets ...\",\n  \"Ok\": \"Ok\u00E9\",\n  \"Open emoji picker\": \"Open emojipicker\",\n  \"Option already exists\": \"Optie bestaat al\",\n  \"Options\": \"Opties\",\n  \"People matching\": \"Mensen die matchen\",\n  \"Pin\": \"Pin\",\n  \"Pinned by\": \"Vastgemaakt door\",\n  \"Poll\": \"Peiling\",\n  \"Poll comments\": \"Peiling opmerkingen\",\n  \"Poll options\": \"Peiling opties\",\n  \"Poll results\": \"Peiling resultaten\",\n  \"Question\": \"Vraag\",\n  \"Quote\": \"Citeer\",\n  \"Recording format is not supported and cannot be reproduced\": \"Opnameformaat wordt niet ondersteund en kan niet worden gereproduceerd\",\n  \"Reply\": \"Antwoord\",\n  \"Reply to Message\": \"Antwoord op bericht\",\n  \"Search\": \"Zoeken\",\n  \"Searching...\": \"Zoeken...\",\n  \"See all options ({{count}})_one\": \"Bekijk alle opties ({{count}})\",\n  \"See all options ({{count}})_other\": \"Bekijk alle opties ({{count}})\",\n  \"Select one\": \"Selecteer er een\",\n  \"Select one or more\": \"Selecteer een of meer\",\n  \"Select up to {{count}}_one\": \"Selecteer tot {{count}}\",\n  \"Select up to {{count}}_other\": \"Selecteer tot {{count}}\",\n  \"Send\": \"Verstuur\",\n  \"Send Anyway\": \"Toch versturen\",\n  \"Send message request failed\": \"Verzoek om bericht te verzenden mislukt\",\n  \"Sending...\": \"Aan het verzenden...\",\n  \"Show all\": \"Toon alles\",\n  \"Shuffle\": \"Schudden\",\n  \"Slow Mode ON\": \"Langzame modus aan\",\n  \"Some of the files will not be accepted\": \"Sommige bestanden zullen niet worden geaccepteerd\",\n  \"Start typing to search\": \"Begin met typen om te zoeken\",\n  \"Submit\": \"Versturen\",\n  \"Suggest an option\": \"Stel een optie voor\",\n  \"Thinking...\": \"Denken...\",\n  \"This message did not meet our content guidelines\": \"Dit bericht voldeed niet aan onze inhoudsrichtlijnen\",\n  \"This message was deleted...\": \"Dit bericht was verwijderd\",\n  \"Thread\": \"Draadje\",\n  \"To start recording, allow the camera access in your browser\": \"Om te beginnen met opnemen, sta toegang tot de camera toe in uw browser\",\n  \"To start recording, allow the microphone access in your browser\": \"Om te beginnen met opnemen, sta toegang tot de microfoon toe in uw browser\",\n  \"Type a number from 2 to 10\": \"Typ een getal van 2 tot 10\",\n  \"Type your message\": \"Type je bericht\",\n  \"Unarchive\": \"Uit archief halen\",\n  \"Unmute\": \"Dempen opheffen\",\n  \"Unpin\": \"Losmaken\",\n  \"Unread messages\": \"Ongelezen berichten\",\n  \"Unsupported attachment\": \"Niet-ondersteunde bijlage\",\n  \"Update your comment\": \"Werk je opmerking bij\",\n  \"Upload type: \\\"{{ type }}\\\" is not allowed\": \"Uploadtype: \\\"{{ type }}\\\" is niet toegestaan\",\n  \"User uploaded content\": \"Gebruikersge\u00FCploade inhoud\",\n  \"View results\": \"Bekijk resultaten\",\n  \"View {{count}} comments_one\": \"Bekijk {{count}} opmerkingen\",\n  \"View {{count}} comments_other\": \"Bekijk {{count}} opmerkingen\",\n  \"Voice message\": \"Spraakbericht\",\n  \"Vote ended\": \"Stemmen be\u00EBindigd\",\n  \"Wait until all attachments have uploaded\": \"Wacht tot alle bijlagen zijn ge\u00FCpload\",\n  \"You\": \"Jij\",\n  \"You have no channels currently\": \"Er zijn geen chats beschikbaar\",\n  \"You've reached the maximum number of files\": \"Je hebt het maximale aantal bestanden bereikt\",\n  \"aria/Attachment\": \"Bijlage\",\n  \"aria/Cancel Reply\": \"Antwoord annuleren\",\n  \"aria/Cancel upload\": \"Upload annuleren\",\n  \"aria/Channel list\": \"Kanaallijst\",\n  \"aria/Channel search results\": \"Zoekresultaten voor kanalen\",\n  \"aria/Close thread\": \"Draad sluiten\",\n  \"aria/Download attachment\": \"Bijlage downloaden\",\n  \"aria/Emoji picker\": \"Emoji kiezer\",\n  \"aria/File input\": \"Bestandsinvoer\",\n  \"aria/File upload\": \"Bestand uploaden\",\n  \"aria/Image input\": \"Afbeelding invoeren\",\n  \"aria/Load More Channels\": \"Meer kanalen laden\",\n  \"aria/Menu\": \"Menu\",\n  \"aria/Message Options\": \"Berichtopties\",\n  \"aria/Open Attachment Selector\": \"Open bijlage selector\",\n  \"aria/Open Message Actions Menu\": \"Menu voor berichtacties openen\",\n  \"aria/Open Reaction Selector\": \"Reactiekiezer openen\",\n  \"aria/Open Thread\": \"Draad openen\",\n  \"aria/Reaction list\": \"Reactielijst\",\n  \"aria/Remove attachment\": \"Bijlage verwijderen\",\n  \"aria/Retry upload\": \"Upload opnieuw proberen\",\n  \"aria/Search results\": \"Zoekresultaten\",\n  \"aria/Search results header filter button\": \"Zoekresultaten header filter knop\",\n  \"aria/Send\": \"Verzenden\",\n  \"aria/Stop AI Generation\": \"AI-generatie stoppen\",\n  \"ban-command-args\": \"[@gebruikersnaam] [tekst]\",\n  \"ban-command-description\": \"Een gebruiker verbannen\",\n  \"giphy-command-args\": \"[tekst]\",\n  \"giphy-command-description\": \"Plaats een willekeurige gif in het kanaal\",\n  \"live\": \"live\",\n  \"mute-command-args\": \"[@gebruikersnaam]\",\n  \"mute-command-description\": \"Een gebruiker dempen\",\n  \"replyCount_one\": \"1 antwoord\",\n  \"replyCount_other\": \"{{ count }} antwoorden\",\n  \"search-results-header-filter-source-button-label--channels\": \"kanalen\",\n  \"search-results-header-filter-source-button-label--messages\": \"berichten\",\n  \"search-results-header-filter-source-button-label--users\": \"gebruikers\",\n  \"searchResultsCount_one\": \"1 resultaat\",\n  \"searchResultsCount_other\": \"{{ count }} resultaten\",\n  \"this content could not be displayed\": \"Deze inhoud kan niet weergegeven worden\",\n  \"timestamp/DateSeparator\": \"{{ timestamp | timestampFormatter(calendar: true) }}\",\n  \"timestamp/MessageTimestamp\": \"{{ timestamp | timestampFormatter(calendar: true) }}\",\n  \"timestamp/PollVote\": \"{{ timestamp | timestampFormatter(format: MMM D [at] HH:mm) }}\",\n  \"timestamp/PollVoteTooltip\": \"{{ timestamp | timestampFormatter(calendar: true) }}\",\n  \"timestamp/SystemMessage\": \"{{ timestamp | timestampFormatter(format: dddd L) }}\",\n  \"unban-command-args\": \"[@gebruikersnaam]\",\n  \"unban-command-description\": \"Een gebruiker debannen\",\n  \"unmute-command-args\": \"[@gebruikersnaam]\",\n  \"unmute-command-description\": \"Een gebruiker niet meer dempen\",\n  \"unreadMessagesSeparatorText_one\": \"1 ongelezen bericht\",\n  \"unreadMessagesSeparatorText_other\": \"{{count}} ongelezen berichten\",\n  \"{{ commaSeparatedUsers }} and {{ moreCount }} more\": \"{{ commaSeparatedUsers }} en {{ moreCount }} meer\",\n  \"{{ commaSeparatedUsers }}, and {{ lastUser }}\": \"{{ commaSeparatedUsers }} en {{ lastUser }}\",\n  \"{{ firstUser }} and {{ secondUser }}\": \"{{ firstUser }} en {{ secondUser }}\",\n  \"{{ imageCount }} more\": \"+{{ imageCount }}\",\n  \"{{ memberCount }} members\": \"{{ memberCount }} deelnemers\",\n  \"{{ user }} has been muted\": \"{{ user }} is gedempt\",\n  \"{{ user }} has been unmuted\": \"{{ user }} is niet meer gedempt\",\n  \"{{ user }} is typing...\": \"{{ user }} is aan het typen...\",\n  \"{{ users }} and more are typing...\": \"{{ users }} en meer zijn aan het typen...\",\n  \"{{ users }} and {{ user }} are typing...\": \"{{ users }} en {{ user }} zijn aan het typen...\",\n  \"{{ watcherCount }} online\": \"{{ watcherCount }} online\",\n  \"{{count}} unread_one\": \"{{count}} ongelezen\",\n  \"{{count}} unread_other\": \"{{count}} ongelezen\",\n  \"{{count}} votes_one\": \"{{count}} stem\",\n  \"{{count}} votes_other\": \"{{count}} stemmen\",\n  \"\uD83C\uDFD9 Attachment...\": \"\uD83C\uDFD9 Bijlage...\",\n  \"\uD83D\uDCCA {{createdBy}} created: {{ pollName}}\": \"\uD83D\uDCCA {{createdBy}} heeft gemaakt: {{ pollName}}\",\n  \"\uD83D\uDCCA {{votedBy}} voted: {{pollOptionText}}\": \"\uD83D\uDCCA {{votedBy}} heeft gestemd: {{pollOptionText}}\"\n}\n", "{\n  \"Add a comment\": \"Adicionar um coment\u00E1rio\",\n  \"Add an option\": \"Adicionar uma op\u00E7\u00E3o\",\n  \"All results loaded\": \"Todos os resultados carregados\",\n  \"Allow access to camera\": \"Permitir acesso \u00E0 c\u00E2mera\",\n  \"Allow access to microphone\": \"Permitir acesso ao microfone\",\n  \"Allow comments\": \"Permitir coment\u00E1rios\",\n  \"Allow option suggestion\": \"Permitir sugest\u00E3o de op\u00E7\u00E3o\",\n  \"An error has occurred during recording\": \"Ocorreu um erro durante a grava\u00E7\u00E3o\",\n  \"An error has occurred during the recording processing\": \"Ocorreu um erro durante o processamento da grava\u00E7\u00E3o\",\n  \"Anonymous\": \"An\u00F4nimo\",\n  \"Anonymous poll\": \"Enquete an\u00F4nima\",\n  \"Archive\": \"Arquivar\",\n  \"Ask a question\": \"Fa\u00E7a uma pergunta\",\n  \"Attach files\": \"Anexar arquivos\",\n  \"Cancel\": \"Cancelar\",\n  \"Cannot seek in the recording\": \"N\u00E3o \u00E9 poss\u00EDvel buscar na grava\u00E7\u00E3o\",\n  \"Channel Missing\": \"Canal ausente\",\n  \"Close\": \"Fechar\",\n  \"Close emoji picker\": \"Fechar seletor de emoji\",\n  \"Commands matching\": \"Comandos correspondentes\",\n  \"Connection failure, reconnecting now...\": \"Falha de conex\u00E3o, reconectando agora...\",\n  \"Create\": \"Criar\",\n  \"Create poll\": \"Criar enquete\",\n  \"Delete\": \"Excluir\",\n  \"Delivered\": \"Entregue\",\n  \"Download attachment {{ name }}\": \"Baixar anexo {{ name }}\",\n  \"Drag your files here\": \"Arraste seus arquivos aqui\",\n  \"Drag your files here to add to your post\": \"Arraste seus arquivos aqui para adicionar ao seu post\",\n  \"Edit Message\": \"Editar Mensagem\",\n  \"Edit message request failed\": \"O pedido de edi\u00E7\u00E3o da mensagem falhou\",\n  \"Edited\": \"Editada\",\n  \"Emoji matching\": \"Emoji correspondente\",\n  \"Empty message...\": \"Mensagem vazia...\",\n  \"End\": \"Fim\",\n  \"End vote\": \"Encerrar vota\u00E7\u00E3o\",\n  \"Error adding flag\": \"Erro ao reportar\",\n  \"Error connecting to chat, refresh the page to try again.\": \"Erro ao conectar ao bate-papo, atualize a p\u00E1gina para tentar novamente.\",\n  \"Error deleting message\": \"Erro ao deletar mensagem\",\n  \"Error fetching reactions\": \"Erro ao carregar rea\u00E7\u00F5es\",\n  \"Error marking message unread. Cannot mark unread messages older than the newest 100 channel messages.\": \"Erro ao marcar a mensagem como n\u00E3o lida. N\u00E3o \u00E9 poss\u00EDvel marcar mensagens n\u00E3o lidas mais antigas do que as 100 mensagens mais recentes do canal.\",\n  \"Error muting a user ...\": \"Erro ao silenciar um usu\u00E1rio...\",\n  \"Error pinning message\": \"Erro ao fixar mensagem\",\n  \"Error removing message pin\": \"Erro ao remover o PIN da mensagem\",\n  \"Error reproducing the recording\": \"Erro ao reproduzir a grava\u00E7\u00E3o\",\n  \"Error starting recording\": \"Erro ao iniciar a grava\u00E7\u00E3o\",\n  \"Error unmuting a user ...\": \"Erro ao ativar o som de um usu\u00E1rio...\",\n  \"Error uploading attachment\": \"Erro ao carregar o anexo\",\n  \"Error uploading file\": \"Erro ao enviar arquivo\",\n  \"Error uploading image\": \"Erro ao carregar a imagem\",\n  \"Error \u00B7 Unsent\": \"Erro \u00B7 N\u00E3o enviado\",\n  \"Error: {{ errorMessage }}\": \"Erro: {{ errorMessage }}\",\n  \"Failed to jump to the first unread message\": \"Falha ao pular para a primeira mensagem n\u00E3o lida\",\n  \"Failed to mark channel as read\": \"Falha ao marcar o canal como lido\",\n  \"Failed to play the recording\": \"Falha ao reproduzir a grava\u00E7\u00E3o\",\n  \"File\": \"Arquivo\",\n  \"File is too large: {{ size }}, maximum upload size is {{ limit }}\": \"O arquivo \u00E9 muito grande: {{ size }}, o tamanho m\u00E1ximo de upload \u00E9 {{ limit }}\",\n  \"Flag\": \"Reportar\",\n  \"Generating...\": \"Gerando...\",\n  \"Latest Messages\": \"Mensagens mais recentes\",\n  \"Load more\": \"Carregar mais\",\n  \"Mark as unread\": \"Marcar como n\u00E3o lida\",\n  \"Maximum number of votes (from 2 to 10)\": \"N\u00FAmero m\u00E1ximo de votos (de 2 a 10)\",\n  \"Menu\": \"Menu\",\n  \"Message Failed \u00B7 Click to try again\": \"A mensagem falhou \u00B7 Clique para tentar novamente\",\n  \"Message Failed \u00B7 Unauthorized\": \"A mensagem falhou \u00B7 n\u00E3o autorizado\",\n  \"Message deleted\": \"Mensagem apagada\",\n  \"Message has been successfully flagged\": \"A mensagem foi reportada com sucesso\",\n  \"Message pinned\": \"Mensagem fixada\",\n  \"Message was blocked by moderation policies\": \"A mensagem foi bloqueada pelas pol\u00EDticas de modera\u00E7\u00E3o\",\n  \"Messages have been marked unread.\": \"Mensagens foram marcadas como n\u00E3o lidas.\",\n  \"Missing permissions to upload the attachment\": \"Faltando permiss\u00F5es para enviar o anexo\",\n  \"Multiple answers\": \"M\u00FAltiplas respostas\",\n  \"Mute\": \"Silenciar\",\n  \"New\": \"Novo\",\n  \"New Messages!\": \"Novas Mensagens!\",\n  \"No chats here yet\u2026\": \"Ainda n\u00E3o h\u00E1 conversas aqui...\",\n  \"No results found\": \"Nenhum resultado encontrado\",\n  \"Nobody will be able to vote in this poll anymore.\": \"Ningu\u00E9m mais poder\u00E1 votar nesta pesquisa.\",\n  \"Nothing yet...\": \"Nada ainda...\",\n  \"Ok\": \"Ok\",\n  \"Open emoji picker\": \"Abrir seletor de emoji\",\n  \"Option already exists\": \"Op\u00E7\u00E3o j\u00E1 existe\",\n  \"Options\": \"Op\u00E7\u00F5es\",\n  \"People matching\": \"Pessoas correspondentes\",\n  \"Pin\": \"Fixar\",\n  \"Pinned by\": \"Fixado por\",\n  \"Poll\": \"Enquete\",\n  \"Poll comments\": \"Coment\u00E1rios da pesquisa\",\n  \"Poll options\": \"Op\u00E7\u00F5es da pesquisa\",\n  \"Poll results\": \"Resultados da pesquisa\",\n  \"Question\": \"Pergunta\",\n  \"Quote\": \"Citar\",\n  \"Recording format is not supported and cannot be reproduced\": \"Formato de grava\u00E7\u00E3o n\u00E3o \u00E9 suportado e n\u00E3o pode ser reproduzido\",\n  \"Reply\": \"Responder\",\n  \"Reply to Message\": \"Responder \u00E0 mensagem\",\n  \"Search\": \"Buscar\",\n  \"Searching...\": \"Buscando...\",\n  \"See all options ({{count}})_many\": \"Ver todas as op\u00E7\u00F5es ({{count}})\",\n  \"See all options ({{count}})_one\": \"Ver todas as op\u00E7\u00F5es ({{count}})\",\n  \"See all options ({{count}})_other\": \"Ver todas as op\u00E7\u00F5es ({{count}})\",\n  \"Select one\": \"Selecionar um\",\n  \"Select one or more\": \"Selecionar um ou mais\",\n  \"Select up to {{count}}_many\": \"Selecionar at\u00E9 {{count}}\",\n  \"Select up to {{count}}_one\": \"Selecionar at\u00E9 {{count}}\",\n  \"Select up to {{count}}_other\": \"Selecionar at\u00E9 {{count}}\",\n  \"Send\": \"Enviar\",\n  \"Send Anyway\": \"Enviar de qualquer forma\",\n  \"Send message request failed\": \"O pedido de envio da mensagem falhou\",\n  \"Sending...\": \"Enviando...\",\n  \"Show all\": \"Mostrar tudo\",\n  \"Shuffle\": \"Embaralhar\",\n  \"Slow Mode ON\": \"Modo lento LIGADO\",\n  \"Some of the files will not be accepted\": \"Alguns arquivos n\u00E3o ser\u00E3o aceitos\",\n  \"Start typing to search\": \"Comece a digitar para pesquisar\",\n  \"Submit\": \"Enviar\",\n  \"Suggest an option\": \"Sugerir uma op\u00E7\u00E3o\",\n  \"Thinking...\": \"Pensando...\",\n  \"This message did not meet our content guidelines\": \"Esta mensagem n\u00E3o corresponde \u00E0s nossas diretrizes de conte\u00FAdo\",\n  \"This message was deleted...\": \"Esta mensagem foi exclu\u00EDda...\",\n  \"Thread\": \"Fio\",\n  \"To start recording, allow the camera access in your browser\": \"Para come\u00E7ar a gravar, permita o acesso \u00E0 c\u00E2mera no seu navegador\",\n  \"To start recording, allow the microphone access in your browser\": \"Para come\u00E7ar a gravar, permita o acesso ao microfone no seu navegador\",\n  \"Type a number from 2 to 10\": \"Digite um n\u00FAmero de 2 a 10\",\n  \"Type your message\": \"Digite sua mensagem\",\n  \"Unarchive\": \"Desarquivar\",\n  \"Unmute\": \"Ativar som\",\n  \"Unpin\": \"Desfixar\",\n  \"Unread messages\": \"Mensagens n\u00E3o lidas\",\n  \"Unsupported attachment\": \"Anexo n\u00E3o suportado\",\n  \"Update your comment\": \"Atualizar seu coment\u00E1rio\",\n  \"Upload type: \\\"{{ type }}\\\" is not allowed\": \"Tipo de upload: \\\"{{ type }}\\\" n\u00E3o \u00E9 permitido\",\n  \"User uploaded content\": \"Conte\u00FAdo enviado pelo usu\u00E1rio\",\n  \"View results\": \"Ver resultados\",\n  \"View {{count}} comments_many\": \"Ver {{count}} coment\u00E1rios\",\n  \"View {{count}} comments_one\": \"Ver {{count}} coment\u00E1rio\",\n  \"View {{count}} comments_other\": \"Ver {{count}} coment\u00E1rios\",\n  \"Voice message\": \"Mensagem de voz\",\n  \"Vote ended\": \"Vota\u00E7\u00E3o encerrada\",\n  \"Wait until all attachments have uploaded\": \"Espere at\u00E9 que todos os anexos tenham sido carregados\",\n  \"You\": \"Voc\u00EA\",\n  \"You have no channels currently\": \"Voc\u00EA n\u00E3o tem canais atualmente\",\n  \"You've reached the maximum number of files\": \"Voc\u00EA atingiu o n\u00FAmero m\u00E1ximo de arquivos\",\n  \"aria/Attachment\": \"Anexo\",\n  \"aria/Cancel Reply\": \"Cancelar resposta\",\n  \"aria/Cancel upload\": \"Cancelar upload\",\n  \"aria/Channel list\": \"Lista de canais\",\n  \"aria/Channel search results\": \"Resultados de pesquisa de canais\",\n  \"aria/Close thread\": \"Fechar t\u00F3pico\",\n  \"aria/Download attachment\": \"Baixar anexo\",\n  \"aria/Emoji picker\": \"Seletor de emojis\",\n  \"aria/File input\": \"Entrada de arquivo\",\n  \"aria/File upload\": \"Carregar arquivo\",\n  \"aria/Image input\": \"Entrada de imagem\",\n  \"aria/Load More Channels\": \"Carregar mais canais\",\n  \"aria/Menu\": \"Menu\",\n  \"aria/Message Options\": \"Op\u00E7\u00F5es de mensagem\",\n  \"aria/Open Attachment Selector\": \"Abrir seletor de anexos\",\n  \"aria/Open Message Actions Menu\": \"Abrir menu de a\u00E7\u00F5es de mensagem\",\n  \"aria/Open Reaction Selector\": \"Abrir seletor de rea\u00E7\u00F5es\",\n  \"aria/Open Thread\": \"Abrir t\u00F3pico\",\n  \"aria/Reaction list\": \"Lista de rea\u00E7\u00F5es\",\n  \"aria/Remove attachment\": \"Remover anexo\",\n  \"aria/Retry upload\": \"Tentar upload novamente\",\n  \"aria/Search results\": \"Resultados da pesquisa\",\n  \"aria/Search results header filter button\": \"Bot\u00E3o de filtro do cabe\u00E7alho dos resultados da pesquisa\",\n  \"aria/Send\": \"Enviar\",\n  \"aria/Stop AI Generation\": \"Parar gera\u00E7\u00E3o de IA\",\n  \"ban-command-args\": \"[@nomedeusu\u00E1rio] [texto]\",\n  \"ban-command-description\": \"Banir um usu\u00E1rio\",\n  \"giphy-command-args\": \"[texto]\",\n  \"giphy-command-description\": \"Postar um gif aleat\u00F3rio no canal\",\n  \"live\": \"ao vivo\",\n  \"mute-command-args\": \"[@nomedeusu\u00E1rio]\",\n  \"mute-command-description\": \"Silenciar um usu\u00E1rio\",\n  \"replyCount_many\": \"{{ count }} respostas\",\n  \"replyCount_one\": \"1 resposta\",\n  \"replyCount_other\": \"{{ count }} respostas\",\n  \"search-results-header-filter-source-button-label--channels\": \"canais\",\n  \"search-results-header-filter-source-button-label--messages\": \"mensagens\",\n  \"search-results-header-filter-source-button-label--users\": \"usu\u00E1rios\",\n  \"searchResultsCount_many\": \"{{ count }} resultados\",\n  \"searchResultsCount_one\": \"1 resultado\",\n  \"searchResultsCount_other\": \"{{ count }} resultados\",\n  \"this content could not be displayed\": \"este conte\u00FAdo n\u00E3o p\u00F4de ser exibido\",\n  \"timestamp/DateSeparator\": \"{{ timestamp | timestampFormatter(calendar: true) }}\",\n  \"timestamp/MessageTimestamp\": \"{{ timestamp | timestampFormatter(calendar: true) }}\",\n  \"timestamp/PollVote\": \"{{ timestamp | timestampFormatter(format: MMM D [at] HH:mm) }}\",\n  \"timestamp/PollVoteTooltip\": \"{{ timestamp | timestampFormatter(calendar: true) }}\",\n  \"timestamp/SystemMessage\": \"{{ timestamp | timestampFormatter(format: dddd L) }}\",\n  \"unban-command-args\": \"[@nomedeusu\u00E1rio]\",\n  \"unban-command-description\": \"Desbanir um usu\u00E1rio\",\n  \"unmute-command-args\": \"[@nomedeusu\u00E1rio]\",\n  \"unmute-command-description\": \"Retirar o silenciamento de um usu\u00E1rio\",\n  \"unreadMessagesSeparatorText_many\": \"{{count}} mensagens n\u00E3o lidas\",\n  \"unreadMessagesSeparatorText_one\": \"1 mensagem n\u00E3o lida\",\n  \"unreadMessagesSeparatorText_other\": \"{{count}} mensagens n\u00E3o lidas\",\n  \"{{ commaSeparatedUsers }} and {{ moreCount }} more\": \"{{ commaSeparatedUsers }} e mais {{ moreCount }}\",\n  \"{{ commaSeparatedUsers }}, and {{ lastUser }}\": \"{{ commaSeparatedUsers }} e {{ lastUser }}\",\n  \"{{ firstUser }} and {{ secondUser }}\": \"{{ firstUser }} e {{ secondUser }}\",\n  \"{{ imageCount }} more\": \"{{ imageCount }} mais\",\n  \"{{ memberCount }} members\": \"{{ memberCount }} membros\",\n  \"{{ user }} has been muted\": \"{{ user }} foi silenciado\",\n  \"{{ user }} has been unmuted\": \"{{ user }} foi reativado\",\n  \"{{ user }} is typing...\": \"{{ user }} est\u00E1 digitando...\",\n  \"{{ users }} and more are typing...\": \"{{ users }} e mais est\u00E3o digitando...\",\n  \"{{ users }} and {{ user }} are typing...\": \"{{ users }} e {{ user }} est\u00E3o digitando...\",\n  \"{{ watcherCount }} online\": \"{{ watcherCount }} online\",\n  \"{{count}} unread_many\": \"{{count}} n\u00E3o lidos\",\n  \"{{count}} unread_one\": \"{{count}} n\u00E3o lido\",\n  \"{{count}} unread_other\": \"{{count}} n\u00E3o lidos\",\n  \"{{count}} votes_many\": \"{{count}} votos\",\n  \"{{count}} votes_one\": \"{{count}} voto\",\n  \"{{count}} votes_other\": \"{{count}} votos\",\n  \"\uD83C\uDFD9 Attachment...\": \"\uD83C\uDFD9 Anexo...\",\n  \"\uD83D\uDCCA {{createdBy}} created: {{ pollName}}\": \"\uD83D\uDCCA {{createdBy}} criou: {{ pollName}}\",\n  \"\uD83D\uDCCA {{votedBy}} voted: {{pollOptionText}}\": \"\uD83D\uDCCA {{votedBy}} votou: {{pollOptionText}}\"\n}\n", "{\n  \"Add a comment\": \"\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u043A\u043E\u043C\u043C\u0435\u043D\u0442\u0430\u0440\u0438\u0439\",\n  \"Add an option\": \"\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0432\u0430\u0440\u0438\u0430\u043D\u0442\",\n  \"All results loaded\": \"\u0412\u0441\u0435 \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u044B \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043D\u044B\",\n  \"Allow access to camera\": \"\u0420\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044C \u0434\u043E\u0441\u0442\u0443\u043F \u043A \u043A\u0430\u043C\u0435\u0440\u0435\",\n  \"Allow access to microphone\": \"\u0420\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044C \u0434\u043E\u0441\u0442\u0443\u043F \u043A \u043C\u0438\u043A\u0440\u043E\u0444\u043E\u043D\u0443\",\n  \"Allow comments\": \"\u0420\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044C \u043A\u043E\u043C\u043C\u0435\u043D\u0442\u0430\u0440\u0438\u0438\",\n  \"Allow option suggestion\": \"\u0420\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044C \u043F\u0440\u0435\u0434\u043B\u043E\u0436\u0435\u043D\u0438\u0435 \u0432\u0430\u0440\u0438\u0430\u043D\u0442\u043E\u0432\",\n  \"An error has occurred during recording\": \"\u041F\u0440\u043E\u0438\u0437\u043E\u0448\u043B\u0430 \u043E\u0448\u0438\u0431\u043A\u0430 \u0432\u043E \u0432\u0440\u0435\u043C\u044F \u0437\u0430\u043F\u0438\u0441\u0438\",\n  \"An error has occurred during the recording processing\": \"\u041F\u0440\u043E\u0438\u0437\u043E\u0448\u043B\u0430 \u043E\u0448\u0438\u0431\u043A\u0430 \u0432\u043E \u0432\u0440\u0435\u043C\u044F \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u043A\u0438 \u0437\u0430\u043F\u0438\u0441\u0438\",\n  \"Anonymous\": \"\u0410\u043D\u043E\u043D\u0438\u043C\",\n  \"Anonymous poll\": \"\u0410\u043D\u043E\u043D\u0438\u043C\u043D\u044B\u0439 \u043E\u043F\u0440\u043E\u0441\",\n  \"Archive\": \"A\u0440\u0445\u0438\u0432\u0438\u0440\u043E\u0432\u0430\u0442\u044C\",\n  \"Ask a question\": \"\u0417\u0430\u0434\u0430\u0442\u044C \u0432\u043E\u043F\u0440\u043E\u0441\",\n  \"Attach files\": \"\u041F\u0440\u0438\u043A\u0440\u0435\u043F\u0438\u0442\u044C \u0444\u0430\u0439\u043B\u044B\",\n  \"Cancel\": \"\u041E\u0442\u043C\u0435\u043D\u0430\",\n  \"Cannot seek in the recording\": \"\u041D\u0435\u0432\u043E\u0437\u043C\u043E\u0436\u043D\u043E \u043E\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0438\u0442\u044C \u043F\u043E\u0438\u0441\u043A \u0432 \u0437\u0430\u043F\u0438\u0441\u0438\",\n  \"Channel Missing\": \"\u041A\u0430\u043D\u0430\u043B \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\",\n  \"Close\": \"\u0417\u0430\u043A\u0440\u044B\u0442\u044C\",\n  \"Close emoji picker\": \"\u0417\u0430\u043A\u0440\u044B\u0442\u044C \u043E\u043A\u043D\u043E \u0432\u044B\u0431\u043E\u0440\u0430 \u0441\u043C\u0430\u0439\u043B\u043E\u0432\",\n  \"Commands matching\": \"\u0421\u043E\u043E\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435 \u043A\u043E\u043C\u0430\u043D\u0434\",\n  \"Connection failure, reconnecting now...\": \"\u041E\u0448\u0438\u0431\u043A\u0430 \u0441\u043E\u0435\u0434\u0438\u043D\u0435\u043D\u0438\u044F, \u043F\u0435\u0440\u0435\u043F\u043E\u0434\u043A\u043B\u044E\u0447\u0435\u043D\u0438\u0435...\",\n  \"Create\": \"\u0421\u043E\u0437\u0434\u0430\u0442\u044C\",\n  \"Create poll\": \"\u0421\u043E\u0437\u0434\u0430\u0442\u044C \u043E\u043F\u0440\u043E\u0441\",\n  \"Delete\": \"\u0423\u0434\u0430\u043B\u0438\u0442\u044C\",\n  \"Delivered\": \"\u041E\u0442\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u043E\",\n  \"Download attachment {{ name }}\": \"\u0421\u043A\u0430\u0447\u0430\u0442\u044C \u0432\u043B\u043E\u0436\u0435\u043D\u0438\u0435 {{ name }}\",\n  \"Drag your files here\": \"\u041F\u0435\u0440\u0435\u0442\u0430\u0449\u0438\u0442\u0435 \u0432\u0430\u0448\u0438 \u0444\u0430\u0439\u043B\u044B \u0441\u044E\u0434\u0430\",\n  \"Drag your files here to add to your post\": \"\u041F\u0435\u0440\u0435\u0442\u0430\u0449\u0438\u0442\u0435 \u0432\u0430\u0448\u0438 \u0444\u0430\u0439\u043B\u044B \u0441\u044E\u0434\u0430, \u0447\u0442\u043E\u0431\u044B \u0434\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0438\u0445 \u0432 \u0432\u0430\u0448 \u043F\u043E\u0441\u0442\",\n  \"Edit Message\": \"\u0420\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0435\",\n  \"Edit message request failed\": \"\u041D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u0438\u0437\u043C\u0435\u043D\u0438\u0442\u044C \u0437\u0430\u043F\u0440\u043E\u0441 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u044F\",\n  \"Edited\": \"\u041E\u0442\u0440\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u043E\",\n  \"Emoji matching\": \"\u0421\u043E\u043E\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435 \u044D\u043C\u043E\u0434\u0437\u0438\",\n  \"Empty message...\": \"\u041F\u0443\u0441\u0442\u043E\u0435 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0435...\",\n  \"End\": \"\u041A\u043E\u043D\u0435\u0446\",\n  \"End vote\": \"\u0417\u0430\u043A\u043E\u043D\u0447\u0438\u0442\u044C \u0433\u043E\u043B\u043E\u0441\u043E\u0432\u0430\u043D\u0438\u0435\",\n  \"Error adding flag\": \"\u041E\u0448\u0438\u0431\u043A\u0430 \u0434\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u0438\u044F \u0444\u043B\u0430\u0433\u0430\",\n  \"Error connecting to chat, refresh the page to try again.\": \"\u041E\u0448\u0438\u0431\u043A\u0430 \u043F\u043E\u0434\u043A\u043B\u044E\u0447\u0435\u043D\u0438\u044F \u043A \u0447\u0430\u0442\u0443, \u043E\u0431\u043D\u043E\u0432\u0438\u0442\u0435 \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0443 \u0447\u0442\u043E\u0431\u044B \u043F\u043E\u043F\u0440\u043E\u0431\u043E\u0432\u0430\u0442\u044C \u0441\u043D\u043E\u0432\u0430.\",\n  \"Error deleting message\": \"\u041E\u0448\u0438\u0431\u043A\u0430 \u043F\u0440\u0438 \u0443\u0434\u0430\u043B\u0435\u043D\u0438\u0438 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u044F\",\n  \"Error fetching reactions\": \"\u041E\u0448\u0438\u0431\u043A\u0430 \u043F\u0440\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043A\u0435 \u0440\u0435\u0430\u043A\u0446\u0438\u0439\",\n  \"Error marking message unread. Cannot mark unread messages older than the newest 100 channel messages.\": \"\u041E\u0448\u0438\u0431\u043A\u0430 \u043F\u0440\u0438 \u043E\u0442\u043C\u0435\u0442\u043A\u0435 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u044F \u043A\u0430\u043A \u043D\u0435\u043F\u0440\u043E\u0447\u0438\u0442\u0430\u043D\u043D\u043E\u0433\u043E. \u041D\u0435\u0432\u043E\u0437\u043C\u043E\u0436\u043D\u043E \u043E\u0442\u043C\u0435\u0442\u0438\u0442\u044C \u043A\u0430\u043A \u043D\u0435\u043F\u0440\u043E\u0447\u0438\u0442\u0430\u043D\u043D\u044B\u0435 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u044F \u0441\u0442\u0430\u0440\u0448\u0435 \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u0438\u0445 100 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0439 \u0432 \u043A\u0430\u043D\u0430\u043B\u0435.\",\n  \"Error muting a user ...\": \"\u041E\u0448\u0438\u0431\u043A\u0430 \u043E\u0442\u043A\u043B\u044E\u0447\u0435\u043D\u0438\u044F \u0443\u0432\u0435\u0434\u043E\u043C\u043B\u0435\u043D\u0438\u0439 \u043E\u0442 \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044F...\",\n  \"Error pinning message\": \"\u0421\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0435 \u043E\u0431 \u043E\u0448\u0438\u0431\u043A\u0435 \u043F\u0440\u0438 \u0437\u0430\u043A\u0440\u0435\u043F\u043B\u0435\u043D\u0438\u0438\",\n  \"Error removing message pin\": \"\u041E\u0448\u0438\u0431\u043A\u0430 \u043F\u0440\u0438 \u0443\u0434\u0430\u043B\u0435\u043D\u0438\u0438 \u0431\u0443\u043B\u0430\u0432\u043A\u0438 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u044F\",\n  \"Error reproducing the recording\": \"\u041E\u0448\u0438\u0431\u043A\u0430 \u0432\u043E\u0441\u043F\u0440\u043E\u0438\u0437\u0432\u0435\u0434\u0435\u043D\u0438\u044F \u0437\u0430\u043F\u0438\u0441\u0438\",\n  \"Error starting recording\": \"\u041E\u0448\u0438\u0431\u043A\u0430 \u043F\u0440\u0438 \u0437\u0430\u043F\u0443\u0441\u043A\u0435 \u0437\u0430\u043F\u0438\u0441\u0438\",\n  \"Error unmuting a user ...\": \"\u041E\u0448\u0438\u0431\u043A\u0430 \u0432\u043A\u043B\u044E\u0447\u0435\u043D\u0438\u044F \u0443\u0432\u0435\u0434\u043E\u043C\u043B\u0435\u043D\u0438\u0439...\",\n  \"Error uploading attachment\": \"\u041E\u0448\u0438\u0431\u043A\u0430 \u043F\u0440\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043A\u0435 \u0432\u043B\u043E\u0436\u0435\u043D\u0438\u044F\",\n  \"Error uploading file\": \"\u041E\u0448\u0438\u0431\u043A\u0430 \u043F\u0440\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043A\u0435 \u0444\u0430\u0439\u043B\u0430\",\n  \"Error uploading image\": \"\u041E\u0448\u0438\u0431\u043A\u0430 \u0437\u0430\u0433\u0440\u0443\u0437\u043A\u0438 \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u044F\",\n  \"Error \u00B7 Unsent\": \"\u041E\u0448\u0438\u0431\u043A\u0430 \u00B7 \u041D\u0435 \u043E\u0442\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u043E\",\n  \"Error: {{ errorMessage }}\": \"\u041E\u0448\u0438\u0431\u043A\u0430: {{ errorMessage }}\",\n  \"Failed to jump to the first unread message\": \"\u041D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u043F\u0435\u0440\u0435\u0439\u0442\u0438 \u043A \u043F\u0435\u0440\u0432\u043E\u043C\u0443 \u043D\u0435\u043F\u0440\u043E\u0447\u0438\u0442\u0430\u043D\u043D\u043E\u043C\u0443 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u044E\",\n  \"Failed to mark channel as read\": \"\u041D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u043F\u043E\u043C\u0435\u0442\u0438\u0442\u044C \u043A\u0430\u043D\u0430\u043B \u043A\u0430\u043A \u043F\u0440\u043E\u0447\u0438\u0442\u0430\u043D\u043D\u044B\u0439\",\n  \"Failed to play the recording\": \"\u041D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u0432\u043E\u0441\u043F\u0440\u043E\u0438\u0437\u0432\u0435\u0441\u0442\u0438 \u0437\u0430\u043F\u0438\u0441\u044C\",\n  \"File\": \"\u0424\u0430\u0439\u043B\",\n  \"File is too large: {{ size }}, maximum upload size is {{ limit }}\": \"\u0424\u0430\u0439\u043B \u0441\u043B\u0438\u0448\u043A\u043E\u043C \u0431\u043E\u043B\u044C\u0448\u043E\u0439: {{ size }}, \u043C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u044B\u0439 \u0440\u0430\u0437\u043C\u0435\u0440 \u0437\u0430\u0433\u0440\u0443\u0437\u043A\u0438 \u0441\u043E\u0441\u0442\u0430\u0432\u043B\u044F\u0435\u0442 {{ limit }}\",\n  \"Flag\": \"\u041F\u043E\u0436\u0430\u043B\u043E\u0432\u0430\u0442\u044C\u0441\u044F\",\n  \"Generating...\": \"\u0413\u0435\u043D\u0435\u0440\u0438\u0440\u0443\u044E...\",\n  \"Latest Messages\": \"\u041F\u043E\u0441\u043B\u0435\u0434\u043D\u0438\u0435 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u044F\",\n  \"Load more\": \"\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044C \u0431\u043E\u043B\u044C\u0448\u0435\",\n  \"Mark as unread\": \"\u041E\u0442\u043C\u0435\u0442\u0438\u0442\u044C \u043A\u0430\u043A \u043D\u0435\u043F\u0440\u043E\u0447\u0438\u0442\u0430\u043D\u043D\u043E\u0435\",\n  \"Maximum number of votes (from 2 to 10)\": \"\u041C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u043E\u0435 \u043A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u0433\u043E\u043B\u043E\u0441\u043E\u0432 (\u043E\u0442 2 \u0434\u043E 10)\",\n  \"Menu\": \"\u041C\u0435\u043D\u044E\",\n  \"Message Failed \u00B7 Click to try again\": \"\u041E\u0448\u0438\u0431\u043A\u0430 \u043E\u0442\u043F\u0440\u0430\u0432\u043A\u0438 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u044F \u00B7 \u041D\u0430\u0436\u043C\u0438\u0442\u0435 \u0447\u0442\u043E\u0431\u044B \u043F\u043E\u0432\u0442\u043E\u0440\u0438\u0442\u044C\",\n  \"Message Failed \u00B7 Unauthorized\": \"\u041E\u0448\u0438\u0431\u043A\u0430 \u043E\u0442\u043F\u0440\u0430\u0432\u043A\u0438 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u044F \u00B7 \u041D\u0435\u0430\u0432\u0442\u043E\u0440\u0438\u0437\u043E\u0432\u0430\u043D\u043D\u044B\u0439\",\n  \"Message deleted\": \"\u0421\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0435 \u0443\u0434\u0430\u043B\u0435\u043D\u043E\",\n  \"Message has been successfully flagged\": \"\u0416\u0430\u043B\u043E\u0431\u0430 \u043D\u0430 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0435 \u0431\u044B\u043B\u0430 \u043F\u0440\u0438\u043D\u044F\u0442\u0430\",\n  \"Message pinned\": \"\u0421\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0435 \u0437\u0430\u043A\u0440\u0435\u043F\u043B\u0435\u043D\u043E\",\n  \"Message was blocked by moderation policies\": \"\u0421\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0435 \u0431\u044B\u043B\u043E \u0437\u0430\u0431\u043B\u043E\u043A\u0438\u0440\u043E\u0432\u0430\u043D\u043E \u043C\u043E\u0434\u0435\u0440\u0430\u0446\u0438\u0435\u0439\",\n  \"Messages have been marked unread.\": \"\u0421\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u044F \u0431\u044B\u043B\u0438 \u043E\u0442\u043C\u0435\u0447\u0435\u043D\u044B \u043A\u0430\u043A \u043D\u0435\u043F\u0440\u043E\u0447\u0438\u0442\u0430\u043D\u043D\u044B\u0435.\",\n  \"Missing permissions to upload the attachment\": \"\u041E\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044E\u0442 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043D\u0438\u044F \u0434\u043B\u044F \u0437\u0430\u0433\u0440\u0443\u0437\u043A\u0438 \u0432\u043B\u043E\u0436\u0435\u043D\u0438\u044F\",\n  \"Multiple answers\": \"\u041D\u0435\u0441\u043A\u043E\u043B\u044C\u043A\u043E \u043E\u0442\u0432\u0435\u0442\u043E\u0432\",\n  \"Mute\": \"\u041E\u0442\u043A\u043B\u044E\u0447\u0438\u0442\u044C \u0443\u0432\u0435\u0434\u043E\u043C\u043B\u0435\u043D\u0438\u044F\",\n  \"New\": \"\u041D\u043E\u0432\u044B\u0435\",\n  \"New Messages!\": \"\u041D\u043E\u0432\u044B\u0435 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u044F!\",\n  \"No chats here yet\u2026\": \"\u0417\u0434\u0435\u0441\u044C \u0435\u0449\u0435 \u043D\u0435\u0442 \u0447\u0430\u0442\u043E\u0432...\",\n  \"No results found\": \"\u0420\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u044B \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u044B\",\n  \"Nobody will be able to vote in this poll anymore.\": \"\u041D\u0438\u043A\u0442\u043E \u0431\u043E\u043B\u044C\u0448\u0435 \u043D\u0435 \u0441\u043C\u043E\u0436\u0435\u0442 \u0433\u043E\u043B\u043E\u0441\u043E\u0432\u0430\u0442\u044C \u0432 \u044D\u0442\u043E\u043C \u043E\u043F\u0440\u043E\u0441\u0435.\",\n  \"Nothing yet...\": \"\u041F\u043E\u043A\u0430 \u043D\u0438\u0447\u0435\u0433\u043E \u043D\u0435\u0442...\",\n  \"Ok\": \"\u041E\u043A\",\n  \"Open emoji picker\": \"\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u0432\u044B\u0431\u043E\u0440 \u0441\u043C\u0430\u0439\u043B\u043E\u0432\",\n  \"Option already exists\": \"\u0412\u0430\u0440\u0438\u0430\u043D\u0442 \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442\",\n  \"Options\": \"\u0412\u0430\u0440\u0438\u0430\u043D\u0442\u044B\",\n  \"People matching\": \"\u0421\u043E\u0432\u043F\u0430\u0434\u0430\u044E\u0449\u0438\u0435 \u043B\u044E\u0434\u0438\",\n  \"Pin\": \"\u0417\u0430\u043A\u0440\u0435\u043F\u0438\u0442\u044C\",\n  \"Pinned by\": \"\u0417\u0430\u043A\u0440\u0435\u043F\u043B\u0435\u043D\u043E\",\n  \"Poll\": \"\u041E\u043F\u0440\u043E\u0441\",\n  \"Poll comments\": \"\u041A\u043E\u043C\u043C\u0435\u043D\u0442\u0430\u0440\u0438\u0438 \u043A \u043E\u043F\u0440\u043E\u0441\u0443\",\n  \"Poll options\": \"\u041E\u043F\u0446\u0438\u0438 \u043E\u043F\u0440\u043E\u0441\u0430\",\n  \"Poll results\": \"\u0420\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u044B \u043E\u043F\u0440\u043E\u0441\u0430\",\n  \"Question\": \"\u0412\u043E\u043F\u0440\u043E\u0441\",\n  \"Quote\": \"\u0426\u0438\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C\",\n  \"Recording format is not supported and cannot be reproduced\": \"\u0424\u043E\u0440\u043C\u0430\u0442 \u0437\u0430\u043F\u0438\u0441\u0438 \u043D\u0435 \u043F\u043E\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044F \u0438 \u043D\u0435 \u043C\u043E\u0436\u0435\u0442 \u0431\u044B\u0442\u044C \u0432\u043E\u0441\u043F\u0440\u043E\u0438\u0437\u0432\u0435\u0434\u0435\u043D\",\n  \"Reply\": \"\u041E\u0442\u0432\u0435\u0442\u0438\u0442\u044C\",\n  \"Reply to Message\": \"\u041E\u0442\u0432\u0435\u0442\u0438\u0442\u044C \u043D\u0430 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0435\",\n  \"Search\": \"\u041F\u043E\u0438\u0441\u043A\",\n  \"Searching...\": \"\u0418\u0449\u0435\u043C...\",\n  \"See all options ({{count}})_few\": \"\u041F\u043E\u0441\u043C\u043E\u0442\u0440\u0435\u0442\u044C \u0432\u0441\u0435 \u0432\u0430\u0440\u0438\u0430\u043D\u0442\u044B ({{count}})\",\n  \"See all options ({{count}})_many\": \"\u041F\u043E\u0441\u043C\u043E\u0442\u0440\u0435\u0442\u044C \u0432\u0441\u0435 \u0432\u0430\u0440\u0438\u0430\u043D\u0442\u044B ({{count}})\",\n  \"See all options ({{count}})_one\": \"\u041F\u043E\u0441\u043C\u043E\u0442\u0440\u0435\u0442\u044C \u0432\u0441\u0435 \u0432\u0430\u0440\u0438\u0430\u043D\u0442\u044B ({{count}})\",\n  \"See all options ({{count}})_other\": \"\u041F\u043E\u0441\u043C\u043E\u0442\u0440\u0435\u0442\u044C \u0432\u0441\u0435 \u0432\u0430\u0440\u0438\u0430\u043D\u0442\u044B ({{count}})\",\n  \"Select one\": \"\u0412\u044B\u0431\u0435\u0440\u0438\u0442\u0435 \u043E\u0434\u0438\u043D\",\n  \"Select one or more\": \"\u0412\u044B\u0431\u0435\u0440\u0438\u0442\u0435 \u043E\u0434\u0438\u043D \u0438\u043B\u0438 \u043D\u0435\u0441\u043A\u043E\u043B\u044C\u043A\u043E\",\n  \"Select up to {{count}}_few\": \"\u0412\u044B\u0431\u0435\u0440\u0438\u0442\u0435 \u0434\u043E {{count}}\",\n  \"Select up to {{count}}_many\": \"\u0412\u044B\u0431\u0435\u0440\u0438\u0442\u0435 \u0434\u043E {{count}}\",\n  \"Select up to {{count}}_one\": \"\u0412\u044B\u0431\u0435\u0440\u0438\u0442\u0435 \u0434\u043E {{count}}\",\n  \"Select up to {{count}}_other\": \"\u0412\u044B\u0431\u0435\u0440\u0438\u0442\u0435 \u0434\u043E {{count}}\",\n  \"Send\": \"\u041E\u0442\u043F\u0440\u0430\u0432\u0438\u0442\u044C\",\n  \"Send Anyway\": \"\u041C\u043D\u0435 \u0432\u0441\u0451 \u0440\u0430\u0432\u043D\u043E, \u043E\u0442\u043F\u0440\u0430\u0432\u0438\u0442\u044C\",\n  \"Send message request failed\": \"\u041D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u043E\u0442\u043F\u0440\u0430\u0432\u0438\u0442\u044C \u0437\u0430\u043F\u0440\u043E\u0441 \u043D\u0430 \u043E\u0442\u043F\u0440\u0430\u0432\u043A\u0443 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u044F\",\n  \"Sending...\": \"\u041E\u0442\u043F\u0440\u0430\u0432\u043A\u0430...\",\n  \"Show all\": \"\u041F\u043E\u043A\u0430\u0437\u0430\u0442\u044C \u0432\u0441\u0435\",\n  \"Shuffle\": \"\u041F\u0435\u0440\u0435\u043C\u0435\u0448\u0430\u0442\u044C\",\n  \"Slow Mode ON\": \"\u041C\u0435\u0434\u043B\u0435\u043D\u043D\u044B\u0439 \u0440\u0435\u0436\u0438\u043C \u0432\u043A\u043B\u044E\u0447\u0435\u043D\",\n  \"Some of the files will not be accepted\": \"\u041D\u0435\u043A\u043E\u0442\u043E\u0440\u044B\u0435 \u0444\u0430\u0439\u043B\u044B \u043D\u0435 \u0431\u0443\u0434\u0443\u0442 \u043F\u0440\u0438\u043D\u044F\u0442\u044B\",\n  \"Start typing to search\": \"\u041D\u0430\u0447\u043D\u0438\u0442\u0435 \u0432\u0432\u043E\u0434\u0438\u0442\u044C \u0434\u043B\u044F \u043F\u043E\u0438\u0441\u043A\u0430\",\n  \"Submit\": \"\u041E\u0442\u043F\u0440\u0430\u0432\u0438\u0442\u044C\",\n  \"Suggest an option\": \"\u041F\u0440\u0435\u0434\u043B\u043E\u0436\u0438\u0442\u044C \u0432\u0430\u0440\u0438\u0430\u043D\u0442\",\n  \"Thinking...\": \"\u0414\u0443\u043C\u0430\u044E...\",\n  \"This message did not meet our content guidelines\": \"\u0421\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0435 \u043D\u0435 \u0441\u043E\u043E\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043F\u0440\u0430\u0432\u0438\u043B\u0430\u043C\",\n  \"This message was deleted...\": \"\u0421\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0435 \u0431\u044B\u043B\u043E \u0443\u0434\u0430\u043B\u0435\u043D\u043E...\",\n  \"Thread\": \"\u0412\u0435\u0442\u043A\u0430\",\n  \"To start recording, allow the camera access in your browser\": \"\u0414\u043B\u044F \u043D\u0430\u0447\u0430\u043B\u0430 \u0437\u0430\u043F\u0438\u0441\u0438 \u0440\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u0435 \u0434\u043E\u0441\u0442\u0443\u043F \u043A \u043A\u0430\u043C\u0435\u0440\u0435 \u0432 \u0432\u0430\u0448\u0435\u043C \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435\",\n  \"To start recording, allow the microphone access in your browser\": \"\u0414\u043B\u044F \u043D\u0430\u0447\u0430\u043B\u0430 \u0437\u0430\u043F\u0438\u0441\u0438 \u0440\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u0435 \u0434\u043E\u0441\u0442\u0443\u043F \u043A \u043C\u0438\u043A\u0440\u043E\u0444\u043E\u043D\u0443 \u0432 \u0432\u0430\u0448\u0435\u043C \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435\",\n  \"Type a number from 2 to 10\": \"\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u0447\u0438\u0441\u043B\u043E \u043E\u0442 2 \u0434\u043E 10\",\n  \"Type your message\": \"\u0412\u0430\u0448\u0435 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0435\",\n  \"Unarchive\": \"\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u0438\u0437 \u0430\u0440\u0445\u0438\u0432\u0430\",\n  \"Unmute\": \"\u0412\u043A\u043B\u044E\u0447\u0438\u0442\u044C \u0443\u0432\u0435\u0434\u043E\u043C\u043B\u0435\u043D\u0438\u044F\",\n  \"Unpin\": \"\u041E\u0442\u043A\u0440\u0435\u043F\u0438\u0442\u044C\",\n  \"Unread messages\": \"\u041D\u0435\u043F\u0440\u043E\u0447\u0438\u0442\u0430\u043D\u043D\u044B\u0435 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u044F\",\n  \"Unsupported attachment\": \"\u041D\u0435\u043F\u043E\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043C\u043E\u0435 \u0432\u043B\u043E\u0436\u0435\u043D\u0438\u0435\",\n  \"Update your comment\": \"\u041E\u0431\u043D\u043E\u0432\u0438\u0442\u0435 \u0432\u0430\u0448 \u043A\u043E\u043C\u043C\u0435\u043D\u0442\u0430\u0440\u0438\u0439\",\n  \"Upload type: \\\"{{ type }}\\\" is not allowed\": \"\u0422\u0438\u043F \u0437\u0430\u0433\u0440\u0443\u0437\u043A\u0438: \\\"{{ type }}\\\" \u043D\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043D\",\n  \"User uploaded content\": \"\u041F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044C \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u043B \u043A\u043E\u043D\u0442\u0435\u043D\u0442\",\n  \"View results\": \"\u041F\u043E\u0441\u043C\u043E\u0442\u0440\u0435\u0442\u044C \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u044B\",\n  \"View {{count}} comments_few\": \"\u041F\u0440\u043E\u0441\u043C\u043E\u0442\u0440\u0435\u0442\u044C {{count}} \u043A\u043E\u043C\u043C\u0435\u043D\u0442\u0430\u0440\u0438\u0435\u0432\",\n  \"View {{count}} comments_many\": \"\u041F\u0440\u043E\u0441\u043C\u043E\u0442\u0440\u0435\u0442\u044C {{count}} \u043A\u043E\u043C\u043C\u0435\u043D\u0442\u0430\u0440\u0438\u0435\u0432\",\n  \"View {{count}} comments_one\": \"\u041F\u0440\u043E\u0441\u043C\u043E\u0442\u0440\u0435\u0442\u044C {{count}} \u043A\u043E\u043C\u043C\u0435\u043D\u0442\u0430\u0440\u0438\u0439\",\n  \"View {{count}} comments_other\": \"\u041F\u0440\u043E\u0441\u043C\u043E\u0442\u0440\u0435\u0442\u044C {{count}} \u043A\u043E\u043C\u043C\u0435\u043D\u0442\u0430\u0440\u0438\u0435\u0432\",\n  \"Voice message\": \"\u0413\u043E\u043B\u043E\u0441\u043E\u0432\u043E\u0435 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0435\",\n  \"Vote ended\": \"\u0413\u043E\u043B\u043E\u0441\u043E\u0432\u0430\u043D\u0438\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043D\u043E\",\n  \"Wait until all attachments have uploaded\": \"\u041F\u043E\u0434\u043E\u0436\u0434\u0438\u0442\u0435, \u043F\u043E\u043A\u0430 \u0432\u0441\u0435 \u0432\u043B\u043E\u0436\u0435\u043D\u0438\u044F \u0437\u0430\u0433\u0440\u0443\u0437\u044F\u0442\u0441\u044F\",\n  \"You\": \"\u0412\u044B\",\n  \"You have no channels currently\": \"\u0423 \u0432\u0430\u0441 \u043D\u0435\u0442 \u043A\u0430\u043D\u0430\u043B\u043E\u0432 \u0432 \u0434\u0430\u043D\u043D\u044B\u0439 \u043C\u043E\u043C\u0435\u043D\u0442\",\n  \"You've reached the maximum number of files\": \"\u0412\u044B \u0434\u043E\u0441\u0442\u0438\u0433\u043B\u0438 \u043C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u043E\u0433\u043E \u043A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0444\u0430\u0439\u043B\u043E\u0432\",\n  \"aria/Attachment\": \"\u0412\u043B\u043E\u0436\u0435\u043D\u0438\u0435\",\n  \"aria/Cancel Reply\": \"\u041E\u0442\u043C\u0435\u043D\u0438\u0442\u044C \u043E\u0442\u0432\u0435\u0442\",\n  \"aria/Cancel upload\": \"\u041E\u0442\u043C\u0435\u043D\u0438\u0442\u044C \u0437\u0430\u0433\u0440\u0443\u0437\u043A\u0443\",\n  \"aria/Channel list\": \"\u0421\u043F\u0438\u0441\u043E\u043A \u043A\u0430\u043D\u0430\u043B\u043E\u0432\",\n  \"aria/Channel search results\": \"\u0420\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u044B \u043F\u043E\u0438\u0441\u043A\u0430 \u043F\u043E \u043A\u0430\u043D\u0430\u043B\u0430\u043C\",\n  \"aria/Close thread\": \"\u0417\u0430\u043A\u0440\u044B\u0442\u044C \u0442\u0435\u043C\u0443\",\n  \"aria/Download attachment\": \"\u0421\u043A\u0430\u0447\u0430\u0442\u044C \u0432\u043B\u043E\u0436\u0435\u043D\u0438\u0435\",\n  \"aria/Emoji picker\": \"\u0412\u044B\u0431\u043E\u0440 \u044D\u043C\u043E\u0434\u0437\u0438\",\n  \"aria/File input\": \"\u0412\u0432\u043E\u0434 \u0444\u0430\u0439\u043B\u0430\",\n  \"aria/File upload\": \"\u0417\u0430\u0433\u0440\u0443\u0437\u043A\u0430 \u0444\u0430\u0439\u043B\u0430\",\n  \"aria/Image input\": \"\u0412\u0432\u043E\u0434 \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u044F\",\n  \"aria/Load More Channels\": \"\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044C \u0431\u043E\u043B\u044C\u0448\u0435 \u043A\u0430\u043D\u0430\u043B\u043E\u0432\",\n  \"aria/Menu\": \"\u041C\u0435\u043D\u044E\",\n  \"aria/Message Options\": \"\u041F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u044B \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u044F\",\n  \"aria/Open Attachment Selector\": \"\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u0432\u044B\u0431\u043E\u0440 \u0432\u043B\u043E\u0436\u0435\u043D\u0438\u0439\",\n  \"aria/Open Message Actions Menu\": \"\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u043C\u0435\u043D\u044E \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u0441 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u044F\u043C\u0438\",\n  \"aria/Open Reaction Selector\": \"\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u0441\u0435\u043B\u0435\u043A\u0442\u043E\u0440 \u0440\u0435\u0430\u043A\u0446\u0438\u0439\",\n  \"aria/Open Thread\": \"\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u0442\u0435\u043C\u0443\",\n  \"aria/Reaction list\": \"\u0421\u043F\u0438\u0441\u043E\u043A \u0440\u0435\u0430\u043A\u0446\u0438\u0439\",\n  \"aria/Remove attachment\": \"\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u0432\u043B\u043E\u0436\u0435\u043D\u0438\u0435\",\n  \"aria/Retry upload\": \"\u041F\u043E\u0432\u0442\u043E\u0440\u0438\u0442\u044C \u0437\u0430\u0433\u0440\u0443\u0437\u043A\u0443\",\n  \"aria/Search results\": \"\u0420\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u044B \u043F\u043E\u0438\u0441\u043A\u0430\",\n  \"aria/Search results header filter button\": \"\u041A\u043D\u043E\u043F\u043A\u0430 \u0444\u0438\u043B\u044C\u0442\u0440\u0430 \u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043A\u0430 \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u043E\u0432 \u043F\u043E\u0438\u0441\u043A\u0430\",\n  \"aria/Send\": \"\u041E\u0442\u043F\u0440\u0430\u0432\u0438\u0442\u044C\",\n  \"aria/Stop AI Generation\": \"\u041E\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C \u0433\u0435\u043D\u0435\u0440\u0430\u0446\u0438\u044E \u0418\u0418\",\n  \"ban-command-args\": \"[@\u0438\u043C\u044F\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044F] [\u0442\u0435\u043A\u0441\u0442]\",\n  \"ban-command-description\": \"\u0417\u0430\u0431\u043B\u043E\u043A\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044F\",\n  \"giphy-command-args\": \"[\u0442\u0435\u043A\u0441\u0442]\",\n  \"giphy-command-description\": \"\u041E\u043F\u0443\u0431\u043B\u0438\u043A\u043E\u0432\u0430\u0442\u044C \u0441\u043B\u0443\u0447\u0430\u0439\u043D\u0443\u044E GIF-\u0430\u043D\u0438\u043C\u0430\u0446\u0438\u044E \u0432 \u043A\u0430\u043D\u0430\u043B\u0435\",\n  \"live\": \"\u0412 \u043F\u0440\u044F\u043C\u043E\u043C \u044D\u0444\u0438\u0440\u0435\",\n  \"mute-command-args\": \"[@\u0438\u043C\u044F\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044F]\",\n  \"mute-command-description\": \"\u0412\u044B\u043A\u043B\u044E\u0447\u0438\u0442\u044C \u043C\u0438\u043A\u0440\u043E\u0444\u043E\u043D \u0443 \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044F\",\n  \"replyCount_few\": \"{{ count }} \u043E\u0442\u0432\u0435\u0442\u043E\u0432\",\n  \"replyCount_many\": \"{{ count }} \u043E\u0442\u0432\u0435\u0442\u043E\u0432\",\n  \"replyCount_one\": \"1 \u043E\u0442\u0432\u0435\u0442\",\n  \"replyCount_other\": \"{{ count }} \u043E\u0442\u0432\u0435\u0442\u043E\u0432\",\n  \"search-results-header-filter-source-button-label--channels\": \"\u043A\u0430\u043D\u0430\u043B\u044B\",\n  \"search-results-header-filter-source-button-label--messages\": \"\u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u044F\",\n  \"search-results-header-filter-source-button-label--users\": \"\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u0438\",\n  \"searchResultsCount_few\": \"{{ count }} \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u0430\",\n  \"searchResultsCount_many\": \"{{ count }} \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u043E\u0432\",\n  \"searchResultsCount_one\": \"1 \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\",\n  \"searchResultsCount_other\": \"{{ count }} \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u043E\u0432\",\n  \"this content could not be displayed\": \"\u042D\u0442\u043E\u0442 \u043A\u043E\u043D\u0442\u0435\u043D\u0442 \u043D\u0435 \u043C\u043E\u0436\u0435\u0442 \u0431\u044B\u0442\u044C \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0435\u043D \u0432 \u0434\u0430\u043D\u043D\u044B\u0439 \u043C\u043E\u043C\u0435\u043D\u0442\",\n  \"timestamp/DateSeparator\": \"{{ timestamp | timestampFormatter(calendar: true) }}\",\n  \"timestamp/MessageTimestamp\": \"{{ timestamp | timestampFormatter(calendar: true) }}\",\n  \"timestamp/PollVote\": \"{{ timestamp | timestampFormatter(format: MMM D [at] HH:mm) }}\",\n  \"timestamp/PollVoteTooltip\": \"{{ timestamp | timestampFormatter(calendar: true) }}\",\n  \"timestamp/SystemMessage\": \"{{ timestamp | timestampFormatter(format: dddd L) }}\",\n  \"unban-command-args\": \"[@\u0438\u043C\u044F\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044F]\",\n  \"unban-command-description\": \"\u0420\u0430\u0437\u0431\u043B\u043E\u043A\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044F\",\n  \"unmute-command-args\": \"[@\u0438\u043C\u044F\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044F]\",\n  \"unmute-command-description\": \"\u0412\u043A\u043B\u044E\u0447\u0438\u0442\u044C \u043C\u0438\u043A\u0440\u043E\u0444\u043E\u043D \u0443 \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044F\",\n  \"unreadMessagesSeparatorText_few\": \"1 \u043D\u0435\u043F\u0440\u043E\u0447\u0438\u0442\u0430\u043D\u043D\u043E\u0435 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u044F\",\n  \"unreadMessagesSeparatorText_many\": \"{{count}} \u043D\u0435\u043F\u0440\u043E\u0447\u0438\u0442\u0430\u043D\u043D\u044B\u0445 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0439\",\n  \"unreadMessagesSeparatorText_one\": \"1 \u043D\u0435\u043F\u0440\u043E\u0447\u0438\u0442\u0430\u043D\u043D\u043E\u0435 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0435\",\n  \"unreadMessagesSeparatorText_other\": \"{{count}} \u043D\u0435\u043F\u0440\u043E\u0447\u0438\u0442\u0430\u043D\u043D\u044B\u0445 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0439\",\n  \"{{ commaSeparatedUsers }} and {{ moreCount }} more\": \"{{ commaSeparatedUsers }} \u0438 {{ moreCount }} \u0435\u0449\u0435\",\n  \"{{ commaSeparatedUsers }}, and {{ lastUser }}\": \"{{ commaSeparatedUsers }} \u0438 {{ lastUser }}\",\n  \"{{ firstUser }} and {{ secondUser }}\": \"{{ firstUser }} \u0438 {{ secondUser }}\",\n  \"{{ imageCount }} more\": \"\u0415\u0449\u0451 {{ imageCount }}\",\n  \"{{ memberCount }} members\": \"{{ memberCount }} \u0443\u0447\u0430\u0441\u0442\u043D\u0438\u043A\u043E\u0432\",\n  \"{{ user }} has been muted\": \"\u0412\u044B \u043E\u0442\u043F\u0438\u0441\u0430\u043B\u0438\u0441\u044C \u043E\u0442 \u0443\u0432\u0435\u0434\u043E\u043C\u043B\u0435\u043D\u0438\u0439 \u043E\u0442 {{ user }}\",\n  \"{{ user }} has been unmuted\": \"\u0423\u0432\u0435\u0434\u043E\u043C\u043B\u0435\u043D\u0438\u044F \u043E\u0442 {{ user }} \u0431\u044B\u043B\u0438 \u0432\u043A\u043B\u044E\u0447\u0435\u043D\u044B\",\n  \"{{ user }} is typing...\": \"{{ user }} \u043F\u0435\u0447\u0430\u0442\u0430\u0435\u0442...\",\n  \"{{ users }} and more are typing...\": \"{{ users }} \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u043F\u0435\u0447\u0430\u0442\u0430\u044E\u0442...\",\n  \"{{ users }} and {{ user }} are typing...\": \"{{ users }} \u0438 {{ user }} \u043F\u0435\u0447\u0430\u0442\u0430\u044E\u0442...\",\n  \"{{ watcherCount }} online\": \"{{ watcherCount }} \u0432 \u0441\u0435\u0442\u0438\",\n  \"{{count}} unread_few\": \"{{count}} \u043D\u0435\u043F\u0440\u043E\u0447\u0438\u0442\u0430\u043D\u043D\u044B\u0445\",\n  \"{{count}} unread_many\": \"{{count}} \u043D\u0435\u043F\u0440\u043E\u0447\u0438\u0442\u0430\u043D\u043D\u044B\u0445\",\n  \"{{count}} unread_one\": \"{{count}} \u043D\u0435\u043F\u0440\u043E\u0447\u0438\u0442\u0430\u043D\u043D\u043E\u0435\",\n  \"{{count}} unread_other\": \"{{count}} \u043D\u0435\u043F\u0440\u043E\u0447\u0438\u0442\u0430\u043D\u043D\u044B\u0445\",\n  \"{{count}} votes_few\": \"{{count}} \u0433\u043E\u043B\u043E\u0441\u0430\",\n  \"{{count}} votes_many\": \"{{count}} \u0433\u043E\u043B\u043E\u0441\u043E\u0432\",\n  \"{{count}} votes_one\": \"{{count}} \u0433\u043E\u043B\u043E\u0441\",\n  \"{{count}} votes_other\": \"{{count}} \u0433\u043E\u043B\u043E\u0441\u043E\u0432\",\n  \"\uD83C\uDFD9 Attachment...\": \"\uD83C\uDFD9 \u0412\u043B\u043E\u0436\u0435\u043D\u0438\u0435...\",\n  \"\uD83D\uDCCA {{createdBy}} created: {{ pollName}}\": \"\uD83D\uDCCA {{createdBy}} \u0441\u043E\u0437\u0434\u0430\u043B(\u0430): {{ pollName}}\",\n  \"\uD83D\uDCCA {{votedBy}} voted: {{pollOptionText}}\": \"\uD83D\uDCCA {{votedBy}} \u043F\u0440\u043E\u0433\u043E\u043B\u043E\u0441\u043E\u0432\u0430\u043B(\u0430): {{pollOptionText}}\"\n}\n", "{\n  \"Add a comment\": \"Yorum ekle\",\n  \"Add an option\": \"Bir se\u00E7enek ekle\",\n  \"All results loaded\": \"T\u00FCm sonu\u00E7lar y\u00FCklendi\",\n  \"Allow access to camera\": \"Kameraya eri\u015Fime izin ver\",\n  \"Allow access to microphone\": \"Mikrofona eri\u015Fime izin ver\",\n  \"Allow comments\": \"Yorumlara izin ver\",\n  \"Allow option suggestion\": \"Se\u00E7enek \u00F6nerisine izin ver\",\n  \"An error has occurred during recording\": \"Kay\u0131t s\u0131ras\u0131nda bir hata olu\u015Ftu\",\n  \"An error has occurred during the recording processing\": \"Kay\u0131t i\u015Flemi s\u0131ras\u0131nda bir hata olu\u015Ftu\",\n  \"Anonymous\": \"Anonim\",\n  \"Anonymous poll\": \"Anonim anket\",\n  \"Archive\": \"Ar\u015Fivle\",\n  \"Ask a question\": \"Bir soru sor\",\n  \"Attach files\": \"Dosya ekle\",\n  \"Cancel\": \"\u0130ptal\",\n  \"Cannot seek in the recording\": \"Kay\u0131tta arama yap\u0131lam\u0131yor\",\n  \"Channel Missing\": \"Kanal bulunam\u0131yor\",\n  \"Close\": \"Kapat\",\n  \"Close emoji picker\": \"Emoji se\u00E7iciyi kapat\",\n  \"Commands matching\": \"E\u015Fle\u015Fen komutlar\",\n  \"Connection failure, reconnecting now...\": \"Ba\u011Flant\u0131 hatas\u0131, tekrar ba\u011Flan\u0131l\u0131yor...\",\n  \"Create\": \"Olu\u015Ftur\",\n  \"Create poll\": \"Anket olu\u015Ftur\",\n  \"Delete\": \"Sil\",\n  \"Delivered\": \"\u0130letildi\",\n  \"Download attachment {{ name }}\": \"Ek {{ name }}'i indir\",\n  \"Drag your files here\": \"Dosyalar\u0131n\u0131z\u0131 buraya s\u00FCr\u00FCkleyin\",\n  \"Drag your files here to add to your post\": \"G\u00F6nderinize eklemek i\u00E7in dosyalar\u0131n\u0131z\u0131 buraya s\u00FCr\u00FCkleyin\",\n  \"Edit Message\": \"Mesaj\u0131 D\u00FCzenle\",\n  \"Edit message request failed\": \"Mesaj d\u00FCzenleme iste\u011Fi ba\u015Far\u0131s\u0131z oldu\",\n  \"Edited\": \"D\u00FCzenlendi\",\n  \"Emoji matching\": \"Emoji e\u015Fle\u015Ftirme\",\n  \"Empty message...\": \"Bo\u015F mesaj...\",\n  \"End\": \"Son\",\n  \"End vote\": \"Oyu bitir\",\n  \"Error adding flag\": \"Bayrak eklenirken hata olu\u015Ftu\",\n  \"Error connecting to chat, refresh the page to try again.\": \"Ba\u011Flant\u0131 hatas\u0131, sayfay\u0131 yenileyip tekrar deneyin.\",\n  \"Error deleting message\": \"Mesaj silinirken hata olu\u015Ftu\",\n  \"Error fetching reactions\": \"Reaksiyonlar al\u0131n\u0131rken hata olu\u015Ftu\",\n  \"Error marking message unread. Cannot mark unread messages older than the newest 100 channel messages.\": \"Mesaj\u0131 okunmam\u0131\u015F olarak i\u015Faretleme hatas\u0131. En yeni 100 kanal mesaj\u0131ndan daha eski okunmam\u0131\u015F mesajlar\u0131 i\u015Faretleme yap\u0131lamaz.\",\n  \"Error muting a user ...\": \"Kullan\u0131c\u0131y\u0131 sessize al\u0131rken hata olu\u015Ftu ...\",\n  \"Error pinning message\": \"Mesaj sabitlenirken hata olu\u015Ftu\",\n  \"Error removing message pin\": \"Mesaj PIN'i kald\u0131r\u0131l\u0131rken hata olu\u015Ftu\",\n  \"Error reproducing the recording\": \"Kayd\u0131 yeniden \u00FCretme hatas\u0131\",\n  \"Error starting recording\": \"Kay\u0131t ba\u015Flat\u0131l\u0131rken hata olu\u015Ftu\",\n  \"Error unmuting a user ...\": \"Kullan\u0131c\u0131n\u0131n sesini a\u00E7arken hata olu\u015Ftu ...\",\n  \"Error uploading attachment\": \"Ek y\u00FCklenirken hata olu\u015Ftu\",\n  \"Error uploading file\": \"Dosya y\u00FCklenirken hata olu\u015Ftu\",\n  \"Error uploading image\": \"Resmi y\u00FCklerken hata\",\n  \"Error \u00B7 Unsent\": \"Hata \u00B7 G\u00F6nderilemedi\",\n  \"Error: {{ errorMessage }}\": \"Hata: {{ errorMessage }}\",\n  \"Failed to jump to the first unread message\": \"\u0130lk okunmam\u0131\u015F mesaja atlamada hata olu\u015Ftu\",\n  \"Failed to mark channel as read\": \"Kanal\u0131 okundu olarak i\u015Faretleme ba\u015Far\u0131s\u0131z oldu\",\n  \"Failed to play the recording\": \"Kay\u0131t oynat\u0131lamad\u0131\",\n  \"File\": \"Dosya\",\n  \"File is too large: {{ size }}, maximum upload size is {{ limit }}\": \"Dosya \u00E7ok b\u00FCy\u00FCk: {{ size }}, maksimum y\u00FCkleme boyutu {{ limit }}\",\n  \"Flag\": \"Bayrak\",\n  \"Generating...\": \"Olu\u015Fturuluyor...\",\n  \"Latest Messages\": \"Son Mesajlar\",\n  \"Load more\": \"Daha fazla y\u00FCkle\",\n  \"Mark as unread\": \"Okunmam\u0131\u015F olarak i\u015Faretle\",\n  \"Maximum number of votes (from 2 to 10)\": \"Maksimum oy say\u0131s\u0131 (2 ile 10 aras\u0131)\",\n  \"Menu\": \"Men\u00FC\",\n  \"Message Failed \u00B7 Click to try again\": \"Mesaj Ba\u015Far\u0131s\u0131z \u00B7 Tekrar denemek i\u00E7in t\u0131klay\u0131n\",\n  \"Message Failed \u00B7 Unauthorized\": \"Mesaj Ba\u015Far\u0131s\u0131z \u00B7 Yetkisiz\",\n  \"Message deleted\": \"Mesaj silindi\",\n  \"Message has been successfully flagged\": \"Mesaj ba\u015Far\u0131yla bayrakland\u0131\",\n  \"Message pinned\": \"Mesaj sabitlendi\",\n  \"Message was blocked by moderation policies\": \"Mesaj moderasyon politikalar\u0131 taraf\u0131ndan engellendi\",\n  \"Messages have been marked unread.\": \"Mesajlar okunmam\u0131\u015F olarak i\u015Faretlendi.\",\n  \"Missing permissions to upload the attachment\": \"Ek y\u00FCklemek i\u00E7in izinler eksik\",\n  \"Multiple answers\": \"\u00C7oklu cevaplar\",\n  \"Mute\": \"Sessiz\",\n  \"New\": \"Yeni\",\n  \"New Messages!\": \"Yeni Mesajlar!\",\n  \"No chats here yet\u2026\": \"Hen\u00FCz burada sohbet yok...\",\n  \"No results found\": \"Sonu\u00E7 bulunamad\u0131\",\n  \"Nobody will be able to vote in this poll anymore.\": \"Art\u0131k bu ankette kimse oy kullanamayacak.\",\n  \"Nothing yet...\": \"\u015Eimdilik hi\u00E7bir \u015Fey...\",\n  \"Ok\": \"Tamam\",\n  \"Open emoji picker\": \"Emoji klavyesini a\u00E7\",\n  \"Option already exists\": \"Se\u00E7enek zaten mevcut\",\n  \"Options\": \"Se\u00E7enekler\",\n  \"People matching\": \"E\u015Fle\u015Fen ki\u015Filer\",\n  \"Pin\": \"Sabitle\",\n  \"Pinned by\": \"Sabitleyen\",\n  \"Poll\": \"Anket\",\n  \"Poll comments\": \"Anket yorumlar\u0131\",\n  \"Poll options\": \"Anket se\u00E7enekleri\",\n  \"Poll results\": \"Anket sonu\u00E7lar\u0131\",\n  \"Question\": \"Soru\",\n  \"Quote\": \"Al\u0131nt\u0131\",\n  \"Recording format is not supported and cannot be reproduced\": \"Kay\u0131t format\u0131 desteklenmiyor ve \u00E7o\u011Falt\u0131lam\u0131yor\",\n  \"Reply\": \"Cevapla\",\n  \"Reply to Message\": \"Mesaja Cevapla\",\n  \"Search\": \"Arama\",\n  \"Searching...\": \"Aran\u0131yor...\",\n  \"See all options ({{count}})_one\": \"T\u00FCm se\u00E7enekleri g\u00F6ster ({{count}})\",\n  \"See all options ({{count}})_other\": \"T\u00FCm se\u00E7enekleri g\u00F6ster ({{count}})\",\n  \"Select one\": \"Birini se\u00E7in\",\n  \"Select one or more\": \"Bir veya daha fazlas\u0131n\u0131 se\u00E7in\",\n  \"Select up to {{count}}_one\": \"En fazla {{count}}'yi se\u00E7in\",\n  \"Select up to {{count}}_other\": \"En fazla {{count}}'yi se\u00E7in\",\n  \"Send\": \"G\u00F6nder\",\n  \"Send Anyway\": \"Yine de g\u00F6nder\",\n  \"Send message request failed\": \"Mesaj g\u00F6nderme iste\u011Fi ba\u015Far\u0131s\u0131z oldu\",\n  \"Sending...\": \"G\u00F6nderiliyor...\",\n  \"Show all\": \"T\u00FCm\u00FCn\u00FC g\u00F6ster\",\n  \"Shuffle\": \"Kar\u0131\u015Ft\u0131r\",\n  \"Slow Mode ON\": \"Yava\u015F Mod A\u00E7\u0131k\",\n  \"Some of the files will not be accepted\": \"Baz\u0131 dosyalar kabul edilmeyecek\",\n  \"Start typing to search\": \"Aramak i\u00E7in yazmaya ba\u015Flay\u0131n\",\n  \"Submit\": \"G\u00F6nder\",\n  \"Suggest an option\": \"Bir se\u00E7enek \u00F6nerin\",\n  \"Thinking...\": \"D\u00FC\u015F\u00FCn\u00FCyor...\",\n  \"This message did not meet our content guidelines\": \"Bu mesaj i\u00E7erik y\u00F6nergelerimize uygun de\u011Fil\",\n  \"This message was deleted...\": \"Bu mesaj silindi...\",\n  \"Thread\": \"Konu\",\n  \"To start recording, allow the camera access in your browser\": \"Kay\u0131t yapmaya ba\u015Flamak i\u00E7in taray\u0131c\u0131n\u0131zda kameraya eri\u015Fime izin verin\",\n  \"To start recording, allow the microphone access in your browser\": \"Kay\u0131t yapmaya ba\u015Flamak i\u00E7in taray\u0131c\u0131n\u0131zda mikrofona eri\u015Fime izin verin\",\n  \"Type a number from 2 to 10\": \"2 ile 10 aras\u0131nda bir say\u0131 yaz\u0131n\",\n  \"Type your message\": \"Mesaj\u0131n\u0131z\u0131 yaz\u0131n\",\n  \"Unarchive\": \"Ar\u015Fivden \u00E7\u0131kar\",\n  \"Unmute\": \"Sesini a\u00E7\",\n  \"Unpin\": \"Sabitlemeyi kald\u0131r\",\n  \"Unread messages\": \"Okunmam\u0131\u015F mesajlar\",\n  \"Unsupported attachment\": \"Desteklenmeyen ek\",\n  \"Update your comment\": \"Yorumunuzu g\u00FCncelleyin\",\n  \"Upload type: \\\"{{ type }}\\\" is not allowed\": \"Y\u00FCkleme t\u00FCr\u00FC: \\\"{{ type }}\\\" izin verilmez\",\n  \"User uploaded content\": \"Kullan\u0131c\u0131 taraf\u0131ndan y\u00FCklenen i\u00E7erik\",\n  \"View results\": \"Sonu\u00E7lar\u0131 g\u00F6r\u00FCnt\u00FCle\",\n  \"View {{count}} comments_one\": \"{{count}} yorumu g\u00F6r\u00FCnt\u00FCle\",\n  \"View {{count}} comments_other\": \"{{count}} yorumu g\u00F6r\u00FCnt\u00FCle\",\n  \"Voice message\": \"Sesli mesaj\",\n  \"Vote ended\": \"Oylama sona erdi\",\n  \"Wait until all attachments have uploaded\": \"T\u00FCm ekler y\u00FCklenene kadar bekleyin\",\n  \"You\": \"Sen\",\n  \"You have no channels currently\": \"Hen\u00FCz kanal\u0131n\u0131z yok\",\n  \"You've reached the maximum number of files\": \"Maksimum dosya say\u0131s\u0131na ula\u015Ft\u0131n\u0131z\",\n  \"aria/Attachment\": \"Ek\",\n  \"aria/Cancel Reply\": \"Cevab\u0131 \u0130ptal Et\",\n  \"aria/Cancel upload\": \"Y\u00FCklemeyi \u0130ptal Et\",\n  \"aria/Channel list\": \"Kanal listesi\",\n  \"aria/Channel search results\": \"Kanal arama sonu\u00E7lar\u0131\",\n  \"aria/Close thread\": \"Konuyu kapat\",\n  \"aria/Download attachment\": \"Ek indir\",\n  \"aria/Emoji picker\": \"Emoji se\u00E7ici\",\n  \"aria/File input\": \"Dosya giri\u015Fi\",\n  \"aria/File upload\": \"Dosya y\u00FCkleme\",\n  \"aria/Image input\": \"Resim giri\u015Fi\",\n  \"aria/Load More Channels\": \"Daha Fazla Kanal Y\u00FCkle\",\n  \"aria/Menu\": \"Men\u00FC\",\n  \"aria/Message Options\": \"Mesaj Se\u00E7enekleri\",\n  \"aria/Open Attachment Selector\": \"Ek Se\u00E7iciyi A\u00E7\",\n  \"aria/Open Message Actions Menu\": \"Mesaj \u0130\u015Flemleri Men\u00FCs\u00FCn\u00FC A\u00E7\",\n  \"aria/Open Reaction Selector\": \"Tepki Se\u00E7iciyi A\u00E7\",\n  \"aria/Open Thread\": \"Konuyu A\u00E7\",\n  \"aria/Reaction list\": \"Tepki listesi\",\n  \"aria/Remove attachment\": \"Eki kald\u0131r\",\n  \"aria/Retry upload\": \"Y\u00FCklemeyi Tekrar Dene\",\n  \"aria/Search results\": \"Arama sonu\u00E7lar\u0131\",\n  \"aria/Search results header filter button\": \"Arama sonu\u00E7lar\u0131 ba\u015Fl\u0131k filtre d\u00FC\u011Fmesi\",\n  \"aria/Send\": \"G\u00F6nder\",\n  \"aria/Stop AI Generation\": \"Yapay Zeka \u00DCretimini Durdur\",\n  \"ban-command-args\": \"[@kullan\u0131c\u0131ad\u0131] [metin]\",\n  \"ban-command-description\": \"Bir kullan\u0131c\u0131y\u0131 yasakla\",\n  \"giphy-command-args\": \"[metin]\",\n  \"giphy-command-description\": \"Rastgele bir gif'i kanala g\u00F6nder\",\n  \"live\": \"canl\u0131\",\n  \"mute-command-args\": \"[@kullan\u0131c\u0131ad\u0131]\",\n  \"mute-command-description\": \"Bir kullan\u0131c\u0131n\u0131n sesini kapat\",\n  \"replyCount_one\": \"1 cevap\",\n  \"replyCount_other\": \"{{ count }} cevap\",\n  \"search-results-header-filter-source-button-label--channels\": \"kanallar\",\n  \"search-results-header-filter-source-button-label--messages\": \"mesajlar\",\n  \"search-results-header-filter-source-button-label--users\": \"kullan\u0131c\u0131lar\",\n  \"searchResultsCount_one\": \"1 sonu\u00E7\",\n  \"searchResultsCount_other\": \"{{ count }} sonu\u00E7\",\n  \"this content could not be displayed\": \"bu i\u00E7erik g\u00F6sterilemiyor\",\n  \"timestamp/DateSeparator\": \"{{ timestamp | timestampFormatter(calendar: true) }}\",\n  \"timestamp/MessageTimestamp\": \"{{ timestamp | timestampFormatter(calendar: true) }}\",\n  \"timestamp/PollVote\": \"{{ timestamp | timestampFormatter(format: MMM D [at] HH:mm) }}\",\n  \"timestamp/PollVoteTooltip\": \"{{ timestamp | timestampFormatter(calendar: true) }}\",\n  \"timestamp/SystemMessage\": \"{{ timestamp | timestampFormatter(format: dddd L) }}\",\n  \"unban-command-args\": \"[@kullan\u0131c\u0131ad\u0131]\",\n  \"unban-command-description\": \"Bir kullan\u0131c\u0131n\u0131n yasa\u011F\u0131n\u0131 kald\u0131r\",\n  \"unmute-command-args\": \"[@kullan\u0131c\u0131ad\u0131]\",\n  \"unmute-command-description\": \"Bir kullan\u0131c\u0131n\u0131n sesini a\u00E7\",\n  \"unreadMessagesSeparatorText_one\": \"1 okunmam\u0131\u015F mesaj\",\n  \"unreadMessagesSeparatorText_other\": \"{{count}} okunmam\u0131\u015F mesaj\",\n  \"{{ commaSeparatedUsers }} and {{ moreCount }} more\": \"{{ commaSeparatedUsers }} ve {{ moreCount }} daha\",\n  \"{{ commaSeparatedUsers }}, and {{ lastUser }}\": \"{{ commaSeparatedUsers }} ve {{ lastUser }}\",\n  \"{{ firstUser }} and {{ secondUser }}\": \"{{ firstUser }} ve {{ secondUser }}\",\n  \"{{ imageCount }} more\": \"{{ imageCount }} adet daha\",\n  \"{{ memberCount }} members\": \"{{ memberCount }} \u00FCye\",\n  \"{{ user }} has been muted\": \"{{ user }} sessize al\u0131nd\u0131\",\n  \"{{ user }} has been unmuted\": \"{{ user }} sesi a\u00E7\u0131ld\u0131\",\n  \"{{ user }} is typing...\": \"{{ user }} yaz\u0131yor...\",\n  \"{{ users }} and more are typing...\": \"{{ users }} ve di\u011Ferleri yaz\u0131yor...\",\n  \"{{ users }} and {{ user }} are typing...\": \"{{ users }} ve {{ user }} yaz\u0131yor...\",\n  \"{{ watcherCount }} online\": \"{{ watcherCount }} \u00E7evrimi\u00E7i\",\n  \"{{count}} unread_one\": \"{{count}} okunmam\u0131\u015F\",\n  \"{{count}} unread_other\": \"{{count}} okunmam\u0131\u015F\",\n  \"{{count}} votes_one\": \"{{count}} oy\",\n  \"{{count}} votes_other\": \"{{count}} oy\",\n  \"\uD83C\uDFD9 Attachment...\": \"\uD83C\uDFD9 Ek...\",\n  \"\uD83D\uDCCA {{createdBy}} created: {{ pollName}}\": \"\uD83D\uDCCA {{createdBy}} olu\u015Fturdu: {{ pollName}}\",\n  \"\uD83D\uDCCA {{votedBy}} voted: {{pollOptionText}}\": \"\uD83D\uDCCA {{votedBy}} oy verdi: {{pollOptionText}}\"\n}\n", "import i18n, { TFunction } from 'i18next';\nimport Dayjs from 'dayjs';\nimport calendar from 'dayjs/plugin/calendar';\nimport updateLocale from 'dayjs/plugin/updateLocale';\nimport LocalizedFormat from 'dayjs/plugin/localizedFormat';\nimport localeData from 'dayjs/plugin/localeData';\nimport relativeTime from 'dayjs/plugin/relativeTime';\nimport utc from 'dayjs/plugin/utc';\nimport timezone from 'dayjs/plugin/timezone';\nimport { defaultTranslatorFunction, predefinedFormatters } from './utils';\n\nimport type momentTimezone from 'moment-timezone';\nimport type { TranslationLanguages } from 'stream-chat';\n\nimport type { UnknownType } from '../types/types';\nimport type { CustomFormatters, PredefinedFormatters, TDateTimeParser } from './types';\n\nimport {\n  deTranslations,\n  enTranslations,\n  esTranslations,\n  frTranslations,\n  hiTranslations,\n  itTranslations,\n  jaTranslations,\n  koTranslations,\n  nlTranslations,\n  ptTranslations,\n  ruTranslations,\n  trTranslations,\n} from './translations';\n\nimport 'dayjs/locale/de';\nimport 'dayjs/locale/es';\nimport 'dayjs/locale/fr';\nimport 'dayjs/locale/hi';\nimport 'dayjs/locale/it';\nimport 'dayjs/locale/ja';\nimport 'dayjs/locale/ko';\nimport 'dayjs/locale/nl';\nimport 'dayjs/locale/pt';\nimport 'dayjs/locale/ru';\nimport 'dayjs/locale/tr';\n// These locale imports also set these locale globally.\n// So As a last step I am going to import english locale\n// to make sure I don't mess up language at other places in app.\nimport 'dayjs/locale/en';\n\nconst defaultNS = 'translation';\nconst defaultLng = 'en';\n\ntype CalendarLocaleConfig = {\n  lastDay: string;\n  lastWeek: string;\n  nextDay: string;\n  nextWeek: string;\n  sameDay: string;\n  sameElse: string;\n};\n\nDayjs.extend(updateLocale);\nDayjs.extend(utc);\nDayjs.extend(timezone);\n\nDayjs.updateLocale('de', {\n  calendar: {\n    lastDay: '[gestern um] LT',\n    lastWeek: '[letzten] dddd [um] LT',\n    nextDay: '[morgen um] LT',\n    nextWeek: 'dddd [um] LT',\n    sameDay: '[heute um] LT',\n    sameElse: 'L',\n  },\n});\n\nDayjs.updateLocale('es', {\n  calendar: {\n    lastDay: '[ayer a las] LT',\n    lastWeek: '[pasado] dddd [a] LT',\n    nextDay: '[ma\u00F1ana a] LT',\n    nextWeek: 'dddd [a] LT',\n    sameDay: '[hoy a las] LT',\n    sameElse: 'L',\n  },\n});\n\nDayjs.updateLocale('fr', {\n  calendar: {\n    lastDay: '[Hier \u00E0] LT',\n    lastWeek: 'dddd [dernier \u00E0] LT',\n    nextDay: '[Demain \u00E0] LT',\n    nextWeek: 'dddd [\u00E0] LT',\n    sameDay: '[Aujourd\u2019hui \u00E0] LT',\n    sameElse: 'L',\n  },\n});\n\nDayjs.updateLocale('hi', {\n  calendar: {\n    lastDay: '[\u0915\u0932] LT',\n    lastWeek: '[\u092A\u093F\u091B\u0932\u0947] dddd, LT',\n    nextDay: '[\u0915\u0932] LT',\n    nextWeek: 'dddd, LT',\n    sameDay: '[\u0906\u091C] LT',\n    sameElse: 'L',\n  },\n  // Hindi notation for meridiems are quite fuzzy in practice. While there exists\n  // a rigid notion of a 'Pahar' it is not used as rigidly in modern Hindi.\n  meridiem(hour: number) {\n    if (hour < 4) {\n      return '\u0930\u093E\u0924';\n    } else if (hour < 10) {\n      return '\u0938\u0941\u092C\u0939';\n    } else if (hour < 17) {\n      return '\u0926\u094B\u092A\u0939\u0930';\n    } else if (hour < 20) {\n      return '\u0936\u093E\u092E';\n    } else {\n      return '\u0930\u093E\u0924';\n    }\n  },\n  meridiemHour(hour: number, meridiem: string) {\n    if (hour === 12) {\n      hour = 0;\n    }\n    if (meridiem === '\u0930\u093E\u0924') {\n      return hour < 4 ? hour : hour + 12;\n    } else if (meridiem === '\u0938\u0941\u092C\u0939') {\n      return hour;\n    } else if (meridiem === '\u0926\u094B\u092A\u0939\u0930') {\n      return hour >= 10 ? hour : hour + 12;\n    } else if (meridiem === '\u0936\u093E\u092E') {\n      return hour + 12;\n    }\n    return hour;\n  },\n  meridiemParse: /\u0930\u093E\u0924|\u0938\u0941\u092C\u0939|\u0926\u094B\u092A\u0939\u0930|\u0936\u093E\u092E/,\n});\n\nDayjs.updateLocale('it', {\n  calendar: {\n    lastDay: '[Ieri alle] LT',\n    lastWeek: '[lo scorso] dddd [alle] LT',\n    nextDay: '[Domani alle] LT',\n    nextWeek: 'dddd [alle] LT',\n    sameDay: '[Oggi alle] LT',\n    sameElse: 'L',\n  },\n});\n\nDayjs.updateLocale('ja', {\n  calendar: {\n    lastDay: '[\u6628\u65E5] LT',\n    lastWeek: 'dddd LT',\n    nextDay: '[\u660E\u65E5] LT',\n    nextWeek: '[\u6B21\u306E] dddd LT',\n    sameDay: '[\u4ECA\u65E5] LT',\n    sameElse: 'L',\n  },\n});\n\nDayjs.updateLocale('ko', {\n  calendar: {\n    lastDay: '[\uC5B4\uC81C] LT',\n    lastWeek: '[\uC9C0\uB09C] dddd LT',\n    nextDay: '[\uB0B4\uC77C] LT',\n    nextWeek: 'dddd LT',\n    sameDay: '[\uC624\uB298] LT',\n    sameElse: 'L',\n  },\n});\n\nDayjs.updateLocale('nl', {\n  calendar: {\n    lastDay: '[gisteren om] LT',\n    lastWeek: '[afgelopen] dddd [om] LT',\n    nextDay: '[morgen om] LT',\n    nextWeek: 'dddd [om] LT',\n    sameDay: '[vandaag om] LT',\n    sameElse: 'L',\n  },\n});\n\nDayjs.updateLocale('pt', {\n  calendar: {\n    lastDay: '[ontem \u00E0s] LT',\n    lastWeek: 'dddd [passada \u00E0s] LT',\n    nextDay: '[amanh\u00E3 \u00E0s] LT',\n    nextWeek: 'dddd [\u00E0s] LT',\n    sameDay: '[hoje \u00E0s] LT',\n    sameElse: 'L',\n  },\n});\n\nDayjs.updateLocale('ru', {\n  calendar: {\n    lastDay: '[\u0412\u0447\u0435\u0440\u0430, \u0432] LT',\n    nextDay: '[\u0417\u0430\u0432\u0442\u0440\u0430, \u0432] LT',\n    sameDay: '[\u0421\u0435\u0433\u043E\u0434\u043D\u044F, \u0432] LT',\n  },\n});\n\nDayjs.updateLocale('tr', {\n  calendar: {\n    lastDay: '[d\u00FCn] LT',\n    lastWeek: '[ge\u00E7en] dddd [saat] LT',\n    nextDay: '[yar\u0131n saat] LT',\n    nextWeek: '[gelecek] dddd [saat] LT',\n    sameDay: '[bug\u00FCn saat] LT',\n    sameElse: 'L',\n  },\n});\n\nconst en_locale = {\n  formats: {},\n  months: [\n    'January',\n    'February',\n    'March',\n    'April',\n    'May',\n    'June',\n    'July',\n    'August',\n    'September',\n    'October',\n    'November',\n    'December',\n  ],\n  relativeTime: {},\n  weekdays: [\n    'Sunday',\n    'Monday',\n    'Tuesday',\n    'Wednesday',\n    'Thursday',\n    'Friday',\n    'Saturday',\n  ],\n};\n\ntype DateTimeParserModule = typeof Dayjs | typeof momentTimezone;\n// Type guards to check DayJs\nconst isDayJs = (dateTimeParser: DateTimeParserModule): dateTimeParser is typeof Dayjs =>\n  (dateTimeParser as typeof Dayjs).extend !== undefined;\n\ntype TimezoneParser = {\n  tz: momentTimezone.MomentTimezone | Dayjs.Dayjs;\n};\nconst supportsTz = (dateTimeParser: unknown): dateTimeParser is TimezoneParser =>\n  (dateTimeParser as TimezoneParser).tz !== undefined;\n\nexport type Streami18nOptions = {\n  DateTimeParser?: DateTimeParserModule;\n  dayjsLocaleConfigForLanguage?: Partial<ILocale> & { calendar?: CalendarLocaleConfig };\n  debug?: boolean;\n  disableDateTimeTranslations?: boolean;\n  formatters?: Partial<PredefinedFormatters> & CustomFormatters;\n  language?: TranslationLanguages;\n  logger?: (message?: string) => void;\n  parseMissingKeyHandler?: (key: string, defaultValue?: string) => string;\n  timezone?: string;\n  translationsForLanguage?: Partial<typeof enTranslations>;\n};\n\n/**\n * Wrapper around [i18next](https://www.i18next.com/) class for Stream related translations.\n * Instance of this class should be provided to Chat component to handle translations.\n * Stream provides following list of in-built translations:\n * 1. English (en)\n * 2. Dutch (nl)\n * 3. Russian (ru)\n * 4. Turkish (tr)\n * 5. French (fr)\n * 6. Italian (it)\n * 7. Hindi (hi)\n * 8. Spanish (es)\n * 9. Portuguese (pt)\n * 10. German (de)\n * 11. Japanese (ja)\n * 12. Korean (ko)\n *\n * Simplest way to start using chat components in one of the in-built languages would be following:\n *\n * ```\n * const i18n = new Streami18n({ language 'nl' });\n * <Chat client={chatClient} i18nInstance={i18n}>\n *  ...\n * </Chat>\n * ```\n *\n * If you would like to override certain keys in in-built translation.\n * UI will be automatically updated in this case.\n *\n * ```\n * const i18n = new Streami18n({\n *  language: 'nl',\n *  translationsForLanguage: {\n *    'Nothing yet...': 'Nog Niet ...',\n *    '{{ firstUser }} and {{ secondUser }} are typing...': '{{ firstUser }} en {{ secondUser }} zijn aan het typen...',\n *  }\n * });\n *\n * If you would like to register additional languages, use registerTranslation. You can add as many languages as you want:\n *\n * i18n.registerTranslation('zh', {\n *  'Nothing yet...': 'Nog Niet ...',\n *  '{{ firstUser }} and {{ secondUser }} are typing...': '{{ firstUser }} en {{ secondUser }} zijn aan het typen...',\n * });\n *\n * <Chat client={chatClient} i18nInstance={i18n}>\n *  ...\n * </Chat>\n * ```\n *\n * You can use the same function to add whole new language as well.\n *\n * ```\n * const i18n = new Streami18n();\n *\n * i18n.registerTranslation('mr', {\n *  'Nothing yet...': '\u0915\u093E\u0939\u0940\u0939\u0940 \u0928\u093E\u0939\u0940  ...',\n *  '{{ firstUser }} and {{ secondUser }} are typing...': '{{ firstUser }} \u0906\u0923\u093F {{ secondUser }} \u091F\u0940\u092A\u0940 \u0915\u0930\u0924 \u0906\u0939\u0947\u0924 ',\n * });\n *\n * // Make sure to call setLanguage to reflect new language in UI.\n * i18n.setLanguage('it');\n * <Chat client={chatClient} i18nInstance={i18n}>\n *  ...\n * </Chat>\n * ```\n *\n * ## Datetime translations\n *\n * Stream react chat components uses [dayjs](https://day.js.org/en/) internally by default to format datetime stamp.\n * e.g., in ChannelPreview, MessageContent components.\n * Dayjs has locale support as well - https://day.js.org/docs/en/i18n/i18n\n * Dayjs is a lightweight alternative to Momentjs with the same modern API.\n *\n * Dayjs provides locale config for plenty of languages, you can check the whole list of locale configs at following url\n * https://github.com/iamkun/dayjs/tree/dev/src/locale\n *\n * You can either provide the dayjs locale config while registering\n * language with Streami18n (either via constructor or registerTranslation()) or you can provide your own Dayjs or Moment instance\n * to Streami18n constructor, which will be then used internally (using the language locale) in components.\n *\n * 1. Via language registration\n *\n * e.g.,\n * ```\n * const i18n = new Streami18n({\n *  language: 'nl',\n *  dayjsLocaleConfigForLanguage: {\n *    months: [...],\n *    monthsShort: [...],\n *    calendar: {\n *      sameDay: ...'\n *    }\n *  }\n * });\n * ```\n *\n * Similarly, you can add locale config for moment while registering translation via `registerTranslation` function.\n *\n * e.g.,\n * ```\n * const i18n = new Streami18n();\n *\n * i18n.registerTranslation(\n *  'mr',\n *  {\n *    'Nothing yet...': '\u0915\u093E\u0939\u0940\u0939\u0940 \u0928\u093E\u0939\u0940  ...',\n *    '{{ firstUser }} and {{ secondUser }} are typing...': '{{ firstUser }} \u0906\u0923\u093F {{ secondUser }} \u091F\u0940\u092A\u0940 \u0915\u0930\u0924 \u0906\u0939\u0947\u0924 ',\n *  },\n *  {\n *    months: [...],\n *    monthsShort: [...],\n *    calendar: {\n *      sameDay: ...'\n *    }\n *  }\n * );\n *```\n * 2. Provide your own Moment object\n *\n * ```js\n * import 'moment/locale/nl';\n * import 'moment/locale/it';\n * // or if you want to include all locales\n * import 'moment/min/locales';\n *\n * import Moment from moment\n *\n * const i18n = new Streami18n({\n *  language: 'nl',\n *  DateTimeParser: Moment\n * })\n * ```\n *\n * 3. Provide your own Dayjs object\n *\n * ```js\n * import Dayjs from 'dayjs'\n *\n * import 'dayjs/locale/nl';\n * import 'dayjs/locale/it';\n * // or if you want to include all locales\n * import 'dayjs/min/locales';\n *\n * const i18n = new Streami18n({\n *  language: 'nl',\n *  DateTimeParser: Dayjs\n * })\n * ```\n * If you would like to stick with english language for datetimes in Stream components, you can set `disableDateTimeTranslations` to true.\n *\n */\nconst defaultStreami18nOptions = {\n  DateTimeParser: Dayjs,\n  dayjsLocaleConfigForLanguage: null,\n  debug: false,\n  disableDateTimeTranslations: false,\n  language: 'en' as TranslationLanguages,\n  logger: (message?: string) => console.warn(message),\n};\n\nexport class Streami18n {\n  i18nInstance = i18n.createInstance();\n  Dayjs = null;\n  setLanguageCallback: (t: TFunction) => void = () => null;\n  initialized = false;\n\n  t: TFunction = defaultTranslatorFunction;\n  tDateTimeParser: TDateTimeParser;\n\n  translations: {\n    [key: string]: {\n      [key: string]: typeof enTranslations | UnknownType;\n    };\n  } = {\n    de: { [defaultNS]: deTranslations },\n    en: { [defaultNS]: enTranslations },\n    es: { [defaultNS]: esTranslations },\n    fr: { [defaultNS]: frTranslations },\n    hi: { [defaultNS]: hiTranslations },\n    it: { [defaultNS]: itTranslations },\n    ja: { [defaultNS]: jaTranslations },\n    ko: { [defaultNS]: koTranslations },\n    nl: { [defaultNS]: nlTranslations },\n    pt: { [defaultNS]: ptTranslations },\n    ru: { [defaultNS]: ruTranslations },\n    tr: { [defaultNS]: trTranslations },\n  };\n\n  /**\n   * dayjs.defineLanguage('nl') also changes the global locale. We don't want to do that\n   * when user calls registerTranslation() function. So instead we will store the locale configs\n   * given to registerTranslation() function in `dayjsLocales` object, and register the required locale\n   * with moment, when setLanguage is called.\n   * */\n  dayjsLocales: { [key: string]: Partial<ILocale> } = {};\n  // dayjsLocales = {};\n\n  /**\n   * Initialize properties used in constructor\n   */\n  logger: (msg?: string) => void;\n  currentLanguage: TranslationLanguages;\n  DateTimeParser: DateTimeParserModule;\n  formatters: PredefinedFormatters & CustomFormatters = predefinedFormatters;\n  isCustomDateTimeParser: boolean;\n  i18nextConfig: {\n    debug: boolean;\n    fallbackLng: false;\n    interpolation: { escapeValue: boolean; formatSeparator: string };\n    keySeparator: false;\n    lng: string;\n    nsSeparator: false;\n    parseMissingKeyHandler?: (key: string, defaultValue?: string) => string;\n  };\n  /**\n   * A valid TZ identifier string (https://en.wikipedia.org/wiki/List_of_tz_database_time_zones)\n   */\n  timezone?: string;\n  /**\n   * Constructor accepts following options:\n   *  - language (String) default: 'en'\n   *    Language code e.g., en, tr\n   *\n   *  - translationsForLanguage (object)\n   *    Translations object. Please check src/i18n/en.json for example.\n   *\n   *  - disableDateTimeTranslations (boolean) default: false\n   *    Disable translations for date-times\n   *\n   *  - debug (boolean) default: false\n   *    Enable debug mode in internal i18n class\n   *\n   *  - logger (function) default: () => {}\n   *    Logger function to log warnings/errors from this class\n   *\n   *  - dayjsLocaleConfigForLanguage (object) default: 'enConfig'\n   *    [Config object](https://momentjs.com/docs/#/i18n/changing-locale/) for internal moment object,\n   *    corresponding to language (param)\n   *\n   *  - DateTimeParser (function) Moment or Dayjs instance/function.\n   *    Make sure to load all the required locales in this Moment or Dayjs instance that you will be provide to Streami18n\n   *\n   * @param {*} options\n   */\n  constructor(options: Streami18nOptions = {}) {\n    const finalOptions = {\n      ...defaultStreami18nOptions,\n      ...options,\n    };\n    // Prepare the i18next configuration.\n    this.logger = finalOptions.logger;\n    this.currentLanguage = finalOptions.language;\n    this.DateTimeParser = finalOptions.DateTimeParser;\n    this.timezone = finalOptions.timezone;\n    this.formatters = { ...predefinedFormatters, ...options?.formatters };\n\n    try {\n      if (this.DateTimeParser && isDayJs(this.DateTimeParser)) {\n        this.DateTimeParser.extend(LocalizedFormat);\n        this.DateTimeParser.extend(calendar);\n        this.DateTimeParser.extend(localeData);\n        this.DateTimeParser.extend(relativeTime);\n      }\n    } catch (error) {\n      throw Error(\n        `Streami18n: Looks like you wanted to provide Dayjs instance, but something went wrong while adding plugins ${error}`,\n      );\n    }\n\n    this.isCustomDateTimeParser = !!options.DateTimeParser;\n    const translationsForLanguage = finalOptions.translationsForLanguage;\n\n    if (translationsForLanguage) {\n      this.translations[this.currentLanguage] = {\n        [defaultNS]:\n          this.translations[this.currentLanguage] &&\n          this.translations[this.currentLanguage][defaultNS]\n            ? {\n                ...this.translations[this.currentLanguage][defaultNS],\n                ...translationsForLanguage,\n              }\n            : translationsForLanguage,\n      };\n    }\n\n    // If translations don't exist for given language, then set it as empty object.\n    if (!this.translations[this.currentLanguage]) {\n      this.translations[this.currentLanguage] = {\n        [defaultNS]: {},\n      };\n    }\n\n    this.i18nextConfig = {\n      debug: finalOptions.debug,\n      fallbackLng: false,\n      interpolation: { escapeValue: false, formatSeparator: '|' },\n      keySeparator: false,\n      lng: this.currentLanguage,\n      nsSeparator: false,\n    };\n\n    if (finalOptions.parseMissingKeyHandler) {\n      this.i18nextConfig.parseMissingKeyHandler = finalOptions.parseMissingKeyHandler;\n    }\n\n    this.validateCurrentLanguage();\n\n    const dayjsLocaleConfigForLanguage = finalOptions.dayjsLocaleConfigForLanguage;\n\n    if (dayjsLocaleConfigForLanguage) {\n      this.addOrUpdateLocale(this.currentLanguage, {\n        ...dayjsLocaleConfigForLanguage,\n      });\n    } else if (!this.localeExists(this.currentLanguage)) {\n      this.logger(\n        `Streami18n: Streami18n(...) - Locale config for ${this.currentLanguage} does not exist in momentjs.` +\n          `Please import the locale file using \"import 'moment/locale/${this.currentLanguage}';\" in your app or ` +\n          `register the locale config with Streami18n using registerTranslation(language, translation, customDayjsLocale)`,\n      );\n    }\n\n    this.tDateTimeParser = (timestamp) => {\n      const language =\n        finalOptions.disableDateTimeTranslations ||\n        !this.localeExists(this.currentLanguage)\n          ? defaultLng\n          : this.currentLanguage;\n\n      if (isDayJs(this.DateTimeParser)) {\n        return supportsTz(this.DateTimeParser)\n          ? this.DateTimeParser(timestamp).tz(this.timezone).locale(language)\n          : this.DateTimeParser(timestamp).locale(language);\n      }\n\n      if (supportsTz(this.DateTimeParser) && this.timezone) {\n        return this.DateTimeParser(timestamp).tz(this.timezone).locale(language);\n      }\n      return this.DateTimeParser(timestamp).locale(language);\n    };\n  }\n\n  /**\n   * Initializes the i18next instance with configuration (which enables natural language as default keys)\n   */\n  async init() {\n    this.validateCurrentLanguage();\n\n    try {\n      this.t = await this.i18nInstance.init({\n        ...this.i18nextConfig,\n        lng: this.currentLanguage,\n        resources: this.translations,\n      });\n      this.initialized = true;\n      if (this.formatters) {\n        Object.entries(this.formatters).forEach(([name, formatterFactory]) => {\n          if (!formatterFactory) return;\n          this.i18nInstance.services.formatter?.add(name, formatterFactory(this));\n        });\n      }\n    } catch (error) {\n      this.logger(`Something went wrong with init: ${JSON.stringify(error)}`);\n    }\n\n    return {\n      t: this.t,\n      tDateTimeParser: this.tDateTimeParser,\n    };\n  }\n\n  localeExists = (language: TranslationLanguages) => {\n    if (this.isCustomDateTimeParser) return true;\n\n    return Object.keys(Dayjs.Ls).indexOf(language) > -1;\n  };\n\n  validateCurrentLanguage = () => {\n    const availableLanguages = Object.keys(this.translations);\n    if (availableLanguages.indexOf(this.currentLanguage) === -1) {\n      this.logger(\n        `Streami18n: '${this.currentLanguage}' language is not registered.` +\n          ` Please make sure to call streami18n.registerTranslation('${this.currentLanguage}', {...}) or ` +\n          `use one the built-in supported languages - ${this.getAvailableLanguages()}`,\n      );\n\n      this.currentLanguage = defaultLng;\n    }\n  };\n\n  /** Returns an instance of i18next used within this class instance */\n  geti18Instance = () => this.i18nInstance;\n\n  /** Returns list of available languages. */\n  getAvailableLanguages = () => Object.keys(this.translations);\n\n  /** Returns all the translation dictionary for all inbuilt-languages */\n  getTranslations = () => this.translations;\n\n  /**\n   * Returns current version translator function.\n   */\n  async getTranslators() {\n    if (!this.initialized) {\n      if (this.dayjsLocales[this.currentLanguage]) {\n        this.addOrUpdateLocale(\n          this.currentLanguage,\n          this.dayjsLocales[this.currentLanguage],\n        );\n      }\n\n      return await this.init();\n    } else {\n      return {\n        t: this.t,\n        tDateTimeParser: this.tDateTimeParser,\n      };\n    }\n  }\n\n  registerTranslation(\n    language: TranslationLanguages,\n    translation: typeof enTranslations,\n    customDayjsLocale?: Partial<ILocale>,\n  ) {\n    if (!translation) {\n      this.logger(\n        `Streami18n: registerTranslation(language, translation, customDayjsLocale) called without translation`,\n      );\n      return;\n    }\n\n    if (!this.translations[language]) {\n      this.translations[language] = { [defaultNS]: translation };\n    } else {\n      this.translations[language][defaultNS] = translation;\n    }\n\n    if (customDayjsLocale) {\n      this.dayjsLocales[language] = { ...customDayjsLocale };\n    } else if (!this.localeExists(language)) {\n      this.logger(\n        `Streami18n: registerTranslation(language, translation, customDayjsLocale) - ` +\n          `Locale config for ${language} does not exist in Dayjs.` +\n          `Please import the locale file using \"import 'dayjs/locale/${language}';\" in your app or ` +\n          `register the locale config with Streami18n using registerTranslation(language, translation, customDayjsLocale)`,\n      );\n    }\n\n    if (this.initialized) {\n      this.i18nInstance.addResources(language, defaultNS, translation);\n    }\n  }\n\n  addOrUpdateLocale(key: TranslationLanguages, config: Partial<ILocale>) {\n    if (this.localeExists(key)) {\n      Dayjs.updateLocale(key, { ...config });\n    } else {\n      // Merging the custom locale config with en config, so missing keys can default to english.\n      Dayjs.locale({ name: key, ...en_locale, ...config }, undefined, true);\n    }\n  }\n\n  async setLanguage(language: TranslationLanguages) {\n    this.currentLanguage = language;\n\n    if (!this.initialized) return;\n\n    try {\n      const t = await this.i18nInstance.changeLanguage(language);\n      if (this.dayjsLocales[language]) {\n        this.addOrUpdateLocale(\n          this.currentLanguage,\n          this.dayjsLocales[this.currentLanguage],\n        );\n      }\n\n      this.setLanguageCallback(t);\n      return t;\n    } catch (error) {\n      this.logger(`Failed to set language: ${JSON.stringify(error)}`);\n      return this.t;\n    }\n  }\n\n  registerSetLanguageCallback(callback: (t: TFunction) => void) {\n    this.setLanguageCallback = callback;\n  }\n}\n", "import { useMemo } from 'react';\n\nimport type { TypingContextValue } from '../../../context/TypingContext';\nimport type { DefaultStreamChatGenerics } from '../../../types/types';\n\nexport const useCreateTypingContext = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  value: TypingContextValue<StreamChatGenerics>,\n) => {\n  const { typing } = value;\n\n  const typingValue = Object.keys(typing || {}).join();\n\n  const typingContext: TypingContextValue<StreamChatGenerics> = useMemo(\n    () => ({\n      typing,\n    }),\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    [typingValue],\n  );\n\n  return typingContext;\n};\n", "import { useChatContext } from '../../../context/ChatContext';\n\nimport type { StreamChat, UpdatedMessage } from 'stream-chat';\n\nimport type {\n  DefaultStreamChatGenerics,\n  UpdateMessageOptions,\n} from '../../../types/types';\n\ntype UpdateHandler<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = (\n  cid: string,\n  updatedMessage: UpdatedMessage<StreamChatGenerics>,\n  options?: UpdateMessageOptions,\n) => ReturnType<StreamChat<StreamChatGenerics>['updateMessage']>;\n\nexport const useEditMessageHandler = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  doUpdateMessageRequest?: UpdateHandler<StreamChatGenerics>,\n) => {\n  const { channel, client } = useChatContext<StreamChatGenerics>('useEditMessageHandler');\n\n  return (\n    updatedMessage: UpdatedMessage<StreamChatGenerics>,\n    options?: UpdateMessageOptions,\n  ) => {\n    if (doUpdateMessageRequest && channel) {\n      return Promise.resolve(\n        doUpdateMessageRequest(channel.cid, updatedMessage, options),\n      );\n    }\n    return client.updateMessage(updatedMessage, undefined, options);\n  };\n};\n", "import { useEffect, useRef } from 'react';\n\nexport const useIsMounted = () => {\n  const isMounted = useRef(false);\n\n  useEffect(() => {\n    isMounted.current = true;\n    return () => {\n      isMounted.current = false;\n    };\n  }, []);\n\n  return isMounted;\n};\n", "import React, { useCallback } from 'react';\n\nimport type { UserResponse } from 'stream-chat';\n\nimport type { DefaultStreamChatGenerics } from '../../../types/types';\n\nexport type OnMentionAction<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = (event: React.BaseSyntheticEvent, user?: UserResponse<StreamChatGenerics>) => void;\n\nexport const useMentionsHandlers = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  onMentionsHover?: OnMentionAction<StreamChatGenerics>,\n  onMentionsClick?: OnMentionAction<StreamChatGenerics>,\n) =>\n  useCallback(\n    (\n      event: React.BaseSyntheticEvent,\n      mentioned_users: UserResponse<StreamChatGenerics>[],\n    ) => {\n      if (\n        (!onMentionsHover && !onMentionsClick) ||\n        !(event.target instanceof HTMLElement)\n      ) {\n        return;\n      }\n\n      const target = event.target;\n      const textContent = target.innerHTML.replace('*', '');\n\n      if (textContent[0] === '@') {\n        const userName = textContent.replace('@', '');\n        const user = mentioned_users?.find(\n          ({ id, name }) => name === userName || id === userName,\n        );\n\n        if (\n          onMentionsHover &&\n          typeof onMentionsHover === 'function' &&\n          event.type === 'mouseover'\n        ) {\n          onMentionsHover(event, user);\n        }\n\n        if (\n          onMentionsClick &&\n          event.type === 'click' &&\n          typeof onMentionsClick === 'function'\n        ) {\n          onMentionsClick(event, user);\n        }\n      }\n    },\n    [onMentionsClick, onMentionsHover],\n  );\n", "import React from 'react';\n\nconst LoadingItems = () => (\n  <div className='str-chat__loading-channels-item str-chat__channel-preview-loading'>\n    <div className='str-chat__loading-channels-avatar' />\n    <div className='str-chat__loading-channels-meta str-chat__channel-preview-end-loading'>\n      <div className='str-chat__loading-channels-username' />\n      <div className='str-chat__loading-channels-status' />\n    </div>\n  </div>\n);\n\nconst UnMemoizedLoadingChannels = () => (\n  <div className='str-chat__loading-channels'>\n    <LoadingItems />\n    <LoadingItems />\n    <LoadingItems />\n  </div>\n);\n\n/**\n * Loading indicator for the ChannelList\n */\nexport const LoadingChannels = React.memo(UnMemoizedLoadingChannels);\n", "import React from 'react';\n\nimport { useTranslationContext } from '../../context/TranslationContext';\n\nexport type LoadingErrorIndicatorProps = {\n  /** Error object */\n  error?: Error;\n};\n\n/**\n * UI component for error indicator in a Channel\n */\nconst UnMemoizedLoadingErrorIndicator = ({ error }: LoadingErrorIndicatorProps) => {\n  const { t } = useTranslationContext('LoadingErrorIndicator');\n\n  if (!error) return null;\n\n  return (\n    <div>{t<string>('Error: {{ errorMessage }}', { errorMessage: error.message })}</div>\n  );\n};\n\nexport const LoadingErrorIndicator = React.memo(\n  UnMemoizedLoadingErrorIndicator,\n  (prevProps, nextProps) => prevProps.error?.message === nextProps.error?.message,\n) as typeof UnMemoizedLoadingErrorIndicator;\n", "import React from 'react';\n\n// FIXME: remove color and size props and let the loading indicator to be styled via CSS\nexport type LoadingIndicatorProps = {\n  /** Set the color of the LoadingIndicator */\n  color?: string;\n  /** The size of the loading icon, @default 15px */\n  size?: number;\n};\n\nconst UnMemoizedLoadingIndicator = (props: LoadingIndicatorProps) => {\n  const { color = '#006CFF', size = 15 } = props;\n\n  return (\n    <div\n      className={`str-chat__loading-indicator`}\n      data-testid='loading-indicator-wrapper'\n      style={{ height: size, width: size }}\n    >\n      <svg\n        height={size}\n        viewBox={`0 0 30 30`}\n        width={size}\n        xmlns='http://www.w3.org/2000/svg'\n      >\n        <defs>\n          <linearGradient id='a' x1='50%' x2='50%' y1='0%' y2='100%'>\n            <stop offset='0%' stopColor='#FFF' stopOpacity='0' />\n            <stop\n              data-testid='loading-indicator-circle'\n              offset='100%'\n              stopColor={color}\n              stopOpacity='1'\n              style={{ stopColor: color }}\n            />\n          </linearGradient>\n        </defs>\n        <path\n          d='M2.518 23.321l1.664-1.11A12.988 12.988 0 0 0 15 28c7.18 0 13-5.82 13-13S22.18 2 15 2V0c8.284 0 15 6.716 15 15 0 8.284-6.716 15-15 15-5.206 0-9.792-2.652-12.482-6.679z'\n          fill='url(#a)'\n          fillRule='evenodd'\n        />\n      </svg>\n    </div>\n  );\n};\n\n/**\n * Simple loading spinner\n */\nexport const LoadingIndicator = React.memo(\n  UnMemoizedLoadingIndicator,\n  (prevProps, nextProps) =>\n    prevProps.color === nextProps.color && prevProps.size === nextProps.size,\n) as typeof UnMemoizedLoadingIndicator;\n", "import React from 'react';\n\nconst LoadingMessage = () => (\n  <div className='str-chat__loading-channel-message'>\n    <div className='str-chat__loading-channel-message-avatar'></div>\n    <div className='str-chat__loading-channel-message-end'>\n      <div className='str-chat__loading-channel-message-sender'></div>\n      <div className='str-chat__loading-channel-message-last-row'>\n        <div className='str-chat__loading-channel-message-text'></div>\n        <div className='str-chat__loading-channel-message-date'></div>\n      </div>\n    </div>\n  </div>\n);\n\nconst LoadingMessageInput = () => (\n  <div className='str-chat__loading-channel-message-input-row'>\n    <div className='str-chat__loading-channel-message-input'></div>\n    <div className='str-chat__loading-channel-message-send'></div>\n  </div>\n);\n\nconst LoadingChannelHeader = () => (\n  <div className='str-chat__loading-channel-header'>\n    <div className='str-chat__loading-channel-header-avatar'></div>\n    <div className='str-chat__loading-channel-header-end'>\n      <div className='str-chat__loading-channel-header-name'></div>\n      <div className='str-chat__loading-channel-header-info'></div>\n    </div>\n  </div>\n);\n\nexport const LoadingChannel = () => (\n  <div className='str-chat__loading-channel'>\n    <LoadingChannelHeader />\n    <div className='str-chat__loading-channel-message-list'>\n      {Array.from(Array(3)).map((_, i) => (\n        <LoadingMessage key={`loading-message-${i}`} />\n      ))}\n    </div>\n    <LoadingMessageInput />\n  </div>\n);\n", "import React, { PropsWithChildren } from 'react';\nimport { ImageDropzone } from '../ReactFileUtilities';\n\nimport { useCooldownTimer } from './hooks/useCooldownTimer';\nimport { useCreateMessageInputContext } from './hooks/useCreateMessageInputContext';\nimport { useMessageInputState } from './hooks/useMessageInputState';\n\nimport { useChannelStateContext } from '../../context/ChannelStateContext';\nimport {\n  MessageInputContextProvider,\n  useMessageInputContext,\n} from '../../context/MessageInputContext';\n\nimport type { MessageInputProps } from './MessageInput';\n\nimport type {\n  CustomTrigger,\n  DefaultStreamChatGenerics,\n  UnknownType,\n} from '../../types/types';\n\nconst DropzoneInner = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n  V extends CustomTrigger = CustomTrigger,\n>({\n  children,\n}: PropsWithChildren<UnknownType>) => {\n  const { acceptedFiles, multipleUploads } =\n    useChannelStateContext<StreamChatGenerics>('DropzoneProvider');\n\n  const { cooldownRemaining, isUploadEnabled, maxFilesLeft, uploadNewFiles } =\n    useMessageInputContext<StreamChatGenerics, V>('DropzoneProvider');\n\n  return (\n    <ImageDropzone\n      accept={acceptedFiles}\n      disabled={!isUploadEnabled || maxFilesLeft === 0 || !!cooldownRemaining}\n      handleFiles={uploadNewFiles}\n      maxNumberOfFiles={maxFilesLeft}\n      multiple={multipleUploads}\n    >\n      {children}\n    </ImageDropzone>\n  );\n};\n\nexport const DropzoneProvider = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n  V extends CustomTrigger = CustomTrigger,\n>(\n  props: PropsWithChildren<MessageInputProps<StreamChatGenerics, V>>,\n) => {\n  const cooldownTimerState = useCooldownTimer<StreamChatGenerics>();\n  const messageInputState = useMessageInputState<StreamChatGenerics, V>(props);\n\n  const messageInputContextValue = useCreateMessageInputContext<StreamChatGenerics, V>({\n    ...cooldownTimerState,\n    ...messageInputState,\n    ...props,\n  });\n\n  return (\n    <MessageInputContextProvider value={messageInputContextValue}>\n      <DropzoneInner>{props.children}</DropzoneInner>\n    </MessageInputContextProvider>\n  );\n};\n", "import React, { useEffect, useMemo, useState } from 'react';\nimport type { ChannelResponse } from 'stream-chat';\n\nimport { useChannelStateContext, useChatContext } from '../../../context';\n\nimport type { DefaultStreamChatGenerics } from '../../../types/types';\n\nexport type CooldownTimerState = {\n  cooldownInterval: number;\n  setCooldownRemaining: React.Dispatch<React.SetStateAction<number | undefined>>;\n  cooldownRemaining?: number;\n};\n\nexport const useCooldownTimer = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(): CooldownTimerState => {\n  const { client, latestMessageDatesByChannels } =\n    useChatContext<StreamChatGenerics>('useCooldownTimer');\n  const { channel, messages = [] } =\n    useChannelStateContext<StreamChatGenerics>('useCooldownTimer');\n  const [cooldownRemaining, setCooldownRemaining] = useState<number>();\n\n  const { cooldown: cooldownInterval = 0, own_capabilities } = (channel.data ||\n    {}) as ChannelResponse<StreamChatGenerics>;\n\n  const skipCooldown = own_capabilities?.includes('skip-slow-mode');\n\n  const ownLatestMessageDate = useMemo(\n    () =>\n      latestMessageDatesByChannels[channel.cid] ??\n      [...messages]\n        .sort(\n          (a, b) => (b.created_at as Date)?.getTime() - (a.created_at as Date)?.getTime(),\n        )\n        .find((v) => v.user?.id === client.user?.id)?.created_at,\n    [messages, client.user?.id, latestMessageDatesByChannels, channel.cid],\n  ) as Date;\n\n  useEffect(() => {\n    const timeSinceOwnLastMessage = ownLatestMessageDate\n      ? // prevent negative values\n        Math.max(0, (new Date().getTime() - ownLatestMessageDate.getTime()) / 1000)\n      : undefined;\n\n    const remaining =\n      !skipCooldown &&\n      typeof timeSinceOwnLastMessage !== 'undefined' &&\n      cooldownInterval > timeSinceOwnLastMessage\n        ? Math.round(cooldownInterval - timeSinceOwnLastMessage)\n        : 0;\n\n    setCooldownRemaining(remaining);\n\n    if (!remaining) return;\n\n    const timeout = setTimeout(() => {\n      setCooldownRemaining(0);\n    }, remaining * 1000);\n\n    return () => {\n      clearTimeout(timeout);\n    };\n  }, [cooldownInterval, ownLatestMessageDate, skipCooldown]);\n\n  return {\n    cooldownInterval,\n    cooldownRemaining,\n    setCooldownRemaining,\n  };\n};\n", "import { useMemo } from 'react';\n\nimport type { MessageInputContextValue } from '../../../context/MessageInputContext';\nimport type { CustomTrigger, DefaultStreamChatGenerics } from '../../../types/types';\n\nexport const useCreateMessageInputContext = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n  V extends CustomTrigger = CustomTrigger,\n>(\n  value: MessageInputContextValue<StreamChatGenerics, V>,\n) => {\n  const {\n    additionalTextareaProps,\n    asyncMessagesMultiSendEnabled,\n    attachments,\n    audioRecordingEnabled,\n    autocompleteTriggers,\n    cancelURLEnrichment,\n    clearEditingState,\n    closeCommandsList,\n    closeMentionsList,\n    cooldownInterval,\n    cooldownRemaining,\n    disabled,\n    disableMentions,\n    dismissLinkPreview,\n    doFileUploadRequest,\n    doImageUploadRequest,\n    emojiSearchIndex,\n    errorHandler,\n    findAndEnqueueURLsToEnrich,\n    focus,\n    grow,\n    handleChange,\n    handleSubmit,\n    hideSendButton,\n    insertText,\n    isThreadInput,\n    isUploadEnabled,\n    linkPreviews,\n    maxFilesLeft,\n    maxRows,\n    mentionAllAppUsers,\n    mentioned_users,\n    mentionQueryParams,\n    message,\n    minRows,\n    noFiles,\n    numberOfUploads,\n    onPaste,\n    onSelectUser,\n    openCommandsList,\n    openMentionsList,\n    overrideSubmitHandler,\n    parent,\n    publishTypingEvent,\n    recordingController,\n    removeAttachments,\n    setCooldownRemaining,\n    setText,\n    shouldSubmit,\n    showCommandsList,\n    showMentionsList,\n    text,\n    textareaRef,\n    uploadAttachment,\n    uploadNewFiles,\n    upsertAttachments,\n    useMentionsTransliteration,\n  } = value;\n\n  const editing = message?.editing;\n  const linkPreviewsValue = Array.from(linkPreviews.values()).join();\n  const mentionedUsersLength = mentioned_users.length;\n  const parentId = parent?.id;\n\n  const messageInputContext: MessageInputContextValue<StreamChatGenerics, V> = useMemo(\n    () => ({\n      additionalTextareaProps,\n      asyncMessagesMultiSendEnabled,\n      attachments,\n      audioRecordingEnabled,\n      autocompleteTriggers,\n      cancelURLEnrichment,\n      clearEditingState,\n      closeCommandsList,\n      closeMentionsList,\n      cooldownInterval,\n      cooldownRemaining,\n      disabled,\n      disableMentions,\n      dismissLinkPreview,\n      doFileUploadRequest,\n      doImageUploadRequest,\n      emojiSearchIndex,\n      errorHandler,\n      findAndEnqueueURLsToEnrich,\n      focus,\n      grow,\n      handleChange,\n      handleSubmit,\n      hideSendButton,\n      insertText,\n      isThreadInput,\n      isUploadEnabled,\n      linkPreviews,\n      maxFilesLeft,\n      maxRows,\n      mentionAllAppUsers,\n      mentioned_users,\n      mentionQueryParams,\n      message,\n      minRows,\n      noFiles,\n      numberOfUploads,\n      onPaste,\n      onSelectUser,\n      openCommandsList,\n      openMentionsList,\n      overrideSubmitHandler,\n      parent,\n      publishTypingEvent,\n      recordingController,\n      removeAttachments,\n      setCooldownRemaining,\n      setText,\n      shouldSubmit,\n      showCommandsList,\n      showMentionsList,\n      text,\n      textareaRef,\n      uploadAttachment,\n      uploadNewFiles,\n      upsertAttachments,\n      useMentionsTransliteration,\n    }),\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    [\n      asyncMessagesMultiSendEnabled,\n      attachments,\n      audioRecordingEnabled,\n      cancelURLEnrichment,\n      cooldownInterval,\n      cooldownRemaining,\n      dismissLinkPreview,\n      editing,\n      emojiSearchIndex,\n      findAndEnqueueURLsToEnrich,\n      handleSubmit,\n      hideSendButton,\n      isUploadEnabled,\n      isThreadInput,\n      linkPreviewsValue,\n      mentionedUsersLength,\n      minRows,\n      parentId,\n      publishTypingEvent,\n      recordingController,\n      removeAttachments,\n      showCommandsList,\n      showMentionsList,\n      text,\n      uploadAttachment,\n      upsertAttachments,\n    ],\n  );\n\n  return messageInputContext;\n};\n", "import React, { Reducer, useCallback, useReducer, useState } from 'react';\nimport { nanoid } from 'nanoid';\n\nimport {\n  StreamMessage,\n  useChannelStateContext,\n} from '../../../context/ChannelStateContext';\n\nimport { useAttachments } from './useAttachments';\nimport { EnrichURLsController, useLinkPreviews } from './useLinkPreviews';\nimport { useMessageInputText } from './useMessageInputText';\nimport { useSubmitHandler } from './useSubmitHandler';\nimport { usePasteHandler } from './usePasteHandler';\nimport {\n  RecordingController,\n  useMediaRecorder,\n} from '../../MediaRecorder/hooks/useMediaRecorder';\nimport type { LinkPreviewMap, LocalAttachment } from '../types';\nimport { LinkPreviewState, SetLinkPreviewMode } from '../types';\nimport type { Attachment, Message, OGAttachment, UserResponse } from 'stream-chat';\n\nimport type { MessageInputProps } from '../MessageInput';\n\nimport type {\n  CustomTrigger,\n  DefaultStreamChatGenerics,\n  SendMessageOptions,\n} from '../../../types/types';\nimport { mergeDeep } from '../../../utils/mergeDeep';\n\nexport type MessageInputState<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n  attachments: LocalAttachment<StreamChatGenerics>[];\n  linkPreviews: LinkPreviewMap;\n  mentioned_users: UserResponse<StreamChatGenerics>[];\n  setText: (text: string) => void;\n  text: string;\n};\n\ntype UpsertAttachmentsAction<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n  attachments: LocalAttachment<StreamChatGenerics>[];\n  type: 'upsertAttachments';\n};\n\ntype RemoveAttachmentsAction = {\n  ids: string[];\n  type: 'removeAttachments';\n};\n\ntype SetTextAction = {\n  getNewText: (currentStateText: string) => string;\n  type: 'setText';\n};\n\ntype ClearAction = {\n  type: 'clear';\n};\n\ntype SetLinkPreviewsAction = {\n  linkPreviews: LinkPreviewMap;\n  mode: SetLinkPreviewMode;\n  type: 'setLinkPreviews';\n};\n\ntype AddMentionedUserAction<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n  type: 'addMentionedUser';\n  user: UserResponse<StreamChatGenerics>;\n};\n\nexport type MessageInputReducerAction<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> =\n  | SetTextAction\n  | ClearAction\n  | SetLinkPreviewsAction\n  | AddMentionedUserAction<StreamChatGenerics>\n  | UpsertAttachmentsAction\n  | RemoveAttachmentsAction;\n\nexport type MessageInputHookProps<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = EnrichURLsController & {\n  handleChange: React.ChangeEventHandler<HTMLTextAreaElement>;\n  handleSubmit: (\n    event?: React.BaseSyntheticEvent,\n    customMessageData?: Partial<Message<StreamChatGenerics>>,\n    options?: SendMessageOptions,\n  ) => void;\n  insertText: (textToInsert: string) => void;\n  isUploadEnabled: boolean;\n  maxFilesLeft: number;\n  numberOfUploads: number;\n  onPaste: (event: React.ClipboardEvent<HTMLTextAreaElement>) => void;\n  onSelectUser: (item: UserResponse<StreamChatGenerics>) => void;\n  recordingController: RecordingController<StreamChatGenerics>;\n  removeAttachments: (ids: string[]) => void;\n  textareaRef: React.MutableRefObject<HTMLTextAreaElement | null | undefined>;\n  uploadAttachment: (\n    attachment: LocalAttachment<StreamChatGenerics>,\n  ) => Promise<LocalAttachment<StreamChatGenerics> | undefined>;\n  uploadNewFiles: (files: FileList | File[]) => void;\n  upsertAttachments: (\n    attachments: (Attachment<StreamChatGenerics> | LocalAttachment<StreamChatGenerics>)[],\n  ) => void;\n};\n\nconst makeEmptyMessageInputState = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(): MessageInputState<StreamChatGenerics> => ({\n  attachments: [],\n  linkPreviews: new Map(),\n  mentioned_users: [],\n  setText: () => null,\n  text: '',\n});\n\n/**\n * Initializes the state. Empty if the message prop is falsy.\n */\nconst initState = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  message?: Pick<\n    StreamMessage<StreamChatGenerics>,\n    'attachments' | 'mentioned_users' | 'text'\n  >,\n): MessageInputState<StreamChatGenerics> => {\n  if (!message) {\n    return makeEmptyMessageInputState();\n  }\n\n  const linkPreviews =\n    message.attachments?.reduce<LinkPreviewMap>((acc, attachment) => {\n      if (!attachment.og_scrape_url) return acc;\n      acc.set(attachment.og_scrape_url, {\n        ...(attachment as OGAttachment),\n        state: LinkPreviewState.LOADED,\n      });\n      return acc;\n    }, new Map()) ?? new Map();\n\n  const attachments =\n    message.attachments\n      ?.filter(({ og_scrape_url }) => !og_scrape_url)\n      .map(\n        (att) =>\n          ({\n            ...att,\n            localMetadata: { id: nanoid() },\n          }) as LocalAttachment<StreamChatGenerics>,\n      ) || [];\n\n  const mentioned_users: StreamMessage['mentioned_users'] = message.mentioned_users || [];\n\n  return {\n    attachments,\n    linkPreviews,\n    mentioned_users,\n    setText: () => null,\n    text: message.text || '',\n  };\n};\n\n/**\n * MessageInput state reducer\n */\nconst messageInputReducer = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  state: MessageInputState<StreamChatGenerics>,\n  action: MessageInputReducerAction<StreamChatGenerics>,\n) => {\n  switch (action.type) {\n    case 'setText':\n      return { ...state, text: action.getNewText(state.text) };\n\n    case 'clear':\n      return makeEmptyMessageInputState();\n\n    case 'upsertAttachments': {\n      const attachments = [...state.attachments];\n      action.attachments.forEach((actionAttachment) => {\n        const attachmentIndex = state.attachments.findIndex(\n          (att) =>\n            att.localMetadata?.id &&\n            att.localMetadata?.id === actionAttachment.localMetadata?.id,\n        );\n\n        if (attachmentIndex === -1) {\n          attachments.push(actionAttachment);\n        } else {\n          const upsertedAttachment = mergeDeep(\n            state.attachments[attachmentIndex] ?? {},\n            actionAttachment,\n          );\n          attachments.splice(attachmentIndex, 1, upsertedAttachment);\n        }\n      });\n\n      return {\n        ...state,\n        attachments,\n      };\n    }\n\n    case 'removeAttachments': {\n      return {\n        ...state,\n        attachments: state.attachments.filter(\n          (att) => !action.ids.includes(att.localMetadata?.id),\n        ),\n      };\n    }\n\n    case 'setLinkPreviews': {\n      const linkPreviews = new Map(state.linkPreviews);\n\n      if (action.mode === SetLinkPreviewMode.REMOVE) {\n        Array.from(action.linkPreviews.keys()).forEach((key) => {\n          linkPreviews.delete(key);\n        });\n      } else {\n        Array.from(action.linkPreviews.values()).reduce<LinkPreviewMap>(\n          (acc, linkPreview) => {\n            const existingPreview = acc.get(linkPreview.og_scrape_url);\n            const alreadyEnqueued =\n              linkPreview.state === LinkPreviewState.QUEUED &&\n              existingPreview?.state !== LinkPreviewState.FAILED;\n\n            if (existingPreview && alreadyEnqueued) return acc;\n            acc.set(linkPreview.og_scrape_url, linkPreview);\n            return acc;\n          },\n          linkPreviews,\n        );\n\n        if (action.mode === SetLinkPreviewMode.SET) {\n          Array.from(state.linkPreviews.keys()).forEach((key) => {\n            if (!action.linkPreviews.get(key)) linkPreviews.delete(key);\n          });\n        }\n      }\n\n      return {\n        ...state,\n        linkPreviews,\n      };\n    }\n\n    case 'addMentionedUser':\n      return {\n        ...state,\n        mentioned_users: state.mentioned_users.concat(action.user),\n      };\n\n    default:\n      return state;\n  }\n};\n\nexport type CommandsListState = {\n  closeCommandsList: () => void;\n  openCommandsList: () => void;\n  showCommandsList: boolean;\n};\n\nexport type MentionsListState = {\n  closeMentionsList: () => void;\n  openMentionsList: () => void;\n  showMentionsList: boolean;\n};\n\n/**\n * hook for MessageInput state\n */\nexport const useMessageInputState = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n  V extends CustomTrigger = CustomTrigger,\n>(\n  props: MessageInputProps<StreamChatGenerics, V>,\n): MessageInputState<StreamChatGenerics> &\n  MessageInputHookProps<StreamChatGenerics> &\n  CommandsListState &\n  MentionsListState => {\n  const {\n    additionalTextareaProps,\n    asyncMessagesMultiSendEnabled,\n    audioRecordingConfig,\n    audioRecordingEnabled,\n    getDefaultValue,\n    message,\n    urlEnrichmentConfig,\n  } = props;\n\n  const {\n    channelCapabilities = {},\n    enrichURLForPreview: enrichURLForPreviewChannelContext,\n  } = useChannelStateContext<StreamChatGenerics>('useMessageInputState');\n\n  const defaultValue = getDefaultValue?.() || additionalTextareaProps?.defaultValue;\n  const initialStateValue =\n    message ||\n    ((Array.isArray(defaultValue)\n      ? { text: defaultValue.join('') }\n      : { text: defaultValue?.toString() }) as Partial<\n      StreamMessage<StreamChatGenerics>\n    >);\n\n  const [state, dispatch] = useReducer(\n    messageInputReducer as Reducer<\n      MessageInputState<StreamChatGenerics>,\n      MessageInputReducerAction<StreamChatGenerics>\n    >,\n    initialStateValue,\n    initState,\n  );\n\n  const enrichURLsController = useLinkPreviews({\n    dispatch,\n    linkPreviews: state.linkPreviews,\n    ...urlEnrichmentConfig,\n    enrichURLForPreview:\n      urlEnrichmentConfig?.enrichURLForPreview ?? enrichURLForPreviewChannelContext,\n  });\n\n  const { handleChange, insertText, textareaRef } = useMessageInputText<\n    StreamChatGenerics,\n    V\n  >(props, state, dispatch, enrichURLsController.findAndEnqueueURLsToEnrich);\n\n  const [showCommandsList, setShowCommandsList] = useState(false);\n  const [showMentionsList, setShowMentionsList] = useState(false);\n\n  const openCommandsList = () => {\n    dispatch({\n      getNewText: () => '/',\n      type: 'setText',\n    });\n    setShowCommandsList(true);\n  };\n\n  const closeCommandsList = () => setShowCommandsList(false);\n\n  const openMentionsList = () => {\n    dispatch({\n      getNewText: (currentText) => currentText + '@',\n      type: 'setText',\n    });\n    setShowMentionsList(true);\n  };\n\n  const closeMentionsList = () => setShowMentionsList(false);\n\n  const {\n    maxFilesLeft,\n    numberOfUploads,\n    removeAttachments,\n    uploadAttachment,\n    uploadNewFiles,\n    upsertAttachments,\n  } = useAttachments<StreamChatGenerics, V>(props, state, dispatch, textareaRef);\n\n  const { handleSubmit } = useSubmitHandler<StreamChatGenerics, V>(\n    props,\n    state,\n    dispatch,\n    numberOfUploads,\n    enrichURLsController,\n  );\n  const recordingController = useMediaRecorder({\n    asyncMessagesMultiSendEnabled,\n    enabled: !!audioRecordingEnabled,\n    handleSubmit,\n    recordingConfig: audioRecordingConfig,\n    uploadAttachment,\n  });\n\n  const isUploadEnabled = !!channelCapabilities['upload-file'];\n\n  const { onPaste } = usePasteHandler(\n    uploadNewFiles,\n    insertText,\n    isUploadEnabled,\n    enrichURLsController.findAndEnqueueURLsToEnrich,\n  );\n\n  const onSelectUser = useCallback((item: UserResponse<StreamChatGenerics>) => {\n    dispatch({ type: 'addMentionedUser', user: item });\n  }, []);\n\n  const setText = useCallback((text: string) => {\n    dispatch({ getNewText: () => text, type: 'setText' });\n  }, []);\n\n  return {\n    ...state,\n    ...enrichURLsController,\n    closeCommandsList,\n    closeMentionsList,\n    handleChange,\n    handleSubmit,\n    insertText,\n    isUploadEnabled,\n    maxFilesLeft,\n    numberOfUploads,\n    onPaste,\n    onSelectUser,\n    openCommandsList,\n    openMentionsList,\n    recordingController,\n    removeAttachments,\n    setText,\n    showCommandsList,\n    showMentionsList,\n    textareaRef,\n    uploadAttachment,\n    uploadNewFiles,\n    upsertAttachments,\n  };\n};\n", "import { useCallback } from 'react';\nimport { nanoid } from 'nanoid';\n\nimport { checkUploadPermissions } from './utils';\nimport { isLocalAttachment, isLocalImageAttachment } from '../../Attachment';\nimport type { FileLike } from '../../ReactFileUtilities';\nimport {\n  createFileFromBlobs,\n  generateFileName,\n  isBlobButNotFile,\n} from '../../ReactFileUtilities';\n\nimport {\n  useChannelActionContext,\n  useChannelStateContext,\n  useChatContext,\n  useTranslationContext,\n} from '../../../context';\n\nimport type { Attachment, SendFileAPIResponse } from 'stream-chat';\nimport type {\n  MessageInputReducerAction,\n  MessageInputState,\n} from './useMessageInputState';\nimport type { MessageInputProps } from '../MessageInput';\nimport type {\n  AttachmentLoadingState,\n  BaseLocalAttachmentMetadata,\n  LocalAttachment,\n} from '../types';\nimport type { CustomTrigger, DefaultStreamChatGenerics } from '../../../types/types';\n\nconst apiMaxNumberOfFiles = 10;\n\n// const isAudioFile = (file: FileLike) => file.type.includes('audio/');\nconst isImageFile = (file: FileLike) =>\n  file.type.startsWith('image/') && !file.type.endsWith('.photoshop'); // photoshop files begin with 'image/'\n// const isVideoFile = (file: FileLike) => file.type.includes('video/');\n\nconst getAttachmentTypeFromMime = (mimeType: string) => {\n  if (mimeType.startsWith('image/') && !mimeType.endsWith('.photoshop')) return 'image';\n  if (mimeType.includes('video/')) return 'video';\n  if (mimeType.includes('audio/')) return 'audio';\n  return 'file';\n};\n\nconst ensureIsLocalAttachment = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  attachment: Attachment<StreamChatGenerics> | LocalAttachment<StreamChatGenerics>,\n): LocalAttachment<StreamChatGenerics> => {\n  if (isLocalAttachment(attachment)) {\n    return attachment;\n  }\n  const { localMetadata, ...rest } = attachment;\n  return {\n    localMetadata: {\n      ...(localMetadata ?? {}),\n      id: (localMetadata as BaseLocalAttachmentMetadata)?.id || nanoid(),\n    },\n    ...rest,\n  };\n};\n\nexport const useAttachments = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n  V extends CustomTrigger = CustomTrigger,\n>(\n  props: MessageInputProps<StreamChatGenerics, V>,\n  state: MessageInputState<StreamChatGenerics>,\n  dispatch: React.Dispatch<MessageInputReducerAction<StreamChatGenerics>>,\n  textareaRef: React.MutableRefObject<HTMLTextAreaElement | undefined>,\n) => {\n  const { doFileUploadRequest, doImageUploadRequest, errorHandler, noFiles } = props;\n  const { getAppSettings } = useChatContext<StreamChatGenerics>('useAttachments');\n  const { t } = useTranslationContext('useAttachments');\n  const { addNotification } =\n    useChannelActionContext<StreamChatGenerics>('useAttachments');\n  const { channel, maxNumberOfFiles, multipleUploads } =\n    useChannelStateContext<StreamChatGenerics>('useAttachments');\n\n  // Number of files that the user can still add. Should never be more than the amount allowed by the API.\n  // If multipleUploads is false, we only want to allow a single upload.\n  const maxFilesAllowed = !multipleUploads ? 1 : maxNumberOfFiles || apiMaxNumberOfFiles;\n\n  const numberOfUploads = Object.values(state.attachments).filter(\n    ({ localMetadata }) =>\n      localMetadata.uploadState && localMetadata.uploadState !== 'failed',\n  ).length;\n\n  const maxFilesLeft = maxFilesAllowed - numberOfUploads;\n\n  const removeAttachments = useCallback(\n    (ids: string[]) => {\n      if (!ids.length) return;\n      dispatch({ ids, type: 'removeAttachments' });\n    },\n    [dispatch],\n  );\n\n  const upsertAttachments = useCallback(\n    (\n      attachments: (\n        | Attachment<StreamChatGenerics>\n        | LocalAttachment<StreamChatGenerics>\n      )[],\n    ) => {\n      if (!attachments.length) return;\n      dispatch({\n        attachments: attachments.map(ensureIsLocalAttachment),\n        type: 'upsertAttachments',\n      });\n    },\n    [dispatch],\n  );\n\n  const uploadAttachment = useCallback(\n    async (\n      att: LocalAttachment<StreamChatGenerics>,\n    ): Promise<LocalAttachment<StreamChatGenerics> | undefined> => {\n      const { localMetadata, ...providedAttachmentData } = att;\n\n      if (!localMetadata?.file) return att;\n\n      const { file } = localMetadata;\n      const isImage = isImageFile(file);\n\n      if (noFiles && !isImage) return att;\n\n      const canUpload = await checkUploadPermissions({\n        addNotification,\n        file,\n        getAppSettings,\n        t,\n        uploadType: isImage ? 'image' : 'file',\n      });\n\n      if (!canUpload) return att;\n\n      localMetadata.id = localMetadata?.id ?? nanoid();\n      const finalAttachment: Attachment<StreamChatGenerics> = {\n        type: getAttachmentTypeFromMime(file.type),\n      };\n      if (isImage) {\n        localMetadata.previewUri = URL.createObjectURL?.(file);\n        if (file instanceof File) {\n          finalAttachment.fallback = file.name;\n        }\n      } else {\n        finalAttachment.file_size = file.size;\n        finalAttachment.mime_type = file.type;\n        if (file instanceof File) {\n          finalAttachment.title = file.name;\n        }\n      }\n\n      Object.assign(finalAttachment, providedAttachmentData);\n\n      upsertAttachments([\n        {\n          ...finalAttachment,\n          localMetadata: {\n            ...localMetadata,\n            uploadState: 'uploading',\n          },\n        },\n      ]);\n\n      let response: SendFileAPIResponse;\n      try {\n        const doUploadRequest = isImage ? doImageUploadRequest : doFileUploadRequest;\n\n        if (doUploadRequest) {\n          response = await doUploadRequest(file, channel);\n        } else {\n          response = await channel[isImage ? 'sendImage' : 'sendFile'](file);\n        }\n      } catch (error) {\n        let finalError: Error = {\n          message: t('Error uploading attachment'),\n          name: 'Error',\n        };\n        if (typeof (error as Error).message === 'string') {\n          finalError = error as Error;\n        } else if (typeof error === 'object') {\n          finalError = Object.assign(finalError, error);\n        }\n\n        console.error(finalError);\n        addNotification(finalError.message, 'error');\n\n        const failedAttachment: LocalAttachment<StreamChatGenerics> = {\n          ...finalAttachment,\n          localMetadata: {\n            ...localMetadata,\n            uploadState: 'failed' as AttachmentLoadingState,\n          },\n        };\n\n        upsertAttachments([failedAttachment]);\n\n        if (errorHandler) {\n          errorHandler(finalError as Error, 'upload-attachment', {\n            ...file,\n            id: localMetadata.id,\n          });\n        }\n\n        return failedAttachment;\n      }\n\n      if (!response) {\n        // Copied this from useImageUpload / useFileUpload.\n\n        // If doUploadRequest returns any falsy value, then don't create the upload preview.\n        // This is for the case if someone wants to handle failure on app level.\n        removeAttachments([localMetadata.id]);\n        return;\n      }\n\n      const uploadedAttachment: LocalAttachment<StreamChatGenerics> = {\n        ...finalAttachment,\n        localMetadata: {\n          ...localMetadata,\n          uploadState: 'finished' as AttachmentLoadingState,\n        },\n      };\n\n      if (isLocalImageAttachment(uploadedAttachment)) {\n        if (uploadedAttachment.localMetadata.previewUri) {\n          URL.revokeObjectURL(uploadedAttachment.localMetadata.previewUri);\n          delete uploadedAttachment.localMetadata.previewUri;\n        }\n        uploadedAttachment.image_url = response.file;\n      } else {\n        uploadedAttachment.asset_url = response.file;\n      }\n      if (response.thumb_url) {\n        uploadedAttachment.thumb_url = response.thumb_url;\n      }\n\n      upsertAttachments([uploadedAttachment]);\n\n      return uploadedAttachment;\n    },\n    [\n      addNotification,\n      channel,\n      doFileUploadRequest,\n      doImageUploadRequest,\n      errorHandler,\n      getAppSettings,\n      noFiles,\n      removeAttachments,\n      t,\n      upsertAttachments,\n    ],\n  );\n\n  const uploadNewFiles = useCallback(\n    (files: FileList | File[] | FileLike[]) => {\n      const filesToBeUploaded = noFiles\n        ? Array.from(files).filter(isImageFile)\n        : Array.from(files);\n\n      filesToBeUploaded.slice(0, maxFilesLeft).forEach((fileLike) => {\n        uploadAttachment({\n          localMetadata: {\n            file: isBlobButNotFile(fileLike)\n              ? createFileFromBlobs({\n                  blobsArray: [fileLike],\n                  fileName: generateFileName(fileLike.type),\n                  mimeType: fileLike.type,\n                })\n              : fileLike,\n            id: nanoid(),\n          },\n        });\n      });\n\n      textareaRef.current?.focus();\n    },\n    [maxFilesLeft, noFiles, textareaRef, uploadAttachment],\n  );\n\n  return {\n    maxFilesLeft,\n    numberOfUploads,\n    removeAttachments,\n    uploadAttachment,\n    uploadNewFiles,\n    upsertAttachments,\n  };\n};\n", "import { find } from 'linkifyjs';\nimport { Dispatch, useCallback, useEffect, useRef } from 'react';\nimport debounce from 'lodash.debounce';\nimport { useChannelStateContext, useChatContext } from '../../../context';\nimport type {\n  MessageInputReducerAction,\n  MessageInputState,\n} from './useMessageInputState';\nimport type { DefaultStreamChatGenerics } from '../../../types/types';\nimport type { LinkPreview, LinkPreviewMap } from '../types';\nimport { LinkPreviewState, SetLinkPreviewMode } from '../types';\nimport type { DebouncedFunc } from 'lodash';\n\nexport type URLEnrichmentConfig = {\n  /** Number of milliseconds to debounce firing the URL enrichment queries when typing. The default value is 1500(ms). */\n  debounceURLEnrichmentMs?: number;\n  /** Allows for toggling the URL enrichment and link previews in `MessageInput`. By default, the feature is disabled. */\n  enrichURLForPreview?: boolean;\n  /** Custom function to identify URLs in a string and request OG data */\n  findURLFn?: (text: string) => string[];\n  /** Custom function to react to link preview dismissal */\n  onLinkPreviewDismissed?: (linkPreview: LinkPreview) => void;\n};\n\ntype UseEnrichURLsParams<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = URLEnrichmentConfig & {\n  dispatch: Dispatch<MessageInputReducerAction<StreamChatGenerics>>;\n  linkPreviews: MessageInputState<StreamChatGenerics>['linkPreviews'];\n};\n\nexport type EnrichURLsController = {\n  /** Function cancels all the scheduled or in-progress URL enrichment queries and resets the state. */\n  cancelURLEnrichment: () => void;\n  /** Function called when a single link preview is dismissed. */\n  dismissLinkPreview: (linkPreview: LinkPreview) => void;\n  /** Function that triggers the search for URLs and their enrichment. */\n  findAndEnqueueURLsToEnrich?: DebouncedFunc<\n    (text: string, mode?: SetLinkPreviewMode) => void\n  >;\n};\n\nexport const useLinkPreviews = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n  debounceURLEnrichmentMs: debounceURLEnrichmentMsInputContext,\n  dispatch,\n  enrichURLForPreview = false,\n  findURLFn: findURLFnInputContext,\n  linkPreviews,\n  onLinkPreviewDismissed: onLinkPreviewDismissedInputContext,\n}: UseEnrichURLsParams<StreamChatGenerics>): EnrichURLsController => {\n  const { client } = useChatContext();\n  // FIXME: the value of channelConfig is stale due to omitting it from the memoization deps in useCreateChannelStateContext\n  const {\n    channelConfig,\n    debounceURLEnrichmentMs: debounceURLEnrichmentMsChannelContext,\n    findURLFn: findURLFnChannelContext,\n    onLinkPreviewDismissed: onLinkPreviewDismissedChannelContext,\n  } = useChannelStateContext();\n\n  const shouldDiscardEnrichQueries = useRef(false);\n\n  const findURLFn = findURLFnInputContext ?? findURLFnChannelContext;\n  const onLinkPreviewDismissed =\n    onLinkPreviewDismissedInputContext ?? onLinkPreviewDismissedChannelContext;\n  const debounceURLEnrichmentMs =\n    debounceURLEnrichmentMsInputContext ?? debounceURLEnrichmentMsChannelContext ?? 1500;\n\n  const dismissLinkPreview = useCallback(\n    (linkPreview: LinkPreview) => {\n      onLinkPreviewDismissed?.(linkPreview);\n      const previewToRemoveMap = new Map();\n      linkPreview.state = LinkPreviewState.DISMISSED;\n      previewToRemoveMap.set(linkPreview.og_scrape_url, linkPreview);\n      dispatch({\n        linkPreviews: previewToRemoveMap,\n        mode: SetLinkPreviewMode.UPSERT,\n        type: 'setLinkPreviews',\n      });\n    },\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    [onLinkPreviewDismissed],\n  );\n\n  // eslint-disable-next-line react-hooks/exhaustive-deps\n  const findAndEnqueueURLsToEnrich = useCallback(\n    debounce(\n      (text: string, mode = SetLinkPreviewMode.SET) => {\n        const urls = findURLFn\n          ? findURLFn(text)\n          : find(text, 'url').reduce<string[]>((acc, link) => {\n              if (link.isLink) acc.push(link.href);\n              return acc;\n            }, []);\n\n        shouldDiscardEnrichQueries.current = urls.length === 0;\n\n        dispatch({\n          linkPreviews: urls.reduce<LinkPreviewMap>((acc, url) => {\n            acc.set(url, { og_scrape_url: url, state: LinkPreviewState.QUEUED });\n            return acc;\n          }, new Map()),\n          mode,\n          type: 'setLinkPreviews',\n        });\n      },\n      debounceURLEnrichmentMs,\n      { leading: false, trailing: true },\n    ),\n    [debounceURLEnrichmentMs, shouldDiscardEnrichQueries, findURLFn],\n  );\n\n  const cancelURLEnrichment = useCallback(() => {\n    findAndEnqueueURLsToEnrich.cancel();\n    findAndEnqueueURLsToEnrich('');\n    findAndEnqueueURLsToEnrich.flush();\n  }, [findAndEnqueueURLsToEnrich]);\n\n  useEffect(() => {\n    const enqueuedLinks = Array.from(linkPreviews.values()).reduce<LinkPreviewMap>(\n      (acc, linkPreview) => {\n        if (linkPreview.state === 'queued') {\n          const loadingLinkPreview: LinkPreview = {\n            ...linkPreview,\n            state: LinkPreviewState.LOADING,\n          };\n          acc.set(linkPreview.og_scrape_url, loadingLinkPreview);\n        }\n        return acc;\n      },\n      new Map(),\n    );\n\n    if (!enqueuedLinks.size) return;\n\n    dispatch({\n      linkPreviews: enqueuedLinks,\n      mode: SetLinkPreviewMode.UPSERT,\n      type: 'setLinkPreviews',\n    });\n\n    enqueuedLinks.forEach((linkPreview) => {\n      client\n        .enrichURL(linkPreview.og_scrape_url)\n        // eslint-disable-next-line @typescript-eslint/no-unused-vars\n        .then(({ duration, ...ogAttachment }) => {\n          if (shouldDiscardEnrichQueries.current) return;\n\n          const linkPreviewsMap = new Map();\n          linkPreviewsMap.set(linkPreview.og_scrape_url, {\n            ...ogAttachment,\n            state: LinkPreviewState.LOADED,\n          });\n\n          dispatch({\n            linkPreviews: linkPreviewsMap,\n            mode: SetLinkPreviewMode.UPSERT,\n            type: 'setLinkPreviews',\n          });\n        })\n        .catch(() => {\n          const linkPreviewsMap = new Map();\n          linkPreviewsMap.set(linkPreview.og_scrape_url, {\n            ...linkPreview,\n            state: LinkPreviewState.FAILED,\n          });\n          dispatch({\n            linkPreviews: linkPreviewsMap,\n            mode: SetLinkPreviewMode.UPSERT,\n            type: 'setLinkPreviews',\n          });\n        });\n    });\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [shouldDiscardEnrichQueries, linkPreviews]);\n\n  return {\n    cancelURLEnrichment,\n    dismissLinkPreview,\n    findAndEnqueueURLsToEnrich:\n      channelConfig?.url_enrichment && enrichURLForPreview\n        ? findAndEnqueueURLsToEnrich\n        : undefined,\n  };\n};\n", "import type {\n  Attachment,\n  DefaultGenerics,\n  ExtendableGenerics,\n  OGAttachment,\n} from 'stream-chat';\nimport type { DefaultStreamChatGenerics } from '../../types/types';\n\nexport type AttachmentLoadingState = 'uploading' | 'finished' | 'failed';\n\nexport enum LinkPreviewState {\n  /** Link preview has been dismissed using MessageInputContextValue.dismissLinkPreview **/\n  DISMISSED = 'dismissed',\n  /** Link preview could not be loaded, the enrichment request has failed. **/\n  FAILED = 'failed',\n  /** Link preview has been successfully loaded. **/\n  LOADED = 'loaded',\n  /** The enrichment query is in progress for a given link. **/\n  LOADING = 'loading',\n  /** The link is scheduled for enrichment. **/\n  QUEUED = 'queued',\n}\n\nexport type LinkURL = string;\n\nexport type LinkPreview = OGAttachment & {\n  state: LinkPreviewState;\n};\n\nexport enum SetLinkPreviewMode {\n  UPSERT,\n  SET,\n  REMOVE,\n}\n\nexport type LinkPreviewMap = Map<LinkURL, LinkPreview>;\n\nexport type VoiceRecordingAttachment<\n  StreamChatGenerics extends ExtendableGenerics = DefaultGenerics,\n> = Attachment<StreamChatGenerics> & {\n  asset_url: string;\n  type: 'voiceRecording';\n  duration?: number;\n  file_size?: number;\n  mime_type?: string;\n  title?: string;\n  waveform_data?: Array<number>;\n};\n\ntype FileAttachment<StreamChatGenerics extends ExtendableGenerics = DefaultGenerics> =\n  Attachment<StreamChatGenerics> & {\n    type: 'file';\n    asset_url?: string;\n    file_size?: number;\n    mime_type?: string;\n    title?: string;\n  };\n\nexport type AudioAttachment<\n  StreamChatGenerics extends ExtendableGenerics = DefaultGenerics,\n> = Attachment<StreamChatGenerics> & {\n  type: 'audio';\n  asset_url?: string;\n  file_size?: number;\n  mime_type?: string;\n  title?: string;\n};\n\nexport type VideoAttachment<\n  StreamChatGenerics extends ExtendableGenerics = DefaultGenerics,\n> = Attachment<StreamChatGenerics> & {\n  type: 'video';\n  asset_url?: string;\n  mime_type?: string;\n  thumb_url?: string;\n  title?: string;\n};\n\ntype ImageAttachment<StreamChatGenerics extends ExtendableGenerics = DefaultGenerics> =\n  Attachment<StreamChatGenerics> & {\n    type: 'image';\n    fallback?: string;\n    image_url?: string;\n    original_height?: number;\n    original_width?: number;\n  };\n\nexport type BaseLocalAttachmentMetadata = {\n  id: string;\n};\n\nexport type LocalAttachmentUploadMetadata = {\n  file?: File;\n  uploadState?: AttachmentLoadingState;\n};\n\nexport type LocalImageAttachmentUploadMetadata = LocalAttachmentUploadMetadata & {\n  previewUri?: string;\n};\n\nexport type LocalAttachmentCast<A, L = Record<string, unknown>> = A & {\n  localMetadata: L & BaseLocalAttachmentMetadata;\n};\n\nexport type LocalAttachmentMetadata<CustomLocalMetadata = Record<string, unknown>> =\n  CustomLocalMetadata & BaseLocalAttachmentMetadata & LocalImageAttachmentUploadMetadata;\n\nexport type LocalVoiceRecordingAttachment<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n  CustomLocalMetadata = Record<string, unknown>,\n> = LocalAttachmentCast<\n  VoiceRecordingAttachment<StreamChatGenerics>,\n  LocalAttachmentUploadMetadata & CustomLocalMetadata\n>;\n\nexport type LocalAudioAttachment<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n  CustomLocalMetadata = Record<string, unknown>,\n> = LocalAttachmentCast<\n  AudioAttachment<StreamChatGenerics>,\n  LocalAttachmentUploadMetadata & CustomLocalMetadata\n>;\n\nexport type LocalVideoAttachment<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n  CustomLocalMetadata = Record<string, unknown>,\n> = LocalAttachmentCast<\n  VideoAttachment<StreamChatGenerics>,\n  LocalAttachmentUploadMetadata & CustomLocalMetadata\n>;\n\nexport type LocalImageAttachment<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n  CustomLocalMetadata = Record<string, unknown>,\n> = LocalAttachmentCast<\n  ImageAttachment<StreamChatGenerics>,\n  LocalImageAttachmentUploadMetadata & CustomLocalMetadata\n>;\n\nexport type LocalFileAttachment<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n  CustomLocalMetadata = Record<string, unknown>,\n> = LocalAttachmentCast<\n  FileAttachment<StreamChatGenerics>,\n  LocalAttachmentUploadMetadata & CustomLocalMetadata\n>;\n\nexport type AnyLocalAttachment<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n  CustomLocalMetadata = Record<string, unknown>,\n> = LocalAttachmentCast<\n  Attachment<StreamChatGenerics>,\n  LocalAttachmentMetadata<CustomLocalMetadata>\n>;\n\nexport type LocalAttachment<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> =\n  | AnyLocalAttachment<StreamChatGenerics>\n  | LocalFileAttachment<StreamChatGenerics>\n  | LocalImageAttachment<StreamChatGenerics>\n  | LocalAudioAttachment<StreamChatGenerics>\n  | LocalVideoAttachment<StreamChatGenerics>\n  | LocalVoiceRecordingAttachment<StreamChatGenerics>;\n\nexport type LocalAttachmentToUpload<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n  CustomLocalMetadata = Record<string, unknown>,\n> = Partial<Attachment<StreamChatGenerics>> & {\n  localMetadata: Partial<BaseLocalAttachmentMetadata> &\n    LocalAttachmentUploadMetadata &\n    CustomLocalMetadata;\n};\n", "import { useCallback, useEffect, useRef } from 'react';\nimport { logChatPromiseExecution } from 'stream-chat';\nimport type {\n  MessageInputReducerAction,\n  MessageInputState,\n} from './useMessageInputState';\nimport type { MessageInputProps } from '../MessageInput';\nimport { useChannelStateContext } from '../../../context/ChannelStateContext';\n\nimport type { CustomTrigger, DefaultStreamChatGenerics } from '../../../types/types';\nimport type { EnrichURLsController } from './useLinkPreviews';\n\nexport const useMessageInputText = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n  V extends CustomTrigger = CustomTrigger,\n>(\n  props: MessageInputProps<StreamChatGenerics, V>,\n  state: MessageInputState<StreamChatGenerics>,\n  dispatch: React.Dispatch<MessageInputReducerAction<StreamChatGenerics>>,\n  findAndEnqueueURLsToEnrich?: EnrichURLsController['findAndEnqueueURLsToEnrich'],\n) => {\n  const { channel } = useChannelStateContext<StreamChatGenerics>('useMessageInputText');\n  const { additionalTextareaProps, focus, parent, publishTypingEvent = true } = props;\n  const { text } = state;\n\n  const textareaRef = useRef<HTMLTextAreaElement>(undefined);\n\n  // Focus\n  useEffect(() => {\n    if (focus && textareaRef.current) {\n      textareaRef.current.focus();\n    }\n  }, [focus]);\n\n  // Text + cursor position\n  const newCursorPosition = useRef<number>(undefined);\n\n  const insertText = useCallback(\n    (textToInsert: string) => {\n      const { maxLength } = additionalTextareaProps || {};\n\n      if (!textareaRef.current) {\n        return dispatch({\n          getNewText: (text) => {\n            const updatedText = text + textToInsert;\n            if (maxLength && updatedText.length > maxLength) {\n              return updatedText.slice(0, maxLength);\n            }\n            return updatedText;\n          },\n          type: 'setText',\n        });\n      }\n\n      const { selectionEnd, selectionStart } = textareaRef.current;\n      newCursorPosition.current = selectionStart + textToInsert.length;\n\n      dispatch({\n        getNewText: (prevText) => {\n          const updatedText =\n            prevText.slice(0, selectionStart) +\n            textToInsert +\n            prevText.slice(selectionEnd);\n\n          if (maxLength && updatedText.length > maxLength) {\n            return updatedText.slice(0, maxLength);\n          }\n\n          return updatedText;\n        },\n        type: 'setText',\n      });\n    },\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    [additionalTextareaProps, newCursorPosition, textareaRef],\n  );\n\n  useEffect(() => {\n    const textareaElement = textareaRef.current;\n    if (textareaElement && newCursorPosition.current !== undefined) {\n      textareaElement.selectionStart = newCursorPosition.current;\n      textareaElement.selectionEnd = newCursorPosition.current;\n      newCursorPosition.current = undefined;\n    }\n  }, [text, newCursorPosition]);\n\n  const handleChange: React.ChangeEventHandler<HTMLTextAreaElement> = useCallback(\n    (event) => {\n      event.preventDefault();\n      if (!event || !event.target) {\n        return;\n      }\n\n      const newText = event.target.value;\n      dispatch({\n        getNewText: () => newText,\n        type: 'setText',\n      });\n\n      findAndEnqueueURLsToEnrich?.(newText);\n\n      if (publishTypingEvent && newText && channel) {\n        logChatPromiseExecution(channel.keystroke(parent?.id), 'start typing event');\n      }\n    },\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    [channel, findAndEnqueueURLsToEnrich, parent, publishTypingEvent],\n  );\n\n  return {\n    handleChange,\n    insertText,\n    textareaRef,\n  };\n};\n", "import { useEffect, useRef } from 'react';\nimport { useChannelActionContext } from '../../../context/ChannelActionContext';\nimport { useChannelStateContext } from '../../../context/ChannelStateContext';\nimport { useTranslationContext } from '../../../context/TranslationContext';\nimport { LinkPreviewState } from '../types';\n\nimport type { Attachment, Message, UpdatedMessage } from 'stream-chat';\n\nimport type {\n  MessageInputReducerAction,\n  MessageInputState,\n} from './useMessageInputState';\nimport type { MessageInputProps } from '../MessageInput';\n\nimport type {\n  CustomTrigger,\n  DefaultStreamChatGenerics,\n  SendMessageOptions,\n} from '../../../types/types';\nimport type { EnrichURLsController } from './useLinkPreviews';\n\nexport const useSubmitHandler = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n  V extends CustomTrigger = CustomTrigger,\n>(\n  props: MessageInputProps<StreamChatGenerics, V>,\n  state: MessageInputState<StreamChatGenerics>,\n  dispatch: React.Dispatch<MessageInputReducerAction<StreamChatGenerics>>,\n  numberOfUploads: number,\n  enrichURLsController: EnrichURLsController,\n) => {\n  const {\n    clearEditingState,\n    message,\n    overrideSubmitHandler,\n    parent,\n    publishTypingEvent,\n  } = props;\n\n  const { attachments, linkPreviews, mentioned_users, text } = state;\n\n  const { cancelURLEnrichment, findAndEnqueueURLsToEnrich } = enrichURLsController;\n  const { channel } = useChannelStateContext<StreamChatGenerics>('useSubmitHandler');\n  const { addNotification, editMessage, sendMessage } =\n    useChannelActionContext<StreamChatGenerics>('useSubmitHandler');\n  const { t } = useTranslationContext('useSubmitHandler');\n\n  const textReference = useRef({ hasChanged: false, initialText: text });\n\n  useEffect(() => {\n    if (!textReference.current.initialText.length) {\n      textReference.current.initialText = text;\n      return;\n    }\n\n    textReference.current.hasChanged = text !== textReference.current.initialText;\n  }, [text]);\n\n  const handleSubmit = async (\n    event?: React.BaseSyntheticEvent,\n    customMessageData?: Partial<Message<StreamChatGenerics>>,\n    options?: SendMessageOptions,\n  ) => {\n    event?.preventDefault();\n    const trimmedMessage = text.trim();\n    const isEmptyMessage =\n      trimmedMessage === '' ||\n      trimmedMessage === '>' ||\n      trimmedMessage === '``````' ||\n      trimmedMessage === '``' ||\n      trimmedMessage === '**' ||\n      trimmedMessage === '____' ||\n      trimmedMessage === '__' ||\n      trimmedMessage === '****';\n\n    if (\n      isEmptyMessage &&\n      numberOfUploads === 0 &&\n      attachments.length === 0 &&\n      !customMessageData?.poll_id\n    )\n      return;\n    const someAttachmentsUploading = attachments.some(\n      (att) => att.localMetadata?.uploadState === 'uploading',\n    );\n\n    if (someAttachmentsUploading) {\n      return addNotification(t('Wait until all attachments have uploaded'), 'error');\n    }\n\n    const attachmentsFromUploads = attachments\n      .filter(\n        (att) =>\n          att.localMetadata?.uploadState !== 'failed' ||\n          (findAndEnqueueURLsToEnrich && !att.og_scrape_url), // filter out all the attachments scraped before the message was edited\n      )\n      .map((localAttachment) => {\n        // eslint-disable-next-line @typescript-eslint/no-unused-vars\n        const { localMetadata: _, ...attachment } = localAttachment;\n        return attachment as Attachment;\n      });\n\n    const sendOptions = { ...options };\n    let attachmentsFromLinkPreviews: Attachment[] = [];\n    if (findAndEnqueueURLsToEnrich) {\n      // prevent showing link preview in MessageInput after the message has been sent\n      cancelURLEnrichment();\n      const someLinkPreviewsLoading = Array.from(linkPreviews.values()).some(\n        (linkPreview) =>\n          [LinkPreviewState.QUEUED, LinkPreviewState.LOADING].includes(linkPreview.state),\n      );\n      const someLinkPreviewsDismissed = Array.from(linkPreviews.values()).some(\n        (linkPreview) => linkPreview.state === LinkPreviewState.DISMISSED,\n      );\n\n      attachmentsFromLinkPreviews = someLinkPreviewsLoading\n        ? []\n        : Array.from(linkPreviews.values())\n            .filter(\n              (linkPreview) =>\n                linkPreview.state === LinkPreviewState.LOADED &&\n                !attachmentsFromUploads.find(\n                  (attFromUpload) =>\n                    attFromUpload.og_scrape_url === linkPreview.og_scrape_url,\n                ),\n            )\n\n            .map(\n              // eslint-disable-next-line @typescript-eslint/no-unused-vars\n              ({ state: linkPreviewState, ...ogAttachment }) =>\n                ogAttachment as Attachment,\n            );\n\n      // scraped attachments are added only if all enrich queries has completed. Otherwise, the scraping has to be done server-side.\n      sendOptions.skip_enrich_url =\n        (!someLinkPreviewsLoading && attachmentsFromLinkPreviews.length > 0) ||\n        someLinkPreviewsDismissed;\n    }\n\n    const newAttachments = [...attachmentsFromUploads, ...attachmentsFromLinkPreviews];\n\n    // Instead of checking if a user is still mentioned every time the text changes,\n    // just filter out non-mentioned users before submit, which is cheaper\n    // and allows users to easily undo any accidental deletion\n    const actualMentionedUsers = Array.from(\n      new Set(\n        mentioned_users.filter(\n          ({ id, name }) => text.includes(`@${id}`) || text.includes(`@${name}`),\n        ),\n      ),\n    );\n\n    const updatedMessage = {\n      attachments: newAttachments,\n      mentioned_users: actualMentionedUsers,\n      text,\n    };\n\n    if (message && message.type !== 'error') {\n      delete message.i18n;\n\n      try {\n        await editMessage(\n          {\n            ...message,\n            ...updatedMessage,\n            ...customMessageData,\n          } as unknown as UpdatedMessage<StreamChatGenerics>,\n          sendOptions,\n        );\n\n        clearEditingState?.();\n        dispatch({ type: 'clear' });\n      } catch (err) {\n        addNotification(t('Edit message request failed'), 'error');\n      }\n    } else {\n      try {\n        dispatch({ type: 'clear' });\n\n        if (overrideSubmitHandler) {\n          await overrideSubmitHandler(\n            {\n              ...updatedMessage,\n              parent,\n            },\n            channel.cid,\n            customMessageData,\n            sendOptions,\n          );\n        } else {\n          await sendMessage(\n            {\n              ...updatedMessage,\n              parent,\n            },\n            customMessageData,\n            sendOptions,\n          );\n        }\n\n        if (publishTypingEvent) await channel.stopTyping();\n      } catch (err) {\n        dispatch({\n          getNewText: () => text,\n          type: 'setText',\n        });\n\n        actualMentionedUsers?.forEach((user) => {\n          dispatch({ type: 'addMentionedUser', user });\n        });\n\n        addNotification(t('Send message request failed'), 'error');\n      }\n    }\n  };\n\n  return { handleSubmit };\n};\n", "import { useCallback } from 'react';\nimport { dataTransferItemsToFiles, FileLike } from '../../ReactFileUtilities';\nimport type { EnrichURLsController } from './useLinkPreviews';\nimport { SetLinkPreviewMode } from '../types';\n\nexport const usePasteHandler = (\n  uploadNewFiles: (files: FileList | FileLike[] | File[]) => void,\n  insertText: (textToInsert: string) => void,\n  isUploadEnabled: boolean,\n  findAndEnqueueURLsToEnrich?: EnrichURLsController['findAndEnqueueURLsToEnrich'],\n) => {\n  const onPaste = useCallback(\n    (clipboardEvent: React.ClipboardEvent<HTMLTextAreaElement>) => {\n      (async (event) => {\n        const { items } = event.clipboardData;\n        event.preventDefault();\n        // Get a promise for the plain text in case no files are\n        // found. This needs to be done here because chrome cleans\n        // up the DataTransferItems after resolving of a promise.\n        let plainTextPromise: Promise<string> | undefined = undefined;\n        for (let i = 0; i < items.length; i++) {\n          const item = items[i];\n          if (item.kind === 'string' && item.type === 'text/plain') {\n            plainTextPromise = new Promise((resolve) => {\n              item.getAsString((string) => {\n                resolve(string);\n              });\n            });\n            break;\n          }\n        }\n\n        const fileLikes = await dataTransferItemsToFiles(Array.from(items));\n\n        if (plainTextPromise) {\n          const pastedText = await plainTextPromise;\n          insertText(pastedText);\n          findAndEnqueueURLsToEnrich?.(pastedText, SetLinkPreviewMode.UPSERT);\n          findAndEnqueueURLsToEnrich?.flush();\n        } else if (fileLikes.length && isUploadEnabled) {\n          uploadNewFiles(fileLikes);\n          return;\n        }\n      })(clipboardEvent);\n    },\n    [findAndEnqueueURLsToEnrich, insertText, isUploadEnabled, uploadNewFiles],\n  );\n\n  return { onPaste };\n};\n", "import { useCallback, useEffect, useMemo, useState } from 'react';\nimport { MessageInputContextValue, useTranslationContext } from '../../../context';\nimport {\n  CustomAudioRecordingConfig,\n  MediaRecorderController,\n  MediaRecordingState,\n} from '../classes';\n\nimport type { LocalVoiceRecordingAttachment } from '../../MessageInput';\nimport type { DefaultStreamChatGenerics } from '../../../types';\n\nexport type RecordingController<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n  completeRecording: () => void;\n  permissionState?: PermissionState;\n  recorder?: MediaRecorderController;\n  recording?: LocalVoiceRecordingAttachment<StreamChatGenerics>;\n  recordingState?: MediaRecordingState;\n};\n\ntype UseMediaRecorderParams<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Pick<\n  MessageInputContextValue<StreamChatGenerics>,\n  'asyncMessagesMultiSendEnabled' | 'handleSubmit' | 'uploadAttachment'\n> & {\n  enabled: boolean;\n  generateRecordingTitle?: (mimeType: string) => string;\n  recordingConfig?: CustomAudioRecordingConfig;\n};\n\nexport const useMediaRecorder = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n  asyncMessagesMultiSendEnabled,\n  enabled,\n  generateRecordingTitle,\n  handleSubmit,\n  recordingConfig,\n  uploadAttachment,\n}: UseMediaRecorderParams<StreamChatGenerics>): RecordingController<StreamChatGenerics> => {\n  const { t } = useTranslationContext('useMediaRecorder');\n\n  const [recording, setRecording] =\n    useState<LocalVoiceRecordingAttachment<StreamChatGenerics>>();\n  const [recordingState, setRecordingState] = useState<MediaRecordingState>();\n  const [permissionState, setPermissionState] = useState<PermissionState>();\n  const [isScheduledForSubmit, scheduleForSubmit] = useState(false);\n\n  const recorder = useMemo(\n    () =>\n      enabled\n        ? new MediaRecorderController({\n            config: recordingConfig ?? {},\n            generateRecordingTitle,\n            t,\n          })\n        : undefined,\n    [recordingConfig, enabled, generateRecordingTitle, t],\n  );\n\n  const completeRecording = useCallback(async () => {\n    if (!recorder) return;\n    const recording = await recorder.stop();\n    if (!recording) return;\n    await uploadAttachment(recording);\n    if (!asyncMessagesMultiSendEnabled) {\n      // FIXME: cannot call handleSubmit() directly as the function has stale reference to attachments\n      scheduleForSubmit(true);\n    }\n    recorder.cleanUp();\n  }, [asyncMessagesMultiSendEnabled, recorder, uploadAttachment]);\n\n  useEffect(() => {\n    if (!isScheduledForSubmit) return;\n    handleSubmit();\n    scheduleForSubmit(false);\n  }, [handleSubmit, isScheduledForSubmit]);\n\n  useEffect(() => {\n    if (!recorder) return;\n    recorder.permission.watch();\n    const recordingSubscription = recorder.recording.subscribe(setRecording);\n    const recordingStateSubscription =\n      recorder.recordingState.subscribe(setRecordingState);\n    const permissionStateSubscription =\n      recorder.permission.state.subscribe(setPermissionState);\n\n    return () => {\n      recorder.cancel();\n      recorder.permission.unwatch();\n      recordingSubscription.unsubscribe();\n      recordingStateSubscription.unsubscribe();\n      permissionStateSubscription.unsubscribe();\n    };\n  }, [recorder]);\n\n  return {\n    completeRecording,\n    permissionState,\n    recorder,\n    recording,\n    recordingState,\n  };\n};\n", "export interface SubscriptionLike {\n  closed: boolean;\n\n  unsubscribe(): void;\n}\n\nexport class Subscription implements SubscriptionLike {\n  closed = false;\n  private _unsubscribe: (() => void) | undefined;\n\n  constructor(unsubscribe?: () => void) {\n    this._unsubscribe = unsubscribe;\n  }\n\n  unsubscribe() {\n    this.closed = true;\n    this._unsubscribe?.();\n  }\n}\n", "type Next<T> = (value: T) => void;\nexport type Observer<T> = {\n  next(value: T): void;\n  complete?(): void;\n  error?(error: Error): void;\n};\nexport type ObserverOrNext<T> = Next<T> | Observer<T>;\n\nexport function createObserver<T>(observerOrNext: ObserverOrNext<T>): Observer<T> {\n  return typeof observerOrNext === 'function' ? { next: observerOrNext } : observerOrNext;\n}\n", "import { createObserver, ObserverOrNext } from './Observer';\nimport { Subscription } from './Subscription';\n\nexport interface Unsubscribable {\n  unsubscribe(): void;\n}\n\ntype Producer<T> = (observer: ObserverOrNext<T>) => Subscription;\n\nexport interface Subscribable<T> {\n  subscribe(observerOrNext: ObserverOrNext<T>): Unsubscribable;\n}\n\nexport class Observable<T> implements Subscribable<T> {\n  protected _closed = false;\n  private _producer: Producer<T> | undefined;\n\n  constructor(producer?: Producer<T>) {\n    if (producer) this._producer = producer;\n  }\n\n  get closed() {\n    return this._closed;\n  }\n\n  subscribe(observerOrNext: ObserverOrNext<T>): Subscription {\n    const observer = createObserver<T>(observerOrNext);\n    if (!this.closed) {\n      this._producer?.(observer);\n    }\n    return new Subscription(() => {\n      this._closed = true;\n    });\n  }\n}\n", "import { Observable } from './Observable';\nimport { Subscription, SubscriptionLike } from './Subscription';\nimport { createObserver, Observer, ObserverOrNext } from './Observer';\n\nexport class Subject<T> extends Observable<T> implements SubscriptionLike {\n  private _observers: Map<number, Observer<T>> = new Map();\n  private _observerCounter = 0;\n  thrownError: Error | undefined;\n\n  constructor() {\n    super();\n  }\n\n  get observers() {\n    return Array.from(this._observers.values());\n  }\n\n  next(value: T) {\n    if (this.closed) return;\n    const observers = this.observers;\n    for (let i = 0; i < observers.length; i++) {\n      observers[i].next(value);\n    }\n  }\n\n  error(err: Error) {\n    if (this.closed) return;\n    this.thrownError = err;\n    const { observers } = this;\n    for (let i = 0; i < observers.length; i++) {\n      observers[i].error?.(err);\n    }\n    this._observers.clear();\n  }\n\n  complete() {\n    if (this.closed) return;\n    this._closed = true;\n    const { observers } = this;\n    for (let i = 0; i < observers.length; i++) {\n      observers[i].complete?.();\n    }\n    this._observers.clear();\n  }\n\n  subscribe(observerOrNext: ObserverOrNext<T>): Subscription {\n    const observer = createObserver<T>(observerOrNext);\n    if (this.thrownError || this.closed) {\n      const subscription = new Subscription();\n      subscription.closed = true;\n      return subscription;\n    }\n\n    const observerId = this._observerCounter++;\n    this._observers.set(observerId, observer);\n    return new Subscription(() => {\n      this._observers.delete(observerId);\n    });\n  }\n\n  unsubscribe(): void {\n    this._closed = true;\n    this._observers.clear();\n  }\n}\n", "import { Subject } from './Subject';\nimport { createObserver, ObserverOrNext } from './Observer';\nimport { Subscription } from './Subscription';\n\nexport class BehaviorSubject<T> extends Subject<T> {\n  constructor(private _value: T) {\n    super();\n  }\n\n  get value(): T {\n    const { _value, thrownError } = this;\n    if (thrownError) {\n      throw thrownError;\n    }\n    return _value;\n  }\n\n  subscribe(observerOrNext: ObserverOrNext<T>): Subscription {\n    const observer = createObserver<T>(observerOrNext);\n    const subscription = super.subscribe(observerOrNext);\n    if (!subscription.closed) observer.next(this._value);\n    return subscription;\n  }\n\n  next(value: T): void {\n    super.next((this._value = value));\n  }\n}\n", "import type { RecordedMediaType } from '../../ReactFileUtilities';\nimport { ChangeEvent } from 'react';\nimport { Subscription } from '../observable/Subscription';\nimport { Subject } from '../observable/Subject';\nimport { BehaviorSubject } from '../observable/BehaviorSubject';\n\nexport enum RecordingPermission {\n  CAM = 'camera',\n  MIC = 'microphone',\n}\n\nconst MEDIA_TO_PERMISSION: Record<RecordedMediaType, RecordingPermission> = {\n  audio: RecordingPermission.MIC,\n  video: RecordingPermission.CAM,\n};\n\nexport type BrowserPermissionOptions = {\n  mediaType: RecordedMediaType;\n};\n\nexport class BrowserPermission {\n  name: string;\n  state = new BehaviorSubject<PermissionState | undefined>(undefined);\n  status = new BehaviorSubject<PermissionStatus | undefined>(undefined);\n  error = new Subject<Error | undefined>();\n\n  private changeSubscriptions: Subscription[] = [];\n\n  constructor({ mediaType }: BrowserPermissionOptions) {\n    this.name = MEDIA_TO_PERMISSION[mediaType];\n  }\n\n  get isWatching() {\n    return this.changeSubscriptions.some((subscription) => !subscription.closed);\n  }\n\n  async watch() {\n    if (!this.status.value) {\n      await this.check();\n      if (!this.status.value) return;\n    }\n\n    const status = this.status.value;\n    const handlePermissionChange = (e: Event) => {\n      const { state } = (e as unknown as ChangeEvent<PermissionStatus>).target;\n      this.state.next(state);\n    };\n    status.addEventListener('change', handlePermissionChange);\n\n    this.changeSubscriptions.push(\n      new Subscription(() => {\n        status.removeEventListener('change', handlePermissionChange);\n      }),\n    );\n  }\n\n  unwatch() {\n    this.changeSubscriptions.forEach((subscription) => subscription.unsubscribe());\n  }\n\n  async check() {\n    if (!this.name) {\n      this.error.next(new Error('Unknown media recording permission'));\n      return;\n    }\n\n    let permissionState: PermissionState;\n    try {\n      const permissionStatus = await navigator.permissions.query({\n        name: this.name as unknown as PermissionName,\n      });\n      permissionState = permissionStatus.state;\n      this.status.next(permissionStatus);\n    } catch (e) {\n      // permission does not exist - cannot be queried\n      // an example would be Firefox - camera, neither microphone perms can be queried\n      permissionState = 'granted' as PermissionState;\n    }\n    this.state.next(permissionState);\n  }\n}\n", "import fixWebmDuration from 'fix-webm-duration';\nimport { nanoid } from 'nanoid';\nimport {\n  AmplitudeRecorder,\n  AmplitudeRecorderConfig,\n  DEFAULT_AMPLITUDE_RECORDER_CONFIG,\n} from './AmplitudeRecorder';\nimport { BrowserPermission } from './BrowserPermission';\nimport { BehaviorSubject, Subject } from '../observable';\nimport { transcode, TranscoderConfig } from '../transcode';\nimport { resampleWaveformData } from '../../Attachment';\nimport {\n  createFileFromBlobs,\n  getExtensionFromMimeType,\n  getRecordedMediaTypeFromMimeType,\n  RecordedMediaType,\n} from '../../ReactFileUtilities';\nimport { TranslationContextValue } from '../../../context';\nimport { defaultTranslatorFunction } from '../../../i18n';\nimport { mergeDeepUndefined } from '../../../utils/mergeDeep';\n\nimport type { LocalVoiceRecordingAttachment } from '../../MessageInput';\nimport type { DefaultStreamChatGenerics } from '../../../types';\n\nexport const RECORDED_MIME_TYPE_BY_BROWSER = {\n  audio: {\n    others: 'audio/webm',\n    safari: 'audio/mp4;codecs=mp4a.40.2',\n  },\n} as const;\n\nexport const DEFAULT_AUDIO_TRANSCODER_CONFIG: TranscoderConfig = {\n  sampleRate: 16000,\n} as const;\n\nconst disposeOfMediaStream = (stream?: MediaStream) => {\n  if (!stream?.active) return;\n  stream.getTracks().forEach((track) => {\n    track.stop();\n    stream.removeTrack(track);\n  });\n};\n\nconst logError = (e?: Error) => e && console.error('[MEDIA RECORDER ERROR]', e);\n\ntype MediaRecorderConfig = Omit<MediaRecorderOptions, 'mimeType'> &\n  Required<Pick<MediaRecorderOptions, 'mimeType'>>;\n\nexport type AudioRecorderConfig = {\n  amplitudeRecorderConfig: AmplitudeRecorderConfig;\n  mediaRecorderConfig: MediaRecorderOptions;\n  transcoderConfig: TranscoderConfig;\n};\n\ntype PartialValues<T> = { [P in keyof T]?: Partial<T[P]> };\n\nexport type CustomAudioRecordingConfig = PartialValues<AudioRecorderConfig>;\n\nexport type AudioRecorderOptions = {\n  config?: CustomAudioRecordingConfig;\n  generateRecordingTitle?: (mimeType: string) => string;\n  t?: TranslationContextValue['t'];\n};\n\nexport enum MediaRecordingState {\n  PAUSED = 'paused',\n  RECORDING = 'recording',\n  STOPPED = 'stopped',\n}\n\nexport enum RecordingAttachmentType {\n  VOICE_RECORDING = 'voiceRecording',\n}\n\nexport class MediaRecorderController<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> {\n  permission: BrowserPermission;\n  mediaRecorder: MediaRecorder | undefined;\n  amplitudeRecorder: AmplitudeRecorder | undefined;\n\n  amplitudeRecorderConfig: AmplitudeRecorderConfig;\n  mediaRecorderConfig: MediaRecorderConfig;\n  transcoderConfig: TranscoderConfig;\n\n  startTime: number | undefined;\n  recordedChunkDurations: number[] = [];\n  recordedData: Blob[] = [];\n  recordingUri: string | undefined;\n  mediaType: RecordedMediaType;\n\n  signalRecordingReady:\n    | ((r: LocalVoiceRecordingAttachment<StreamChatGenerics>) => void)\n    | undefined;\n\n  recordingState = new BehaviorSubject<MediaRecordingState | undefined>(undefined);\n  recording = new BehaviorSubject<\n    LocalVoiceRecordingAttachment<StreamChatGenerics> | undefined\n  >(undefined);\n  error = new Subject<Error | undefined>();\n  notification = new Subject<{ text: string; type: 'success' | 'error' } | undefined>();\n\n  customGenerateRecordingTitle: ((mimeType: string) => string) | undefined;\n  t: TranslationContextValue['t'];\n\n  constructor({ config, generateRecordingTitle, t }: AudioRecorderOptions = {}) {\n    this.t = t || defaultTranslatorFunction;\n\n    this.amplitudeRecorderConfig = mergeDeepUndefined(\n      { ...config?.amplitudeRecorderConfig },\n      DEFAULT_AMPLITUDE_RECORDER_CONFIG,\n    );\n\n    this.mediaRecorderConfig = mergeDeepUndefined(\n      { ...config?.mediaRecorderConfig },\n      {\n        mimeType: MediaRecorder.isTypeSupported('audio/webm')\n          ? RECORDED_MIME_TYPE_BY_BROWSER.audio.others\n          : RECORDED_MIME_TYPE_BY_BROWSER.audio.safari,\n      },\n    );\n\n    this.transcoderConfig = mergeDeepUndefined(\n      { ...config?.transcoderConfig },\n      DEFAULT_AUDIO_TRANSCODER_CONFIG,\n    );\n\n    const mediaType = getRecordedMediaTypeFromMimeType(this.mediaRecorderConfig.mimeType);\n    if (!mediaType) {\n      throw new Error(\n        `Unsupported media type (supported audio or video only). Provided mimeType: ${this.mediaRecorderConfig.mimeType}`,\n      );\n    }\n    this.mediaType = mediaType;\n\n    this.permission = new BrowserPermission({ mediaType });\n\n    this.customGenerateRecordingTitle = generateRecordingTitle;\n  }\n\n  get durationMs() {\n    return this.recordedChunkDurations.reduce((acc, val) => acc + val, 0);\n  }\n\n  generateRecordingTitle = (mimeType: string) => {\n    if (this.customGenerateRecordingTitle) {\n      return this.customGenerateRecordingTitle(mimeType);\n    }\n    return `${this.mediaType}_recording_${new Date().toISOString()}.${getExtensionFromMimeType(\n      mimeType,\n    )}`; // extension needed so that desktop Safari can play the asset\n  };\n\n  makeVoiceRecording = async () => {\n    if (this.recordingUri) URL.revokeObjectURL(this.recordingUri);\n\n    if (!this.recordedData.length) return;\n    const { mimeType } = this.mediaRecorderConfig;\n    let blob = new Blob(this.recordedData, { type: mimeType });\n    if (mimeType.match('audio/webm')) {\n      // The browser does not include duration metadata with the recorded blob\n      blob = await fixWebmDuration(blob, this.durationMs, {\n        logger: () => null, // prevents polluting the browser console\n      });\n    }\n    if (!mimeType.match('audio/mp4')) {\n      blob = await transcode({\n        blob,\n        ...this.transcoderConfig,\n      });\n    }\n\n    if (!blob) return;\n\n    this.recordingUri = URL.createObjectURL(blob);\n    const file = createFileFromBlobs({\n      blobsArray: [blob],\n      fileName: this.generateRecordingTitle(blob.type),\n      mimeType: blob.type,\n    });\n\n    return {\n      asset_url: this.recordingUri,\n      duration: this.durationMs / 1000,\n      file_size: blob.size,\n      localMetadata: {\n        file,\n        id: nanoid(),\n      },\n      mime_type: blob.type,\n      title: file.name,\n      type: RecordingAttachmentType.VOICE_RECORDING,\n      waveform_data: resampleWaveformData(\n        this.amplitudeRecorder?.amplitudes.value ?? [],\n        this.amplitudeRecorderConfig.sampleCount,\n      ),\n    };\n  };\n\n  handleErrorEvent = (e: Event) => {\n    const { error } = e as ErrorEvent;\n    logError(error);\n    this.error.next(error);\n    this.notification.next({\n      text: this.t('An error has occurred during recording'),\n      type: 'error',\n    });\n  };\n\n  handleDataavailableEvent = async (e: BlobEvent) => {\n    if (!e.data.size) return;\n    if (this.mediaType !== 'audio') return;\n    try {\n      this.recordedData.push(e.data);\n      const recording = await this.makeVoiceRecording();\n      if (!recording) return;\n      this.signalRecordingReady?.(recording);\n      this.recording.next(recording);\n    } catch (e) {\n      logError(e as Error);\n      this.error.next(e as Error);\n      this.notification.next({\n        text: this.t('An error has occurred during the recording processing'),\n        type: 'error',\n      });\n    }\n  };\n\n  resetRecordingState = () => {\n    this.recordedData = [];\n    this.recording.next(undefined);\n    this.recordingState.next(undefined);\n    this.recordedChunkDurations = [];\n    this.startTime = undefined;\n  };\n\n  cleanUp = () => {\n    this.resetRecordingState();\n    if (this.recordingUri) URL.revokeObjectURL(this.recordingUri);\n    this.amplitudeRecorder?.close();\n    if (this.mediaRecorder) {\n      disposeOfMediaStream(this.mediaRecorder.stream);\n      this.mediaRecorder.removeEventListener(\n        'dataavailable',\n        this.handleDataavailableEvent,\n      );\n      this.mediaRecorder.removeEventListener('error', this.handleErrorEvent);\n    }\n  };\n\n  start = async () => {\n    if (\n      [MediaRecordingState.RECORDING, MediaRecordingState.PAUSED].includes(\n        this.recordingState.value as MediaRecordingState,\n      )\n    ) {\n      const error = new Error('Cannot start recording. Recording already in progress');\n      logError(error);\n      this.error.next(error);\n      return;\n    }\n\n    // account for requirement on iOS as per this bug report: https://bugs.webkit.org/show_bug.cgi?id=252303\n    if (!navigator.mediaDevices) {\n      const error = new Error('Media recording is not supported');\n      logError(error);\n      this.error.next(error);\n      this.notification.next({ text: this.t('Error starting recording'), type: 'error' });\n      return;\n    }\n\n    if (this.mediaType === 'video') {\n      const error = new Error(\n        `Video recording is not supported. Provided MIME type: ${this.mediaRecorderConfig.mimeType}`,\n      );\n      logError(error);\n      this.error.next(error);\n      this.notification.next({ text: this.t('Error starting recording'), type: 'error' });\n      return;\n    }\n\n    if (!this.permission.state.value) {\n      await this.permission.check();\n    }\n\n    if (this.permission.state.value === 'denied') {\n      logError(new Error('Permission denied'));\n      return;\n    }\n\n    try {\n      const stream = await navigator.mediaDevices.getUserMedia({ audio: true });\n      this.mediaRecorder = new MediaRecorder(stream, this.mediaRecorderConfig);\n\n      this.mediaRecorder.addEventListener('dataavailable', this.handleDataavailableEvent);\n      this.mediaRecorder.addEventListener('error', this.handleErrorEvent);\n\n      this.startTime = new Date().getTime();\n      this.mediaRecorder.start();\n\n      if (this.mediaType === 'audio' && stream) {\n        this.amplitudeRecorder = new AmplitudeRecorder({\n          config: this.amplitudeRecorderConfig,\n          stream,\n        });\n        this.amplitudeRecorder.start();\n      }\n\n      this.recordingState.next(MediaRecordingState.RECORDING);\n    } catch (error) {\n      logError(error as Error);\n      this.cancel();\n      this.error.next(error as Error);\n      this.notification.next({ text: this.t('Error starting recording'), type: 'error' });\n    }\n  };\n\n  pause = () => {\n    if (this.recordingState.value !== MediaRecordingState.RECORDING) return;\n    if (this.startTime) {\n      this.recordedChunkDurations.push(new Date().getTime() - this.startTime);\n      this.startTime = undefined;\n    }\n    this.mediaRecorder?.pause();\n    this.amplitudeRecorder?.stop();\n    this.recordingState.next(MediaRecordingState.PAUSED);\n  };\n\n  resume = () => {\n    if (this.recordingState.value !== MediaRecordingState.PAUSED) return;\n    this.startTime = new Date().getTime();\n    this.mediaRecorder?.resume();\n    this.amplitudeRecorder?.start();\n    this.recordingState.next(MediaRecordingState.RECORDING);\n  };\n\n  stop = () => {\n    const recording = this.recording.value;\n    if (recording) return Promise.resolve(recording);\n\n    if (\n      ![MediaRecordingState.PAUSED, MediaRecordingState.RECORDING].includes(\n        (this.mediaRecorder?.state || '') as MediaRecordingState,\n      )\n    )\n      return Promise.resolve(undefined);\n\n    if (this.startTime) {\n      this.recordedChunkDurations.push(new Date().getTime() - this.startTime);\n      this.startTime = undefined;\n    }\n    const result = new Promise<LocalVoiceRecordingAttachment<StreamChatGenerics>>(\n      (res) => {\n        this.signalRecordingReady = res;\n      },\n    );\n    this.mediaRecorder?.stop();\n    this.amplitudeRecorder?.stop();\n    this.recordingState.next(MediaRecordingState.STOPPED);\n    return result;\n  };\n\n  cancel = () => {\n    this.stop();\n    this.cleanUp();\n  };\n}\n", "import mergeWith from 'lodash.mergewith';\nimport { UR } from 'stream-chat';\n\nconst overrideEverything = (_: unknown, source: unknown) => source;\n\nexport const mergeDeep = <TObject extends UR, TSource extends UR>(\n  target: TObject,\n  source: TSource,\n) => mergeWith<TObject, TSource>(target, source, overrideEverything);\n\nconst overrideUndefinedOnly = (object: unknown, source: unknown) => object ?? source;\n\nexport const mergeDeepUndefined = <TObject extends UR, TSource extends UR>(\n  target: TObject,\n  source: TSource,\n) => mergeWith<TObject, TSource>(target, source, overrideUndefinedOnly);\n", "import { BehaviorSubject } from '../observable/BehaviorSubject';\nimport { Subject } from '../observable/Subject';\nimport { mergeDeepUndefined } from '../../../utils/mergeDeep';\n\nconst MAX_FREQUENCY_AMPLITUDE = 255 as const;\n\nconst logError = (e?: Error) => e && console.error('[AMPLITUDE RECORDER ERROR]', e);\n\nconst rootMeanSquare = (values: Uint8Array) =>\n  Math.sqrt(values.reduce((acc, val) => acc + Math.pow(val, 2), 0) / values.length);\n\n/**\n * fftSize\n * An unsigned integer, representing the window size of the FFT, given in number of samples.\n * A higher value will result in more details in the frequency domain but fewer details\n * in the amplitude domain.\n *\n * Must be a power of 2 between 2^5 and 2^15, so one of: 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, and 32768.\n * Defaults to 32.\n *\n * maxDecibels\n * A double, representing the maximum decibel value for scaling the FFT analysis data,\n * where 0 dB is the loudest possible sound, -10 dB is a 10th of that, etc.\n * The default value is -30 dB.\n *\n * minDecibels\n * A double, representing the minimum decibel value for scaling the FFT analysis data,\n * where 0 dB is the loudest possible sound, -10 dB is a 10th of that, etc.\n * The default value is -100 dB.\n */\nexport type AmplitudeAnalyserConfig = Pick<\n  AnalyserNode,\n  'fftSize' | 'maxDecibels' | 'minDecibels'\n>;\nexport type AmplitudeRecorderConfig = {\n  analyserConfig: AmplitudeAnalyserConfig;\n  sampleCount: number;\n  samplingFrequencyMs: number;\n};\n\nexport const DEFAULT_AMPLITUDE_RECORDER_CONFIG: AmplitudeRecorderConfig = {\n  analyserConfig: {\n    fftSize: 32,\n    maxDecibels: 0,\n    minDecibels: -100,\n  } as AmplitudeAnalyserConfig,\n  sampleCount: 100,\n  samplingFrequencyMs: 60,\n};\n\ntype AmplitudeAnalyserOptions = {\n  stream: MediaStream;\n  config?: AmplitudeRecorderConfig;\n};\n\nexport enum AmplitudeRecorderState {\n  CLOSED = 'closed',\n  RECORDING = 'recording',\n  STOPPED = 'stopped',\n}\n\nexport class AmplitudeRecorder {\n  audioContext: AudioContext | undefined;\n  analyserNode: AnalyserNode | undefined;\n  microphone: MediaStreamAudioSourceNode | undefined;\n  stream: MediaStream;\n\n  config: AmplitudeRecorderConfig;\n\n  amplitudeSamplingInterval: ReturnType<typeof setInterval> | undefined;\n\n  amplitudes = new BehaviorSubject<number[]>([]);\n  state = new BehaviorSubject<AmplitudeRecorderState | undefined>(undefined);\n  error = new Subject<Error | undefined>();\n\n  constructor({ config, stream }: AmplitudeAnalyserOptions) {\n    this.config = mergeDeepUndefined({ ...config }, DEFAULT_AMPLITUDE_RECORDER_CONFIG);\n    this.stream = stream;\n  }\n\n  init() {\n    this.audioContext = new AudioContext();\n    this.analyserNode = this.audioContext.createAnalyser();\n    const { analyserConfig } = this.config;\n    this.analyserNode.fftSize = analyserConfig.fftSize;\n    this.analyserNode.maxDecibels = analyserConfig.maxDecibels;\n    this.analyserNode.minDecibels = analyserConfig.minDecibels;\n\n    this.microphone = this.audioContext.createMediaStreamSource(this.stream);\n    this.microphone.connect(this.analyserNode);\n  }\n\n  stop() {\n    clearInterval(this.amplitudeSamplingInterval);\n    this.amplitudeSamplingInterval = undefined;\n    this.state.next(AmplitudeRecorderState.STOPPED);\n  }\n\n  start = () => {\n    if (this.state.value === AmplitudeRecorderState.CLOSED) return;\n    if (!this.stream) {\n      throw new Error(\n        'Missing MediaStream instance. Cannot to start amplitude recording',\n      );\n    }\n\n    if (this.state.value === AmplitudeRecorderState.RECORDING) this.stop();\n\n    if (!this.analyserNode) {\n      if (!this.stream) return;\n      this.init();\n    }\n\n    this.state.next(AmplitudeRecorderState.RECORDING);\n\n    this.amplitudeSamplingInterval = setInterval(() => {\n      if (!(this.analyserNode && this.state.value === AmplitudeRecorderState.RECORDING))\n        return;\n      const frequencyBins = new Uint8Array(this.analyserNode.frequencyBinCount);\n      try {\n        this.analyserNode.getByteFrequencyData(frequencyBins);\n      } catch (e) {\n        logError(e as Error);\n        this.error.next(e as Error);\n        return;\n      }\n      const normalizedSignalStrength =\n        rootMeanSquare(frequencyBins) / MAX_FREQUENCY_AMPLITUDE;\n      this.amplitudes.next([...this.amplitudes.value, normalizedSignalStrength]);\n    }, this.config.samplingFrequencyMs);\n  };\n\n  close() {\n    if (this.state.value !== AmplitudeRecorderState.STOPPED) this.stop();\n    this.state.next(AmplitudeRecorderState.CLOSED);\n    this.amplitudes.next([]);\n    this.microphone?.disconnect();\n    this.analyserNode?.disconnect();\n    if (this.audioContext?.state !== 'closed') this.audioContext?.close();\n  }\n}\n", "import { readFileAsArrayBuffer } from '../../ReactFileUtilities';\n\n/**\n * In the context of resampling audio data, AudioContext is used to decode the input audio file into an AudioBuffer,\n * which is a fundamental data structure representing audio data.\n * @param file\n */\nexport const toAudioBuffer = async (file: File) => {\n  const audioCtx = new AudioContext();\n\n  const arrayBuffer = await readFileAsArrayBuffer(file);\n  const decodedData = await audioCtx.decodeAudioData(arrayBuffer);\n  if (audioCtx.state !== 'closed') await audioCtx.close();\n  return decodedData;\n};\n\n/**\n * OfflineAudioContext is a specialized type of AudioContext that does not render audio in real-time and is used for offline audio processing tasks.\n * It allows performing audio processing and rendering without actually playing the audio through speakers or outputting it to a destination.\n * In the context of resampling audio data, OfflineAudioContext is used to resample the decoded AudioBuffer from a file to the desired sample rate.\n * It provides more flexibility and control over audio processing, as it can operate at different sample rates and durations compared to real-time audio contexts.\n * @param audioBuffer\n * @param sampleRate\n */\nexport const renderAudio = async (audioBuffer: AudioBuffer, sampleRate: number) => {\n  const offlineAudioCtx = new OfflineAudioContext(\n    audioBuffer.numberOfChannels,\n    audioBuffer.duration * sampleRate,\n    sampleRate,\n  );\n  const source = offlineAudioCtx.createBufferSource();\n  source.buffer = audioBuffer;\n  source.connect(offlineAudioCtx.destination);\n  source.start();\n\n  return await offlineAudioCtx.startRendering();\n};\n", "import { renderAudio, toAudioBuffer } from './audioProcessing';\n\nconst WAV_HEADER_LENGTH_BYTES = 44 as const;\nconst BYTES_PER_SAMPLE = 2 as const;\nconst RIFF_FILE_MAX_BYTES = 4294967295 as const;\n\nconst HEADER = {\n  AUDIO_FORMAT: { offset: 20, value: 1 }, // PCM = 1\n  BITS_PER_SAMPLE: { offset: 34, value: BYTES_PER_SAMPLE * 8 }, // 16 bits encoding\n  BLOCK_ALIGN: { offset: 32 },\n  BYTE_RATE: { offset: 28 },\n  CHANNEL_COUNT: { offset: 22 }, // 1 - mono, 2 - stereo\n  CHUNK_ID: { offset: 0, value: 0x52494646 }, // hex representation of string \"RIFF\" (Resource Interchange File Format) - identifies the file structure that defines a class of more specific file formats, e.g. WAVE\n  CHUNK_SIZE: { offset: 4 },\n  FILE_FORMAT: { offset: 8, value: 0x57415645 }, // hex representation of string \"WAVE\"\n  SAMPLE_RATE: { offset: 24 },\n  SUBCHUNK1_ID: { offset: 12, value: 0x666d7420 }, // hex representation of string \"fmt \" - identifies the start of \"format\" section of the header\n  SUBCHUNK1_SIZE: { offset: 16, value: 16 }, // Subchunk1 Size without SUBCHUNK1_ID and SUBCHUNK1_SIZE fields\n  SUBCHUNK2_ID: { offset: 36, value: 0x64617461 }, // hex representation of string \"data\" - identifies the start of actual audio data section\n  SUBCHUNK2_SIZE: { offset: 40 }, // actual audio data size\n} as const;\n\nconst fourCharsToInt = (chars: string) =>\n  (chars.charCodeAt(0) << 24) |\n  (chars.charCodeAt(1) << 16) |\n  (chars.charCodeAt(2) << 8) |\n  chars.charCodeAt(3);\n\nconst WAV_HEADER_FLAGS = {\n  data: fourCharsToInt('data'),\n  fmt: fourCharsToInt('fmt '),\n  RIFF: fourCharsToInt('RIFF'),\n  WAVE: fourCharsToInt('WAVE'),\n};\n\ntype WriteWaveHeaderParams = {\n  arrayBuffer: ArrayBuffer;\n  // 1 - mono, 2 - stereo\n  channelCount: number;\n  // Number of samples per second, e.g. 44100Hz\n  sampleRate: number;\n};\nconst writeWavHeader = ({\n  arrayBuffer,\n  channelCount,\n  sampleRate,\n}: WriteWaveHeaderParams) => {\n  const byteRate = sampleRate * channelCount * BYTES_PER_SAMPLE; // bytes/sec\n  const blockAlign = channelCount * BYTES_PER_SAMPLE;\n\n  const dataView = new DataView(arrayBuffer);\n  /*\n   * The maximum size of a RIFF file is 4294967295 bytes and since the header takes up 44 bytes there are 4294967251 bytes left for the\n   * data chunk.\n   */\n  const dataChunkSize = Math.min(\n    dataView.byteLength - WAV_HEADER_LENGTH_BYTES,\n    RIFF_FILE_MAX_BYTES - WAV_HEADER_LENGTH_BYTES,\n  );\n\n  dataView.setUint32(HEADER.CHUNK_ID.offset, HEADER.CHUNK_ID.value); // \"RIFF\"\n  dataView.setUint32(HEADER.CHUNK_SIZE.offset, arrayBuffer.byteLength - 8, true); // adjustment for the first two headers - chunk id + file size\n  dataView.setUint32(HEADER.FILE_FORMAT.offset, HEADER.FILE_FORMAT.value); // \"WAVE\"\n\n  dataView.setUint32(HEADER.SUBCHUNK1_ID.offset, HEADER.SUBCHUNK1_ID.value); // \"fmt \"\n  dataView.setUint32(HEADER.SUBCHUNK1_SIZE.offset, HEADER.SUBCHUNK1_SIZE.value, true);\n  dataView.setUint16(HEADER.AUDIO_FORMAT.offset, HEADER.AUDIO_FORMAT.value, true);\n  dataView.setUint16(HEADER.CHANNEL_COUNT.offset, channelCount, true);\n  dataView.setUint32(HEADER.SAMPLE_RATE.offset, sampleRate, true);\n  dataView.setUint32(HEADER.BYTE_RATE.offset, byteRate, true);\n  dataView.setUint16(HEADER.BLOCK_ALIGN.offset, blockAlign, true);\n  dataView.setUint16(HEADER.BITS_PER_SAMPLE.offset, HEADER.BITS_PER_SAMPLE.value, true);\n\n  dataView.setUint32(HEADER.SUBCHUNK2_ID.offset, HEADER.SUBCHUNK2_ID.value); // \"data\"\n  dataView.setUint32(HEADER.SUBCHUNK2_SIZE.offset, dataChunkSize, true);\n};\n\nexport const readWavHeader = (dataView: DataView) => {\n  const header = dataView.getUint32(0, false);\n  if (WAV_HEADER_FLAGS.RIFF !== header) {\n    console.error('Missing RIFF header in WAVE file');\n    return;\n  }\n  if (WAV_HEADER_FLAGS.WAVE !== dataView.getUint32(HEADER.FILE_FORMAT.offset, false)) {\n    console.error('Missing WAVE header in WAVE file');\n    return;\n  }\n  if (WAV_HEADER_FLAGS.fmt !== dataView.getUint32(HEADER.SUBCHUNK1_ID.offset, false)) {\n    console.error('Missing fmt header in WAVE file');\n    return;\n  }\n\n  return {\n    audioDataSizeBytes: dataView.getUint32(HEADER.SUBCHUNK2_SIZE.offset, true),\n    audioDataStartOffset: WAV_HEADER_LENGTH_BYTES,\n    channelCount: dataView.getUint16(HEADER.CHANNEL_COUNT.offset, true),\n    sampleRate: dataView.getUint32(HEADER.SAMPLE_RATE.offset, true),\n  };\n};\n\nconst splitDataByChannel = (audioBuffer: AudioBuffer) =>\n  Array.from({ length: audioBuffer.numberOfChannels }, (_, i) =>\n    audioBuffer.getChannelData(i),\n  );\n\ntype WriteAudioDataParams = {\n  arrayBuffer: ArrayBuffer;\n  dataByChannel: Float32Array[];\n};\n\n/**\n * In a WAV file, samples for each channel are usually interleaved, meaning samples from each channel are grouped together sequentially.\n * For example, in a stereo audio file (2 channels), samples alternate between the left and right channels.\n * @param arrayBuffer\n * @param dataByChannel\n */\nconst writeWavAudioData = ({ arrayBuffer, dataByChannel }: WriteAudioDataParams) => {\n  const dataView = new DataView(arrayBuffer);\n  const channelCount = dataByChannel.length;\n\n  dataByChannel.forEach((channelData, channelIndex) => {\n    let writeOffset = WAV_HEADER_LENGTH_BYTES + channelCount * channelIndex;\n\n    channelData.forEach((float32Value) => {\n      dataView.setInt16(\n        writeOffset,\n        float32Value < 0\n          ? Math.max(-1, float32Value) * 32768\n          : Math.min(1, float32Value) * 32767,\n        true,\n      );\n      writeOffset += channelCount * BYTES_PER_SAMPLE;\n    });\n  });\n};\n\nexport const encodeToWaw = async (file: File, sampleRate: number) => {\n  const audioBuffer = await renderAudio(await toAudioBuffer(file), sampleRate);\n  const numberOfSamples = audioBuffer.duration * sampleRate;\n  const fileSizeBytes =\n    numberOfSamples * audioBuffer.numberOfChannels * BYTES_PER_SAMPLE +\n    WAV_HEADER_LENGTH_BYTES;\n\n  const arrayBuffer = new ArrayBuffer(fileSizeBytes);\n  writeWavHeader({ arrayBuffer, channelCount: audioBuffer.numberOfChannels, sampleRate });\n  writeWavAudioData({ arrayBuffer, dataByChannel: splitDataByChannel(audioBuffer) });\n  return new Blob([arrayBuffer], { type: 'audio/wav' });\n};\n", "import { encodeToWaw } from './wav';\nimport { createFileFromBlobs, getExtensionFromMimeType } from '../../ReactFileUtilities';\n\nexport type TranscoderConfig = {\n  // defaults to 16000Hz\n  sampleRate: number;\n  // Custom encoder function that converts the recorded audio file into a blob with the desired MIME type\n  encoder?: (file: File, sampleRate: number) => Promise<Blob>;\n};\n\nexport type TranscodeParams = TranscoderConfig & {\n  blob: Blob;\n};\n\nexport const transcode = ({\n  blob,\n  encoder = encodeToWaw,\n  sampleRate,\n}: TranscodeParams): Promise<Blob> =>\n  encoder(\n    createFileFromBlobs({\n      blobsArray: [blob],\n      fileName: `audio_recording_${new Date().toISOString()}.${getExtensionFromMimeType(\n        blob.type,\n      )}`,\n      mimeType: blob.type,\n    }),\n    sampleRate,\n  );\n", "export const CHANNEL_CONTAINER_ID = 'str-chat__channel';\n", "import React, { useEffect, useState } from 'react';\n\nimport type { Event } from 'stream-chat';\n\nimport { CustomNotification } from './CustomNotification';\nimport { useChatContext, useTranslationContext } from '../../context';\nimport type { DefaultStreamChatGenerics } from '../../types/types';\n\nconst UnMemoizedConnectionStatus = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>() => {\n  const { client } = useChatContext<StreamChatGenerics>('ConnectionStatus');\n  const { t } = useTranslationContext('ConnectionStatus');\n\n  const [online, setOnline] = useState(true);\n\n  useEffect(() => {\n    const connectionChanged = ({\n      online: onlineStatus = false,\n    }: Event<StreamChatGenerics>) => {\n      if (online !== onlineStatus) {\n        setOnline(onlineStatus);\n      }\n    };\n\n    client.on('connection.changed', connectionChanged);\n    return () => client.off('connection.changed', connectionChanged);\n  }, [client, online]);\n\n  return (\n    <CustomNotification\n      active={!online}\n      className='str-chat__connection-status-notification'\n      type='error'\n    >\n      {t<string>('Connection failure, reconnecting now...')}\n    </CustomNotification>\n  );\n};\n\nexport const ConnectionStatus = React.memo(UnMemoizedConnectionStatus);\n", "import React, { PropsWithChildren } from 'react';\nimport clsx from 'clsx';\n\nexport type CustomNotificationProps = {\n  type: string;\n  active?: boolean;\n  className?: string;\n};\n\nconst UnMemoizedCustomNotification = (\n  props: PropsWithChildren<CustomNotificationProps>,\n) => {\n  const { active, children, className, type } = props;\n\n  if (!active) return null;\n\n  return (\n    <div\n      aria-live='polite'\n      className={clsx(\n        `str-chat__custom-notification notification-${type}`,\n        `str-chat__notification`,\n        `str-chat-react__notification`,\n        className,\n      )}\n      data-testid='custom-notification'\n    >\n      {children}\n    </div>\n  );\n};\n\nexport const CustomNotification = React.memo(\n  UnMemoizedCustomNotification,\n) as typeof UnMemoizedCustomNotification;\n", "import React from 'react';\n\nimport { Message } from '../Message/Message';\n\nimport type { StreamMessage } from '../../context/ChannelStateContext';\nimport type { DefaultStreamChatGenerics } from '../../types/types';\n\nexport type GiphyPreviewMessageProps<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n  message: StreamMessage<StreamChatGenerics>;\n};\n\nexport const GiphyPreviewMessage = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  props: GiphyPreviewMessageProps<StreamChatGenerics>,\n) => {\n  const { message } = props;\n\n  return (\n    <div className='giphy-preview-message'>\n      <Message message={message} />\n    </div>\n  );\n};\n", "import React, { useCallback, useMemo } from 'react';\n\nimport {\n  useActionHandler,\n  useDeleteHandler,\n  useEditHandler,\n  useFlagHandler,\n  useMarkUnreadHandler,\n  useMentionsHandler,\n  useMuteHandler,\n  useOpenThreadHandler,\n  usePinHandler,\n  useReactionHandler,\n  useReactionsFetcher,\n  useRetryHandler,\n  useUserHandler,\n  useUserRole,\n} from './hooks';\nimport { areMessagePropsEqual, getMessageActions, MESSAGE_ACTIONS } from './utils';\n\nimport {\n  MessageContextValue,\n  MessageProvider,\n  useChannelActionContext,\n  useChannelStateContext,\n  useChatContext,\n  useComponentContext,\n} from '../../context';\n\nimport { MessageSimple as DefaultMessage } from './MessageSimple';\n\nimport type { MessageProps } from './types';\nimport type { DefaultStreamChatGenerics } from '../../types/types';\n\ntype MessagePropsToOmit =\n  | 'onMentionsClick'\n  | 'onMentionsHover'\n  | 'openThread'\n  | 'retrySendMessage';\n\ntype MessageContextPropsToPick =\n  | 'handleAction'\n  | 'handleDelete'\n  | 'handleFlag'\n  | 'handleMarkUnread'\n  | 'handleMute'\n  | 'handleOpenThread'\n  | 'handlePin'\n  | 'handleReaction'\n  | 'handleFetchReactions'\n  | 'handleRetry'\n  | 'mutes'\n  | 'onMentionsClickMessage'\n  | 'onMentionsHoverMessage'\n  | 'reactionDetailsSort'\n  | 'sortReactions'\n  | 'sortReactionDetails';\n\ntype MessageWithContextProps<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Omit<MessageProps<StreamChatGenerics>, MessagePropsToOmit> &\n  Pick<MessageContextValue<StreamChatGenerics>, MessageContextPropsToPick> & {\n    canPin: boolean;\n    userRoles: ReturnType<typeof useUserRole>;\n  };\n\nconst MessageWithContext = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  props: MessageWithContextProps<StreamChatGenerics>,\n) => {\n  const {\n    canPin,\n    groupedByUser,\n    Message: propMessage,\n    message,\n    messageActions = Object.keys(MESSAGE_ACTIONS),\n    onUserClick: propOnUserClick,\n    onUserHover: propOnUserHover,\n    userRoles,\n  } = props;\n\n  const { client, isMessageAIGenerated } = useChatContext('Message');\n  const { read } = useChannelStateContext('Message');\n  const { Message: contextMessage } = useComponentContext<StreamChatGenerics>('Message');\n\n  const actionsEnabled = message.type === 'regular' && message.status === 'received';\n  const MessageUIComponent = propMessage ?? contextMessage ?? DefaultMessage;\n\n  const { clearEdit, editing, setEdit } = useEditHandler();\n\n  const { onUserClick, onUserHover } = useUserHandler(message, {\n    onUserClickHandler: propOnUserClick,\n    onUserHoverHandler: propOnUserHover,\n  });\n\n  const {\n    canDelete,\n    canEdit,\n    canFlag,\n    canMarkUnread,\n    canMute,\n    canQuote,\n    canReact,\n    canReply,\n    isMyMessage,\n  } = userRoles;\n\n  const messageIsUnread = useMemo(\n    () =>\n      !!(\n        !isMyMessage &&\n        client.user?.id &&\n        read &&\n        (!read[client.user.id] ||\n          (message?.created_at &&\n            new Date(message.created_at).getTime() >\n              read[client.user.id].last_read.getTime()))\n      ),\n    [client, isMyMessage, message.created_at, read],\n  );\n\n  const messageActionsHandler = useCallback(\n    () =>\n      getMessageActions(messageActions, {\n        canDelete,\n        canEdit,\n        canFlag,\n        canMarkUnread,\n        canMute,\n        canPin,\n        canQuote,\n        canReact,\n        canReply,\n      }),\n    [\n      messageActions,\n      canDelete,\n      canEdit,\n      canFlag,\n      canMarkUnread,\n      canMute,\n      canPin,\n      canQuote,\n      canReact,\n      canReply,\n    ],\n  );\n\n  const {\n    canPin: canPinPropToNotPass, // eslint-disable-line @typescript-eslint/no-unused-vars\n    messageActions: messageActionsPropToNotPass, // eslint-disable-line @typescript-eslint/no-unused-vars\n    onlySenderCanEdit: onlySenderCanEditPropToNotPass, // eslint-disable-line @typescript-eslint/no-unused-vars\n    onUserClick: onUserClickPropToNotPass, // eslint-disable-line @typescript-eslint/no-unused-vars\n    onUserHover: onUserHoverPropToNotPass, // eslint-disable-line @typescript-eslint/no-unused-vars\n    userRoles: userRolesPropToNotPass, // eslint-disable-line @typescript-eslint/no-unused-vars\n    ...rest\n  } = props;\n\n  const messageContextValue: MessageContextValue<StreamChatGenerics> = {\n    ...rest,\n    actionsEnabled,\n    clearEditingState: clearEdit,\n    editing,\n    getMessageActions: messageActionsHandler,\n    handleEdit: setEdit,\n    isMessageAIGenerated,\n    isMyMessage: () => isMyMessage,\n    messageIsUnread,\n    onUserClick,\n    onUserHover,\n    setEditingState: setEdit,\n  };\n\n  return (\n    <MessageProvider value={messageContextValue}>\n      <MessageUIComponent groupedByUser={groupedByUser} />\n      {/* TODO - remove prop in next major release, maintains VML backwards compatibility */}\n    </MessageProvider>\n  );\n};\n\nconst MemoizedMessage = React.memo(\n  MessageWithContext,\n  areMessagePropsEqual,\n) as typeof MessageWithContext;\n\n/**\n * The Message component is a context provider which implements all the logic required for rendering\n * an individual message. The actual UI of the message is delegated via the Message prop on Channel.\n */\nexport const Message = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  props: MessageProps<StreamChatGenerics>,\n) => {\n  const {\n    closeReactionSelectorOnClick,\n    disableQuotedMessages,\n    getDeleteMessageErrorNotification,\n    getFetchReactionsErrorNotification,\n    getFlagMessageErrorNotification,\n    getFlagMessageSuccessNotification,\n    getMarkMessageUnreadErrorNotification,\n    getMarkMessageUnreadSuccessNotification,\n    getMuteUserErrorNotification,\n    getMuteUserSuccessNotification,\n    getPinMessageErrorNotification,\n    message,\n    onlySenderCanEdit = false,\n    onMentionsClick: propOnMentionsClick,\n    onMentionsHover: propOnMentionsHover,\n    openThread: propOpenThread,\n    pinPermissions,\n    reactionDetailsSort,\n    retrySendMessage: propRetrySendMessage,\n    sortReactionDetails,\n    sortReactions,\n  } = props;\n\n  const { addNotification } = useChannelActionContext<StreamChatGenerics>('Message');\n  const { highlightedMessageId, mutes } =\n    useChannelStateContext<StreamChatGenerics>('Message');\n\n  const handleAction = useActionHandler(message);\n  const handleOpenThread = useOpenThreadHandler(message, propOpenThread);\n  const handleReaction = useReactionHandler(message);\n  const handleRetry = useRetryHandler(propRetrySendMessage);\n  const userRoles = useUserRole(message, onlySenderCanEdit, disableQuotedMessages);\n\n  const handleFetchReactions = useReactionsFetcher(message, {\n    getErrorNotification: getFetchReactionsErrorNotification,\n    notify: addNotification,\n  });\n\n  const handleDelete = useDeleteHandler(message, {\n    getErrorNotification: getDeleteMessageErrorNotification,\n    notify: addNotification,\n  });\n\n  const handleFlag = useFlagHandler(message, {\n    getErrorNotification: getFlagMessageErrorNotification,\n    getSuccessNotification: getFlagMessageSuccessNotification,\n    notify: addNotification,\n  });\n\n  const handleMarkUnread = useMarkUnreadHandler(message, {\n    getErrorNotification: getMarkMessageUnreadErrorNotification,\n    getSuccessNotification: getMarkMessageUnreadSuccessNotification,\n    notify: addNotification,\n  });\n\n  const handleMute = useMuteHandler(message, {\n    getErrorNotification: getMuteUserErrorNotification,\n    getSuccessNotification: getMuteUserSuccessNotification,\n    notify: addNotification,\n  });\n\n  const { onMentionsClick, onMentionsHover } = useMentionsHandler(message, {\n    onMentionsClick: propOnMentionsClick,\n    onMentionsHover: propOnMentionsHover,\n  });\n\n  const { canPin, handlePin } = usePinHandler(message, pinPermissions, {\n    getErrorNotification: getPinMessageErrorNotification,\n    notify: addNotification,\n  });\n\n  const highlighted = highlightedMessageId === message.id;\n\n  return (\n    <MemoizedMessage\n      additionalMessageInputProps={props.additionalMessageInputProps}\n      autoscrollToBottom={props.autoscrollToBottom}\n      canPin={canPin}\n      closeReactionSelectorOnClick={closeReactionSelectorOnClick}\n      customMessageActions={props.customMessageActions}\n      disableQuotedMessages={props.disableQuotedMessages}\n      endOfGroup={props.endOfGroup}\n      firstOfGroup={props.firstOfGroup}\n      formatDate={props.formatDate}\n      groupedByUser={props.groupedByUser}\n      groupStyles={props.groupStyles}\n      handleAction={handleAction}\n      handleDelete={handleDelete}\n      handleFetchReactions={handleFetchReactions}\n      handleFlag={handleFlag}\n      handleMarkUnread={handleMarkUnread}\n      handleMute={handleMute}\n      handleOpenThread={handleOpenThread}\n      handlePin={handlePin}\n      handleReaction={handleReaction}\n      handleRetry={handleRetry}\n      highlighted={highlighted}\n      initialMessage={props.initialMessage}\n      lastReceivedId={props.lastReceivedId}\n      message={message}\n      Message={props.Message}\n      messageActions={props.messageActions}\n      messageListRect={props.messageListRect}\n      mutes={mutes}\n      onMentionsClickMessage={onMentionsClick}\n      onMentionsHoverMessage={onMentionsHover}\n      onUserClick={props.onUserClick}\n      onUserHover={props.onUserHover}\n      pinPermissions={props.pinPermissions}\n      reactionDetailsSort={reactionDetailsSort}\n      readBy={props.readBy}\n      renderText={props.renderText}\n      sortReactionDetails={sortReactionDetails}\n      sortReactions={sortReactions}\n      threadList={props.threadList}\n      unsafeHTML={props.unsafeHTML}\n      userRoles={userRoles}\n    />\n  );\n};\n", "import { useChannelActionContext } from '../../../context/ChannelActionContext';\nimport {\n  StreamMessage,\n  useChannelStateContext,\n} from '../../../context/ChannelStateContext';\n\nimport type React from 'react';\n\nimport type { DefaultStreamChatGenerics } from '../../../types/types';\n\nexport type FormData = Record<string, string>;\n\nexport type ActionHandlerReturnType = (\n  dataOrName?: string | FormData,\n  value?: string,\n  event?: React.BaseSyntheticEvent,\n) => Promise<void> | void;\n\nexport const handleActionWarning = `Action handler was called, but it is missing one of its required arguments. \nMake sure the ChannelAction and ChannelState contexts are properly set and the hook is initialized with a valid message.`;\n\nexport function useActionHandler<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(message?: StreamMessage<StreamChatGenerics>): ActionHandlerReturnType {\n  const { removeMessage, updateMessage } =\n    useChannelActionContext<StreamChatGenerics>('useActionHandler');\n  const { channel } = useChannelStateContext<StreamChatGenerics>('useActionHandler');\n\n  return async (dataOrName, value, event) => {\n    if (event) event.preventDefault();\n\n    if (!message || !updateMessage || !removeMessage || !channel) {\n      console.warn(handleActionWarning);\n      return;\n    }\n\n    const messageID = message.id;\n    let formData: FormData = {};\n\n    // deprecated: value&name should be removed in favor of data obj\n    if (typeof dataOrName === 'string') {\n      formData[dataOrName] = value as string;\n    } else {\n      formData = { ...dataOrName };\n    }\n\n    if (messageID) {\n      const data = await channel.sendAction(messageID, formData);\n\n      if (data?.message) {\n        updateMessage(data.message);\n      } else {\n        removeMessage(message);\n      }\n    }\n  };\n}\n", "import deepequal from 'react-fast-compare';\nimport emojiRegex from 'emoji-regex';\n\nimport type { TFunction } from 'i18next';\nimport type { MessageResponse, Mute, StreamChat, UserResponse } from 'stream-chat';\nimport type { PinPermissions } from './hooks';\nimport type { MessageProps } from './types';\nimport type {\n  ComponentContextValue,\n  CustomMessageActions,\n  MessageContextValue,\n  StreamMessage,\n} from '../../context';\nimport type { DefaultStreamChatGenerics } from '../../types/types';\n\n/**\n * Following function validates a function which returns notification message.\n * It validates if the first parameter is function and also if return value of function is string or no.\n */\nexport const validateAndGetMessage = <T extends unknown[]>(\n  func: (...args: T) => unknown,\n  args: T,\n) => {\n  if (!func || typeof func !== 'function') return null;\n\n  // below is due to tests passing a single argument\n  // rather than an array.\n  if (!Array.isArray(args)) {\n    args = [args] as unknown as T;\n  }\n\n  const returnValue = func(...args);\n\n  if (typeof returnValue !== 'string') return null;\n\n  return returnValue;\n};\n\n/**\n * Tell if the owner of the current message is muted\n */\nexport const isUserMuted = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  message: StreamMessage<StreamChatGenerics>,\n  mutes?: Mute<StreamChatGenerics>[],\n) => {\n  if (!mutes || !message) return false;\n\n  const userMuted = mutes.filter((el) => el.target.id === message.user?.id);\n  return !!userMuted.length;\n};\n\nexport const MESSAGE_ACTIONS = {\n  delete: 'delete',\n  edit: 'edit',\n  flag: 'flag',\n  markUnread: 'markUnread',\n  mute: 'mute',\n  pin: 'pin',\n  quote: 'quote',\n  react: 'react',\n  reply: 'reply',\n};\n\nexport type MessageActionsArray<T extends string = string> = Array<\n  keyof typeof MESSAGE_ACTIONS | T\n>;\n\n// @deprecated in favor of `channelCapabilities` - TODO: remove in next major release\nexport const defaultPinPermissions: PinPermissions = {\n  commerce: {\n    admin: true,\n    anonymous: false,\n    channel_member: false,\n    channel_moderator: true,\n    guest: false,\n    member: false,\n    moderator: true,\n    owner: true,\n    user: false,\n  },\n  gaming: {\n    admin: true,\n    anonymous: false,\n    channel_member: false,\n    channel_moderator: true,\n    guest: false,\n    member: false,\n    moderator: true,\n    owner: false,\n    user: false,\n  },\n  livestream: {\n    admin: true,\n    anonymous: false,\n    channel_member: false,\n    channel_moderator: true,\n    guest: false,\n    member: false,\n    moderator: true,\n    owner: true,\n    user: false,\n  },\n  messaging: {\n    admin: true,\n    anonymous: false,\n    channel_member: true,\n    channel_moderator: true,\n    guest: false,\n    member: true,\n    moderator: true,\n    owner: true,\n    user: false,\n  },\n  team: {\n    admin: true,\n    anonymous: false,\n    channel_member: true,\n    channel_moderator: true,\n    guest: false,\n    member: true,\n    moderator: true,\n    owner: true,\n    user: false,\n  },\n};\n\nexport type Capabilities = {\n  canDelete?: boolean;\n  canEdit?: boolean;\n  canFlag?: boolean;\n  canMarkUnread?: boolean;\n  canMute?: boolean;\n  canPin?: boolean;\n  canQuote?: boolean;\n  canReact?: boolean;\n  canReply?: boolean;\n};\n\nexport const getMessageActions = (\n  actions: MessageActionsArray | boolean,\n  {\n    canDelete,\n    canEdit,\n    canFlag,\n    canMarkUnread,\n    canMute,\n    canPin,\n    canQuote,\n    canReact,\n    canReply,\n  }: Capabilities,\n): MessageActionsArray => {\n  const messageActionsAfterPermission: MessageActionsArray = [];\n  let messageActions: MessageActionsArray = [];\n\n  if (actions && typeof actions === 'boolean') {\n    // If value of actions is true, then populate all the possible values\n    messageActions = Object.keys(MESSAGE_ACTIONS);\n  } else if (actions && actions.length > 0) {\n    messageActions = [...actions];\n  } else {\n    return [];\n  }\n\n  if (canDelete && messageActions.indexOf(MESSAGE_ACTIONS.delete) > -1) {\n    messageActionsAfterPermission.push(MESSAGE_ACTIONS.delete);\n  }\n\n  if (canEdit && messageActions.indexOf(MESSAGE_ACTIONS.edit) > -1) {\n    messageActionsAfterPermission.push(MESSAGE_ACTIONS.edit);\n  }\n\n  if (canFlag && messageActions.indexOf(MESSAGE_ACTIONS.flag) > -1) {\n    messageActionsAfterPermission.push(MESSAGE_ACTIONS.flag);\n  }\n\n  if (canMarkUnread && messageActions.indexOf(MESSAGE_ACTIONS.markUnread) > -1) {\n    messageActionsAfterPermission.push(MESSAGE_ACTIONS.markUnread);\n  }\n\n  if (canMute && messageActions.indexOf(MESSAGE_ACTIONS.mute) > -1) {\n    messageActionsAfterPermission.push(MESSAGE_ACTIONS.mute);\n  }\n\n  if (canPin && messageActions.indexOf(MESSAGE_ACTIONS.pin) > -1) {\n    messageActionsAfterPermission.push(MESSAGE_ACTIONS.pin);\n  }\n\n  if (canQuote && messageActions.indexOf(MESSAGE_ACTIONS.quote) > -1) {\n    messageActionsAfterPermission.push(MESSAGE_ACTIONS.quote);\n  }\n\n  if (canReact && messageActions.indexOf(MESSAGE_ACTIONS.react) > -1) {\n    messageActionsAfterPermission.push(MESSAGE_ACTIONS.react);\n  }\n\n  if (canReply && messageActions.indexOf(MESSAGE_ACTIONS.reply) > -1) {\n    messageActionsAfterPermission.push(MESSAGE_ACTIONS.reply);\n  }\n\n  return messageActionsAfterPermission;\n};\n\nexport const ACTIONS_NOT_WORKING_IN_THREAD = [\n  MESSAGE_ACTIONS.pin,\n  MESSAGE_ACTIONS.reply,\n  MESSAGE_ACTIONS.markUnread,\n];\n\n/**\n * @deprecated use `shouldRenderMessageActions` instead\n */\nexport const showMessageActionsBox = (\n  actions: MessageActionsArray,\n  inThread?: boolean | undefined,\n) => shouldRenderMessageActions({ inThread, messageActions: actions });\n\nexport const shouldRenderMessageActions = <\n  SCG extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n  customMessageActions,\n  CustomMessageActionsList,\n  inThread,\n  messageActions,\n}: {\n  messageActions: MessageActionsArray;\n  customMessageActions?: CustomMessageActions<SCG>;\n  CustomMessageActionsList?: ComponentContextValue<SCG>['CustomMessageActionsList'];\n  inThread?: boolean;\n}) => {\n  if (\n    typeof CustomMessageActionsList !== 'undefined' ||\n    typeof customMessageActions !== 'undefined'\n  )\n    return true;\n\n  if (!messageActions.length) return false;\n\n  if (\n    inThread &&\n    messageActions.filter((action) => !ACTIONS_NOT_WORKING_IN_THREAD.includes(action))\n      .length === 0\n  ) {\n    return false;\n  }\n\n  if (\n    messageActions.length === 1 &&\n    (messageActions.includes(MESSAGE_ACTIONS.react) ||\n      messageActions.includes(MESSAGE_ACTIONS.reply))\n  ) {\n    return false;\n  }\n\n  if (\n    messageActions.length === 2 &&\n    messageActions.includes(MESSAGE_ACTIONS.react) &&\n    messageActions.includes(MESSAGE_ACTIONS.reply)\n  ) {\n    return false;\n  }\n\n  return true;\n};\n\nfunction areMessagesEqual<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  prevMessage: StreamMessage<StreamChatGenerics>,\n  nextMessage: StreamMessage<StreamChatGenerics>,\n): boolean {\n  return (\n    prevMessage.deleted_at === nextMessage.deleted_at &&\n    prevMessage.latest_reactions?.length === nextMessage.latest_reactions?.length &&\n    prevMessage.own_reactions?.length === nextMessage.own_reactions?.length &&\n    prevMessage.pinned === nextMessage.pinned &&\n    prevMessage.reply_count === nextMessage.reply_count &&\n    prevMessage.status === nextMessage.status &&\n    prevMessage.text === nextMessage.text &&\n    prevMessage.type === nextMessage.type &&\n    prevMessage.updated_at === nextMessage.updated_at &&\n    prevMessage.user?.updated_at === nextMessage.user?.updated_at &&\n    Boolean(prevMessage.quoted_message) === Boolean(nextMessage.quoted_message) &&\n    (!prevMessage.quoted_message ||\n      areMessagesEqual(\n        prevMessage.quoted_message as StreamMessage<StreamChatGenerics>,\n        nextMessage.quoted_message as StreamMessage<StreamChatGenerics>,\n      ))\n  );\n}\n\nexport const areMessagePropsEqual = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  prevProps: MessageProps<StreamChatGenerics> & {\n    mutes?: Mute<StreamChatGenerics>[];\n    showDetailedReactions?: boolean;\n  },\n  nextProps: MessageProps<StreamChatGenerics> & {\n    mutes?: Mute<StreamChatGenerics>[];\n    showDetailedReactions?: boolean;\n  },\n) => {\n  const { message: prevMessage, Message: prevMessageUI } = prevProps;\n  const { message: nextMessage, Message: nextMessageUI } = nextProps;\n\n  if (prevMessageUI !== nextMessageUI) return false;\n  if (prevProps.endOfGroup !== nextProps.endOfGroup) return false;\n\n  if (nextProps.showDetailedReactions !== prevProps.showDetailedReactions) {\n    return false;\n  }\n\n  if (nextProps.closeReactionSelectorOnClick !== prevProps.closeReactionSelectorOnClick) {\n    return false;\n  }\n\n  const messagesAreEqual = areMessagesEqual(prevMessage, nextMessage);\n  if (!messagesAreEqual) return false;\n\n  const deepEqualProps =\n    deepequal(nextProps.messageActions, prevProps.messageActions) &&\n    deepequal(nextProps.readBy, prevProps.readBy) &&\n    deepequal(nextProps.highlighted, prevProps.highlighted) &&\n    deepequal(nextProps.groupStyles, prevProps.groupStyles) && // last 3 messages can have different group styles\n    deepequal(nextProps.mutes, prevProps.mutes) &&\n    deepequal(nextProps.lastReceivedId, prevProps.lastReceivedId);\n\n  if (!deepEqualProps) return false;\n\n  return (\n    prevProps.messageListRect === nextProps.messageListRect // MessageList wrapper layout changes\n  );\n};\n\nexport const areMessageUIPropsEqual = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  prevProps: MessageContextValue<StreamChatGenerics> & {\n    showDetailedReactions?: boolean;\n  },\n  nextProps: MessageContextValue<StreamChatGenerics> & {\n    showDetailedReactions?: boolean;\n  },\n) => {\n  const { lastReceivedId: prevLastReceivedId, message: prevMessage } = prevProps;\n  const { lastReceivedId: nextLastReceivedId, message: nextMessage } = nextProps;\n\n  if (prevProps.editing !== nextProps.editing) return false;\n  if (prevProps.highlighted !== nextProps.highlighted) return false;\n  if (prevProps.endOfGroup !== nextProps.endOfGroup) return false;\n  if (prevProps.mutes?.length !== nextProps.mutes?.length) return false;\n  if (prevProps.readBy?.length !== nextProps.readBy?.length) return false;\n  if (prevProps.groupStyles !== nextProps.groupStyles) return false;\n\n  if (prevProps.showDetailedReactions !== nextProps.showDetailedReactions) {\n    return false;\n  }\n\n  if (\n    (prevMessage.id === prevLastReceivedId || prevMessage.id === nextLastReceivedId) &&\n    prevLastReceivedId !== nextLastReceivedId\n  ) {\n    return false;\n  }\n\n  return areMessagesEqual(prevMessage, nextMessage);\n};\n\nexport const messageHasReactions = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  message?: StreamMessage<StreamChatGenerics>,\n) => Object.values(message?.reaction_groups ?? {}).some(({ count }) => count > 0);\n\nexport const messageHasAttachments = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  message?: StreamMessage<StreamChatGenerics>,\n) => !!message?.attachments && !!message.attachments.length;\n\nexport const getImages = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  message?: MessageResponse<StreamChatGenerics>,\n) => {\n  if (!message?.attachments) {\n    return [];\n  }\n  return message.attachments.filter((item) => item.type === 'image');\n};\n\nexport const getNonImageAttachments = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  message?: MessageResponse<StreamChatGenerics>,\n) => {\n  if (!message?.attachments) {\n    return [];\n  }\n  return message.attachments.filter((item) => item.type !== 'image');\n};\n\nexport interface TooltipUsernameMapper {\n  <StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics>(\n    user: UserResponse<StreamChatGenerics>,\n  ): string;\n}\n\n/**\n * Default Tooltip Username mapper implementation.\n *\n * @param user the user.\n */\nexport const mapToUserNameOrId: TooltipUsernameMapper = (user) => user.name || user.id;\n\nexport const getReadByTooltipText = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  users: UserResponse<StreamChatGenerics>[],\n  t: TFunction,\n  client: StreamChat<StreamChatGenerics>,\n  tooltipUserNameMapper: TooltipUsernameMapper,\n) => {\n  let outStr = '';\n\n  if (!t) {\n    throw new Error(\n      'getReadByTooltipText was called, but translation function is not available',\n    );\n  }\n\n  if (!tooltipUserNameMapper) {\n    throw new Error(\n      'getReadByTooltipText was called, but tooltipUserNameMapper function is not available',\n    );\n  }\n  // first filter out client user, so restLength won't count it\n  const otherUsers = users\n    .filter((item) => item && client?.user && item.id !== client.user.id)\n    .map(tooltipUserNameMapper);\n\n  const slicedArr = otherUsers.slice(0, 5);\n  const restLength = otherUsers.length - slicedArr.length;\n\n  if (slicedArr.length === 1) {\n    outStr = `${slicedArr[0]} `;\n  } else if (slicedArr.length === 2) {\n    // joins all with \"and\" but =no commas\n    // example: \"bob and sam\"\n    outStr = t('{{ firstUser }} and {{ secondUser }}', {\n      firstUser: slicedArr[0],\n      secondUser: slicedArr[1],\n    });\n  } else if (slicedArr.length > 2) {\n    // joins all with commas, but last one gets \", and\" (oxford comma!)\n    // example: \"bob, joe, sam and 4 more\"\n    if (restLength === 0) {\n      // mutate slicedArr to remove last user to display it separately\n      const lastUser = slicedArr.splice(slicedArr.length - 1, 1);\n      outStr = t('{{ commaSeparatedUsers }}, and {{ lastUser }}', {\n        commaSeparatedUsers: slicedArr.join(', '),\n        lastUser,\n      });\n    } else {\n      outStr = t('{{ commaSeparatedUsers }} and {{ moreCount }} more', {\n        commaSeparatedUsers: slicedArr.join(', '),\n        moreCount: restLength,\n      });\n    }\n  }\n\n  return outStr;\n};\n\nexport const isOnlyEmojis = (text?: string) => {\n  if (!text) return false;\n\n  const noEmojis = text.replace(emojiRegex(), '');\n  const noSpace = noEmojis.replace(/[\\s\\n]/gm, '');\n\n  return !noSpace;\n};\n\nexport const isMessageBounced = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  message: Pick<\n    StreamMessage<StreamChatGenerics>,\n    'type' | 'moderation' | 'moderation_details'\n  >,\n) =>\n  message.type === 'error' &&\n  (message.moderation_details?.action === 'MESSAGE_RESPONSE_ACTION_BOUNCE' ||\n    message.moderation?.action === 'bounce');\n\nexport const isMessageBlocked = (\n  message: Pick<StreamMessage, 'type' | 'moderation' | 'moderation_details'>,\n) =>\n  message.type === 'error' &&\n  (message.moderation_details?.action === 'MESSAGE_RESPONSE_ACTION_REMOVE' ||\n    message.moderation?.action === 'remove');\n\nexport const isMessageEdited = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  message: Pick<StreamMessage<StreamChatGenerics>, 'message_text_updated_at'>,\n) => !!message.message_text_updated_at;\n", "import { validateAndGetMessage } from '../utils';\n\nimport { useChannelActionContext } from '../../../context/ChannelActionContext';\nimport { useChatContext } from '../../../context/ChatContext';\nimport { useTranslationContext } from '../../../context/TranslationContext';\n\nimport type { ReactEventHandler } from '../types';\n\nimport type { StreamMessage } from '../../../context/ChannelStateContext';\n\nimport type { DefaultStreamChatGenerics } from '../../../types/types';\n\nexport type DeleteMessageNotifications<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n  getErrorNotification?: (message: StreamMessage<StreamChatGenerics>) => string;\n  notify?: (notificationText: string, type: 'success' | 'error') => void;\n};\n\nexport const useDeleteHandler = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  message?: StreamMessage<StreamChatGenerics>,\n  notifications: DeleteMessageNotifications<StreamChatGenerics> = {},\n): ReactEventHandler => {\n  const { getErrorNotification, notify } = notifications;\n\n  const { deleteMessage, updateMessage } =\n    useChannelActionContext<StreamChatGenerics>('useDeleteHandler');\n  const { client } = useChatContext<StreamChatGenerics>('useDeleteHandler');\n  const { t } = useTranslationContext('useDeleteHandler');\n\n  return async (event) => {\n    event.preventDefault();\n    if (!message?.id || !client || !updateMessage) {\n      return;\n    }\n\n    try {\n      const deletedMessage = await deleteMessage(message);\n      updateMessage(deletedMessage);\n    } catch (e) {\n      const errorMessage =\n        getErrorNotification && validateAndGetMessage(getErrorNotification, [message]);\n\n      if (notify) notify(errorMessage || t('Error deleting message'), 'error');\n    }\n  };\n};\n", "import { useState } from 'react';\n\nimport type { ReactEventHandler } from '../types';\n\nexport type EditHandlerReturnType = {\n  clearEdit: (event?: React.BaseSyntheticEvent) => void;\n  editing: boolean;\n  setEdit: ReactEventHandler;\n};\n\nexport const useEditHandler = (\n  customInitialState = false,\n  customSetEditing?: (event?: React.BaseSyntheticEvent) => void,\n  customClearEditingHandler?: (event?: React.BaseSyntheticEvent) => void,\n): EditHandlerReturnType => {\n  const [editing, setEditing] = useState(customInitialState);\n\n  const setEdit =\n    customSetEditing ||\n    ((event) => {\n      if (event?.preventDefault) {\n        event.preventDefault();\n      }\n      setEditing(true);\n    });\n\n  const clearEdit =\n    customClearEditingHandler ||\n    ((event) => {\n      if (event?.preventDefault) {\n        event.preventDefault();\n      }\n      setEditing(false);\n    });\n\n  return { clearEdit, editing, setEdit };\n};\n", "import { validateAndGetMessage } from '../utils';\n\nimport { useChatContext } from '../../../context/ChatContext';\nimport { useTranslationContext } from '../../../context/TranslationContext';\n\nimport type { ReactEventHandler } from '../types';\n\nimport type { StreamMessage } from '../../../context/ChannelStateContext';\n\nimport type { DefaultStreamChatGenerics } from '../../../types/types';\n\nexport const missingUseFlagHandlerParameterWarning =\n  'useFlagHandler was called but it is missing one or more necessary parameters.';\n\nexport type FlagMessageNotifications<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n  getErrorNotification?: (message: StreamMessage<StreamChatGenerics>) => string;\n  getSuccessNotification?: (message: StreamMessage<StreamChatGenerics>) => string;\n  notify?: (notificationText: string, type: 'success' | 'error') => void;\n};\n\nexport const useFlagHandler = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  message?: StreamMessage<StreamChatGenerics>,\n  notifications: FlagMessageNotifications<StreamChatGenerics> = {},\n): ReactEventHandler => {\n  const { client } = useChatContext<StreamChatGenerics>('useFlagHandler');\n  const { t } = useTranslationContext('useFlagHandler');\n\n  return async (event) => {\n    event.preventDefault();\n\n    const { getErrorNotification, getSuccessNotification, notify } = notifications;\n\n    if (!client || !t || !notify || !message?.id) {\n      console.warn(missingUseFlagHandlerParameterWarning);\n      return;\n    }\n\n    if (client.user?.banned) {\n      return notify(t('Error adding flag'), 'error');\n    }\n\n    try {\n      await client.flagMessage(message.id);\n\n      const successMessage =\n        getSuccessNotification &&\n        validateAndGetMessage(getSuccessNotification, [message]);\n\n      notify(successMessage || t('Message has been successfully flagged'), 'success');\n    } catch (e) {\n      const errorMessage =\n        getErrorNotification && validateAndGetMessage(getErrorNotification, [message]);\n\n      notify(errorMessage || t('Error adding flag'), 'error');\n    }\n  };\n};\n", "import { useChannelActionContext } from '../../../context/ChannelActionContext';\n\nimport type React from 'react';\nimport type { UserResponse } from 'stream-chat';\n\nimport type { ReactEventHandler } from '../types';\n\nimport type { StreamMessage } from '../../../context/ChannelStateContext';\n\nimport type { DefaultStreamChatGenerics } from '../../../types/types';\n\nexport type CustomMentionHandler<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = (\n  event: React.BaseSyntheticEvent,\n  mentioned_users: UserResponse<StreamChatGenerics>[],\n) => void;\n\nexport type MentionedUserEventHandler<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = (\n  event: React.BaseSyntheticEvent,\n  mentionedUsers: UserResponse<StreamChatGenerics>[],\n) => void;\n\nfunction createEventHandler<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  fn?: CustomMentionHandler<StreamChatGenerics>,\n  message?: StreamMessage<StreamChatGenerics>,\n): ReactEventHandler {\n  return (event) => {\n    if (typeof fn !== 'function' || !message?.mentioned_users?.length) {\n      return;\n    }\n    fn(event, message.mentioned_users);\n  };\n}\n\nexport const useMentionsHandler = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  message?: StreamMessage<StreamChatGenerics>,\n  customMentionHandler?: {\n    onMentionsClick?: CustomMentionHandler<StreamChatGenerics>;\n    onMentionsHover?: CustomMentionHandler<StreamChatGenerics>;\n  },\n) => {\n  const {\n    onMentionsClick: contextOnMentionsClick,\n    onMentionsHover: contextOnMentionsHover,\n  } = useChannelActionContext<StreamChatGenerics>('useMentionsHandler');\n\n  const onMentionsClick =\n    customMentionHandler?.onMentionsClick || contextOnMentionsClick || (() => null);\n\n  const onMentionsHover =\n    customMentionHandler?.onMentionsHover || contextOnMentionsHover || (() => null);\n\n  return {\n    onMentionsClick: createEventHandler(onMentionsClick, message),\n    onMentionsHover: createEventHandler(onMentionsHover, message),\n  };\n};\n", "import { validateAndGetMessage } from '../utils';\nimport { useChannelStateContext, useTranslationContext } from '../../../context';\n\nimport type { StreamMessage } from '../../../context';\nimport type { ReactEventHandler } from '../types';\nimport type { DefaultStreamChatGenerics } from '../../../types/types';\n\nexport type MarkUnreadHandlerNotifications<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n  getErrorNotification?: (message: StreamMessage<StreamChatGenerics>) => string;\n  getSuccessNotification?: (message: StreamMessage<StreamChatGenerics>) => string;\n  notify?: (notificationText: string, type: 'success' | 'error') => void;\n};\n\nexport const useMarkUnreadHandler = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  message?: StreamMessage<StreamChatGenerics>,\n  notifications: MarkUnreadHandlerNotifications<StreamChatGenerics> = {},\n): ReactEventHandler => {\n  const { getErrorNotification, getSuccessNotification, notify } = notifications;\n\n  const { channel } = useChannelStateContext<StreamChatGenerics>('useMarkUnreadHandler');\n  const { t } = useTranslationContext('useMarkUnreadHandler');\n\n  return async (event) => {\n    event.preventDefault();\n    if (!message?.id) {\n      console.warn('Mark unread handler does not have access to message id');\n      return;\n    }\n\n    try {\n      await channel.markUnread({ message_id: message.id });\n      if (!notify) return;\n      const successMessage =\n        getSuccessNotification &&\n        validateAndGetMessage(getSuccessNotification, [message]);\n      if (successMessage) notify(successMessage, 'success');\n    } catch (e) {\n      if (!notify) return;\n      const errorMessage =\n        getErrorNotification && validateAndGetMessage(getErrorNotification, [message]);\n      if (getErrorNotification && !errorMessage) return;\n      notify(\n        errorMessage ||\n          t(\n            'Error marking message unread. Cannot mark unread messages older than the newest 100 channel messages.',\n          ),\n        'error',\n      );\n    }\n  };\n};\n", "import { isUserMuted, validateAndGetMessage } from '../utils';\n\nimport {\n  StreamMessage,\n  useChannelStateContext,\n} from '../../../context/ChannelStateContext';\nimport { useChatContext } from '../../../context/ChatContext';\nimport { useTranslationContext } from '../../../context/TranslationContext';\n\nimport type { UserResponse } from 'stream-chat';\n\nimport type { ReactEventHandler } from '../types';\n\nimport type { DefaultStreamChatGenerics } from '../../../types/types';\n\nexport const missingUseMuteHandlerParamsWarning =\n  'useMuteHandler was called but it is missing one or more necessary parameter.';\n\nexport type MuteUserNotifications<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n  getErrorNotification?: (user: UserResponse<StreamChatGenerics>) => string;\n  getSuccessNotification?: (user: UserResponse<StreamChatGenerics>) => string;\n  notify?: (notificationText: string, type: 'success' | 'error') => void;\n};\n\nexport const useMuteHandler = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  message?: StreamMessage<StreamChatGenerics>,\n  notifications: MuteUserNotifications<StreamChatGenerics> = {},\n): ReactEventHandler => {\n  const { mutes } = useChannelStateContext<StreamChatGenerics>('useMuteHandler');\n  const { client } = useChatContext<StreamChatGenerics>('useMuteHandler');\n  const { t } = useTranslationContext('useMuteHandler');\n\n  return async (event) => {\n    event.preventDefault();\n\n    const { getErrorNotification, getSuccessNotification, notify } = notifications;\n\n    if (!t || !message?.user || !notify || !client) {\n      console.warn(missingUseMuteHandlerParamsWarning);\n      return;\n    }\n\n    if (!isUserMuted(message, mutes)) {\n      try {\n        await client.muteUser(message.user.id);\n\n        const successMessage =\n          getSuccessNotification &&\n          validateAndGetMessage(getSuccessNotification, [message.user]);\n\n        notify(\n          successMessage ||\n            t(`{{ user }} has been muted`, {\n              user: message.user.name || message.user.id,\n            }),\n          'success',\n        );\n      } catch (e) {\n        const errorMessage =\n          getErrorNotification &&\n          validateAndGetMessage(getErrorNotification, [message.user]);\n\n        notify(errorMessage || t('Error muting a user ...'), 'error');\n      }\n    } else {\n      try {\n        await client.unmuteUser(message.user.id);\n\n        const fallbackMessage = t(`{{ user }} has been unmuted`, {\n          user: message.user.name || message.user.id,\n        });\n\n        const successMessage =\n          (getSuccessNotification &&\n            validateAndGetMessage(getSuccessNotification, [message.user])) ||\n          fallbackMessage;\n\n        if (typeof successMessage === 'string') {\n          notify(successMessage, 'success');\n        }\n      } catch (e) {\n        const errorMessage =\n          (getErrorNotification &&\n            validateAndGetMessage(getErrorNotification, [message.user])) ||\n          t('Error unmuting a user ...');\n\n        if (typeof errorMessage === 'string') {\n          notify(errorMessage, 'error');\n        }\n      }\n    }\n  };\n};\n", "import { useChannelActionContext } from '../../../context/ChannelActionContext';\n\nimport type { ReactEventHandler } from '../types';\n\nimport type { StreamMessage } from '../../../context/ChannelStateContext';\n\nimport type { DefaultStreamChatGenerics } from '../../../types/types';\n\nexport const useOpenThreadHandler = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  message?: StreamMessage<StreamChatGenerics>,\n  customOpenThread?: (\n    message: StreamMessage<StreamChatGenerics>,\n    event: React.BaseSyntheticEvent,\n  ) => void,\n): ReactEventHandler => {\n  const { openThread: channelOpenThread } =\n    useChannelActionContext<StreamChatGenerics>('useOpenThreadHandler');\n\n  const openThread = customOpenThread || channelOpenThread;\n\n  return (event) => {\n    if (!openThread || !message) {\n      console.warn(\n        'Open thread handler was called but it is missing one of its parameters',\n      );\n      return;\n    }\n\n    openThread(message, event);\n  };\n};\n", "import { defaultPinPermissions, validateAndGetMessage } from '../utils';\n\nimport { useChannelActionContext } from '../../../context/ChannelActionContext';\nimport {\n  StreamMessage,\n  useChannelStateContext,\n} from '../../../context/ChannelStateContext';\nimport { useChatContext } from '../../../context/ChatContext';\nimport { useTranslationContext } from '../../../context/TranslationContext';\n\nimport type { ReactEventHandler } from '../types';\n\nimport type { DefaultStreamChatGenerics } from '../../../types/types';\n\n// @deprecated in favor of `channelCapabilities` - TODO: remove in next major release\nexport type PinEnabledUserRoles<T extends string = string> = Partial<\n  Record<T, boolean>\n> & {\n  admin?: boolean;\n  anonymous?: boolean;\n  channel_member?: boolean;\n  channel_moderator?: boolean;\n  guest?: boolean;\n  member?: boolean;\n  moderator?: boolean;\n  owner?: boolean;\n  user?: boolean;\n};\n\n// @deprecated in favor of `channelCapabilities` - TODO: remove in next major release\nexport type PinPermissions<\n  T extends string = string,\n  U extends string = string,\n> = Partial<Record<T, PinEnabledUserRoles<U>>> & {\n  commerce?: PinEnabledUserRoles<U>;\n  gaming?: PinEnabledUserRoles<U>;\n  livestream?: PinEnabledUserRoles<U>;\n  messaging?: PinEnabledUserRoles<U>;\n  team?: PinEnabledUserRoles<U>;\n};\n\nexport type PinMessageNotifications<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n  getErrorNotification?: (message: StreamMessage<StreamChatGenerics>) => string;\n  notify?: (notificationText: string, type: 'success' | 'error') => void;\n};\n\nexport const usePinHandler = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  message: StreamMessage<StreamChatGenerics>,\n  // @deprecated in favor of `channelCapabilities` - TODO: remove in next major release\n  _permissions: PinPermissions = defaultPinPermissions, // eslint-disable-line\n  notifications: PinMessageNotifications<StreamChatGenerics> = {},\n) => {\n  const { getErrorNotification, notify } = notifications;\n\n  const { updateMessage } = useChannelActionContext<StreamChatGenerics>('usePinHandler');\n  const { channelCapabilities = {} } =\n    useChannelStateContext<StreamChatGenerics>('usePinHandler');\n  const { client } = useChatContext<StreamChatGenerics>('usePinHandler');\n  const { t } = useTranslationContext('usePinHandler');\n\n  const canPin = !!channelCapabilities['pin-message'];\n\n  const handlePin: ReactEventHandler = async (event) => {\n    event.preventDefault();\n\n    if (!message) return;\n\n    if (!message.pinned) {\n      try {\n        const optimisticMessage = {\n          ...message,\n          pinned: true,\n          pinned_at: new Date(),\n          pinned_by: client.user,\n        };\n\n        updateMessage(optimisticMessage);\n\n        await client.pinMessage(message);\n      } catch (e) {\n        const errorMessage =\n          getErrorNotification && validateAndGetMessage(getErrorNotification, [message]);\n\n        if (notify) notify(errorMessage || t('Error pinning message'), 'error');\n        updateMessage(message);\n      }\n    } else {\n      try {\n        const optimisticMessage = {\n          ...message,\n          pin_expires: null,\n          pinned: false,\n          pinned_at: null,\n          pinned_by: null,\n        };\n\n        updateMessage(optimisticMessage);\n\n        await client.unpinMessage(message);\n      } catch (e) {\n        const errorMessage =\n          getErrorNotification && validateAndGetMessage(getErrorNotification, [message]);\n\n        if (notify) notify(errorMessage || t('Error removing message pin'), 'error');\n        updateMessage(message);\n      }\n    }\n  };\n\n  return { canPin, handlePin };\n};\n", "import React, { useCallback } from 'react';\nimport throttle from 'lodash.throttle';\n\nimport { useChannelActionContext } from '../../../context/ChannelActionContext';\nimport {\n  StreamMessage,\n  useChannelStateContext,\n} from '../../../context/ChannelStateContext';\nimport { useChatContext } from '../../../context/ChatContext';\n\nimport type { Reaction, ReactionResponse } from 'stream-chat';\n\nimport type { DefaultStreamChatGenerics } from '../../../types/types';\n\nimport { useThreadContext } from '../../Threads';\n\nexport const reactionHandlerWarning = `Reaction handler was called, but it is missing one of its required arguments.\nMake sure the ChannelAction and ChannelState contexts are properly set and the hook is initialized with a valid message.`;\n\nexport const useReactionHandler = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  message?: StreamMessage<StreamChatGenerics>,\n) => {\n  const thread = useThreadContext();\n  const { updateMessage } =\n    useChannelActionContext<StreamChatGenerics>('useReactionHandler');\n  const { channel, channelCapabilities } =\n    useChannelStateContext<StreamChatGenerics>('useReactionHandler');\n  const { client } = useChatContext<StreamChatGenerics>('useReactionHandler');\n\n  const createMessagePreview = useCallback(\n    (\n      add: boolean,\n      reaction: ReactionResponse<StreamChatGenerics>,\n      message: StreamMessage<StreamChatGenerics>,\n    ): StreamMessage<StreamChatGenerics> => {\n      const newReactionGroups = message?.reaction_groups || {};\n      const reactionType = reaction.type;\n      const hasReaction = !!newReactionGroups[reactionType];\n\n      if (add) {\n        const timestamp = new Date().toISOString();\n        newReactionGroups[reactionType] = hasReaction\n          ? {\n              ...newReactionGroups[reactionType],\n              count: newReactionGroups[reactionType].count + 1,\n            }\n          : {\n              count: 1,\n              first_reaction_at: timestamp,\n              last_reaction_at: timestamp,\n              sum_scores: 1,\n            };\n      } else {\n        if (hasReaction && newReactionGroups[reactionType].count > 1) {\n          newReactionGroups[reactionType] = {\n            ...newReactionGroups[reactionType],\n            count: newReactionGroups[reactionType].count - 1,\n          };\n        } else {\n          delete newReactionGroups[reactionType];\n        }\n      }\n\n      const newReactions: Reaction<StreamChatGenerics>[] | undefined = add\n        ? [reaction, ...(message?.latest_reactions || [])]\n        : message.latest_reactions?.filter(\n            (item) => !(item.type === reaction.type && item.user_id === reaction.user_id),\n          );\n\n      const newOwnReactions = add\n        ? [reaction, ...(message?.own_reactions || [])]\n        : message?.own_reactions?.filter((item) => item.type !== reaction.type);\n\n      return {\n        ...message,\n        latest_reactions: newReactions || message.latest_reactions,\n        own_reactions: newOwnReactions,\n        reaction_groups: newReactionGroups,\n      } as StreamMessage<StreamChatGenerics>;\n    },\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    [client.user, client.userID],\n  );\n\n  const createReactionPreview = (type: string) => ({\n    message_id: message?.id,\n    score: 1,\n    type,\n    user: client.user,\n    user_id: client.user?.id,\n  });\n\n  const toggleReaction = throttle(async (id: string, type: string, add: boolean) => {\n    if (!message || !channelCapabilities['send-reaction']) return;\n\n    const newReaction = createReactionPreview(\n      type,\n    ) as ReactionResponse<StreamChatGenerics>;\n    const tempMessage = createMessagePreview(add, newReaction, message);\n\n    try {\n      updateMessage(tempMessage);\n      // @ts-expect-error message type mismatch\n      thread?.upsertReplyLocally({ message: tempMessage });\n\n      const messageResponse = add\n        ? await channel.sendReaction(id, { type } as Reaction<StreamChatGenerics>)\n        : await channel.deleteReaction(id, type);\n\n      // seems useless as we're expecting WS event to come in and replace this anyway\n      updateMessage(messageResponse.message);\n    } catch (error) {\n      // revert to the original message if the API call fails\n      updateMessage(message);\n      // @ts-expect-error message type mismatch\n      thread?.upsertReplyLocally({ message });\n    }\n  }, 1000);\n\n  return async (reactionType: string, event?: React.BaseSyntheticEvent) => {\n    if (event?.preventDefault) {\n      event.preventDefault();\n    }\n\n    if (!message) {\n      return console.warn(reactionHandlerWarning);\n    }\n\n    let userExistingReaction = null as unknown as ReactionResponse<StreamChatGenerics>;\n\n    if (message.own_reactions) {\n      message.own_reactions.forEach((reaction) => {\n        // own user should only ever contain the current user id\n        // just in case we check to prevent bugs with message updates from breaking reactions\n        if (\n          reaction.user &&\n          client.userID === reaction.user.id &&\n          reaction.type === reactionType\n        ) {\n          userExistingReaction = reaction;\n        } else if (reaction.user && client.userID !== reaction.user.id) {\n          console.warn(\n            `message.own_reactions contained reactions from a different user, this indicates a bug`,\n          );\n        }\n      });\n    }\n\n    try {\n      if (userExistingReaction) {\n        await toggleReaction(message.id, userExistingReaction.type, false);\n      } else {\n        await toggleReaction(message.id, reactionType, true);\n      }\n    } catch (error) {\n      console.log({ error });\n    }\n  };\n};\n", "import React, { createContext, useContext } from 'react';\n\nimport { Channel } from '../../components';\n\nimport type { PropsWithChildren } from 'react';\nimport { Thread } from 'stream-chat';\n\nexport type ThreadContextValue = Thread | undefined;\n\nexport const ThreadContext = createContext<ThreadContextValue>(undefined);\n\nexport const useThreadContext = () => {\n  const thread = useContext(ThreadContext);\n\n  return thread ?? undefined;\n};\n\nexport const ThreadProvider = ({\n  children,\n  thread,\n}: PropsWithChildren<{ thread?: Thread }>) => (\n  <ThreadContext.Provider value={thread}>\n    <Channel channel={thread?.channel}>{children}</Channel>\n  </ThreadContext.Provider>\n);\n", "import React, { useEffect } from 'react';\nimport { ComputeItemKey, Virtuoso, VirtuosoProps } from 'react-virtuoso';\n\nimport type { Thread, ThreadManagerState } from 'stream-chat';\n\nimport { ThreadListItem as DefaultThreadListItem } from './ThreadListItem';\nimport { ThreadListEmptyPlaceholder as DefaultThreadListEmptyPlaceholder } from './ThreadListEmptyPlaceholder';\nimport { ThreadListUnseenThreadsBanner as DefaultThreadListUnseenThreadsBanner } from './ThreadListUnseenThreadsBanner';\nimport { ThreadListLoadingIndicator as DefaultThreadListLoadingIndicator } from './ThreadListLoadingIndicator';\nimport { useChatContext, useComponentContext } from '../../../context';\nimport { useStateStore } from '../../../store';\n\nconst selector = (nextValue: ThreadManagerState) => ({ threads: nextValue.threads });\n\nconst computeItemKey: ComputeItemKey<Thread, unknown> = (_, item) => item.id;\n\ntype ThreadListProps = {\n  virtuosoProps?: VirtuosoProps<Thread, unknown>;\n};\n\nexport const useThreadList = () => {\n  const { client } = useChatContext();\n\n  useEffect(() => {\n    const handleVisibilityChange = () => {\n      if (document.visibilityState === 'visible') {\n        client.threads.activate();\n      }\n      if (document.visibilityState === 'hidden') {\n        client.threads.deactivate();\n      }\n    };\n\n    handleVisibilityChange();\n\n    document.addEventListener('visibilitychange', handleVisibilityChange);\n    return () => {\n      client.threads.deactivate();\n      document.removeEventListener('visibilitychange', handleVisibilityChange);\n    };\n  }, [client]);\n};\n\nexport const ThreadList = ({ virtuosoProps }: ThreadListProps) => {\n  const { client } = useChatContext();\n  const {\n    ThreadListEmptyPlaceholder = DefaultThreadListEmptyPlaceholder,\n    ThreadListItem = DefaultThreadListItem,\n    ThreadListLoadingIndicator = DefaultThreadListLoadingIndicator,\n    ThreadListUnseenThreadsBanner = DefaultThreadListUnseenThreadsBanner,\n  } = useComponentContext();\n  const { threads } = useStateStore(client.threads.state, selector);\n\n  useThreadList();\n\n  return (\n    <div className='str-chat__thread-list-container'>\n      {/* TODO: allow re-load on stale ThreadManager state */}\n      <ThreadListUnseenThreadsBanner />\n      <Virtuoso\n        atBottomStateChange={(atBottom) => atBottom && client.threads.loadNextPage()}\n        className='str-chat__thread-list'\n        components={{\n          EmptyPlaceholder: ThreadListEmptyPlaceholder,\n          Footer: ThreadListLoadingIndicator,\n        }}\n        computeItemKey={computeItemKey}\n        data={threads}\n        itemContent={(_, thread) => <ThreadListItem thread={thread} />}\n        // TODO: handle visibility (for a button that scrolls to the unread thread)\n        // itemsRendered={(items) => console.log({ items })}\n        {...virtuosoProps}\n      />\n    </div>\n  );\n};\n", "import React, { createContext, useContext } from 'react';\n\nimport type { Thread } from 'stream-chat';\n\nimport { useComponentContext } from '../../../context';\nimport { ThreadListItemUI as DefaultThreadListItemUI } from './ThreadListItemUI';\n\nimport type { ThreadListItemUIProps } from './ThreadListItemUI';\n\nexport type ThreadListItemProps = {\n  thread: Thread;\n  threadListItemUIProps?: ThreadListItemUIProps;\n};\n\nconst ThreadListItemContext = createContext<Thread | undefined>(undefined);\n\nexport const useThreadListItemContext = () => useContext(ThreadListItemContext);\n\nexport const ThreadListItem = ({\n  thread,\n  threadListItemUIProps,\n}: ThreadListItemProps) => {\n  const { ThreadListItemUI = DefaultThreadListItemUI } = useComponentContext();\n\n  return (\n    <ThreadListItemContext.Provider value={thread}>\n      <ThreadListItemUI {...threadListItemUIProps} />\n    </ThreadListItemContext.Provider>\n  );\n};\n\n// const App = () => {\n//   const route = useRouter();\n\n//   return (\n//     <Chat>\n//       {route === '/channels' && (\n//         <Channel>\n//           <MessageList />\n//           <Thread />\n//         </Channel>\n//       )}\n//       {route === '/threads' && (\n//         <Threads>\n//           <ThreadList />\n//           <ThreadProvider>\n//             <Thread />\n//           </ThreadProvider>\n//         </Threads>\n//       )}\n//     </Chat>\n//   );\n// };\n\n// pre-built layout\n\n{\n  /* \n<Chat client={chatClient}>\n  <Views>\n    // has default\n    <ViewSelector onItemPointerDown={} />\n    <View.Chat>\n      <Channel>\n        <MessageList />\n        <MessageInput />\n      </Channel>\n    </View.Chat>\n    <View.Thread> <-- activeThread state\n      <ThreadList /> <-- uses context for click handler\n      <WrappedThread /> <-- ThreadProvider + Channel combo\n    </View.Thread>\n  </Views>\n</Chat>;\n*/\n}\n", "import React, { useCallback } from 'react';\nimport clsx from 'clsx';\n\nimport type { FormatMessageResponse, ThreadState } from 'stream-chat';\nimport type { ComponentPropsWithoutRef } from 'react';\n\nimport { Timestamp } from '../../Message/Timestamp';\nimport { Avatar } from '../../Avatar';\nimport { Icon } from '../icons';\nimport { UnreadCountBadge } from '../UnreadCountBadge';\n\nimport { useChannelPreviewInfo } from '../../ChannelPreview';\nimport { useChatContext } from '../../../context';\nimport { useThreadsViewContext } from '../../ChatView';\nimport { useThreadListItemContext } from './ThreadListItem';\nimport { useStateStore } from '../../../store';\n\nexport type ThreadListItemUIProps = ComponentPropsWithoutRef<'button'>;\n\n/**\n * TODO:\n * - maybe hover state? ask design\n */\n\nexport const attachmentTypeIconMap = {\n  audio: '\uD83D\uDD08',\n  file: '\uD83D\uDCC4',\n  image: '\uD83D\uDCF7',\n  video: '\uD83C\uDFA5',\n  voiceRecording: '\uD83C\uDF99\uFE0F',\n} as const;\n\n// TODO: translations\nconst getTitleFromMessage = ({\n  currentUserId,\n  message,\n}: {\n  currentUserId?: string;\n  message?: FormatMessageResponse;\n}) => {\n  const attachment = message?.attachments?.at(0);\n\n  let attachmentIcon = '';\n\n  if (attachment) {\n    attachmentIcon +=\n      attachmentTypeIconMap[\n        (attachment.type as keyof typeof attachmentTypeIconMap) ?? 'file'\n      ] ?? attachmentTypeIconMap.file;\n  }\n\n  const messageBelongsToCurrentUser = message?.user?.id === currentUserId;\n\n  if (message?.deleted_at && message.parent_id)\n    return clsx(messageBelongsToCurrentUser && 'You:', 'This reply was deleted.');\n\n  if (message?.deleted_at && !message.parent_id)\n    return clsx(messageBelongsToCurrentUser && 'You:', 'The source message was deleted.');\n\n  if (attachment?.type === 'voiceRecording')\n    return clsx(attachmentIcon, messageBelongsToCurrentUser && 'You:', 'Voice message');\n\n  return clsx(\n    attachmentIcon,\n    messageBelongsToCurrentUser && 'You:',\n    message?.text || attachment?.fallback || 'N/A',\n  );\n};\n\nexport const ThreadListItemUI = (props: ThreadListItemUIProps) => {\n  const { client } = useChatContext();\n  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n  const thread = useThreadListItemContext()!;\n\n  const selector = useCallback(\n    (nextValue: ThreadState) => ({\n      channel: nextValue.channel,\n      deletedAt: nextValue.deletedAt,\n      latestReply: nextValue.replies.at(-1),\n      ownUnreadMessageCount:\n        (client.userID && nextValue.read[client.userID]?.unreadMessageCount) || 0,\n      parentMessage: nextValue.parentMessage,\n    }),\n    [client],\n  );\n\n  const { channel, deletedAt, latestReply, ownUnreadMessageCount, parentMessage } =\n    useStateStore(thread.state, selector);\n\n  const { displayTitle: channelDisplayTitle } = useChannelPreviewInfo({ channel });\n\n  const { activeThread, setActiveThread } = useThreadsViewContext();\n\n  const avatarProps = deletedAt ? null : latestReply?.user;\n\n  return (\n    <button\n      aria-selected={activeThread === thread}\n      className='str-chat__thread-list-item'\n      data-thread-id={thread.id}\n      onClick={() => setActiveThread(thread)}\n      role='option'\n      {...props}\n    >\n      <div className='str-chat__thread-list-item__channel'>\n        <Icon.MessageBubble />\n        <div className='str-chat__thread-list-item__channel-text'>\n          {channelDisplayTitle}\n        </div>\n      </div>\n      <div className='str-chat__thread-list-item__parent-message'>\n        <div className='str-chat__thread-list-item__parent-message-text'>\n          {/* TODO: use thread.title instead? */}\n          replied to: {getTitleFromMessage({ message: parentMessage })}\n        </div>\n        {!deletedAt && <UnreadCountBadge count={ownUnreadMessageCount} />}\n      </div>\n      <div className='str-chat__thread-list-item__latest-reply'>\n        <Avatar {...avatarProps} />\n        <div className='str-chat__thread-list-item__latest-reply-details'>\n          {!deletedAt && (\n            <div className='str-chat__thread-list-item__latest-reply-created-by'>\n              {latestReply?.user?.name || latestReply?.user?.id || 'Unknown sender'}\n            </div>\n          )}\n          <div className='str-chat__thread-list-item__latest-reply-text-and-timestamp'>\n            <div className='str-chat__thread-list-item__latest-reply-text'>\n              {deletedAt\n                ? 'This thread was deleted'\n                : getTitleFromMessage({\n                    currentUserId: client.user?.id,\n                    message: latestReply,\n                  })}\n            </div>\n            <div className='str-chat__thread-list-item__latest-reply-timestamp'>\n              <Timestamp timestamp={deletedAt ?? latestReply?.created_at} />\n            </div>\n          </div>\n        </div>\n      </div>\n    </button>\n  );\n};\n", "import React, { useMemo } from 'react';\n\nimport { useMessageContext } from '../../context/MessageContext';\nimport { useTranslationContext } from '../../context/TranslationContext';\nimport { getDateString, isDate } from '../../i18n/utils';\nimport type { TimestampFormatterOptions } from '../../i18n/types';\n\nexport interface TimestampProps extends TimestampFormatterOptions {\n  /* Adds a CSS class name to the component's outer `time` container. */\n  customClass?: string;\n  /* Timestamp to display */\n  timestamp?: Date | string;\n}\n\nexport function Timestamp(props: TimestampProps) {\n  const { calendar, calendarFormats, customClass, format, timestamp } = props;\n\n  const { formatDate } = useMessageContext('MessageTimestamp');\n  const { t, tDateTimeParser } = useTranslationContext('MessageTimestamp');\n\n  const normalizedTimestamp =\n    timestamp && isDate(timestamp) ? timestamp.toISOString() : timestamp;\n\n  const when = useMemo(\n    () =>\n      getDateString({\n        calendar,\n        calendarFormats,\n        format,\n        formatDate,\n        messageCreatedAt: normalizedTimestamp,\n        t,\n        tDateTimeParser,\n        timestampTranslationKey: 'timestamp/MessageTimestamp',\n      }),\n    [\n      calendar,\n      calendarFormats,\n      format,\n      formatDate,\n      normalizedTimestamp,\n      t,\n      tDateTimeParser,\n    ],\n  );\n\n  if (!when) {\n    return null;\n  }\n\n  return (\n    <time\n      className={customClass}\n      dateTime={normalizedTimestamp}\n      title={normalizedTimestamp}\n    >\n      {when}\n    </time>\n  );\n}\n", "import clsx from 'clsx';\nimport React from 'react';\nimport type { PropsWithChildren } from 'react';\n\nexport const UnreadCountBadge = ({\n  children,\n  count,\n  position,\n}: PropsWithChildren<{\n  count: number;\n  position?: 'top-right' | 'bottom-right' | 'bottom-left' | 'top-left';\n}>) => (\n  <div className='str-chat__unread-count-badge-container'>\n    {children}\n    {count > 0 && (\n      <div\n        className={clsx(\n          'str-chat__unread-count-badge',\n          position && `str-chat__unread-count-badge--${position}`,\n        )}\n      >\n        {count}\n      </div>\n    )}\n  </div>\n);\n", "import throttle from 'lodash.throttle';\nimport React, { ReactNode, useEffect, useMemo, useState } from 'react';\n\nimport { ChannelPreviewMessenger } from './ChannelPreviewMessenger';\nimport { useIsChannelMuted } from './hooks/useIsChannelMuted';\nimport { useChannelPreviewInfo } from './hooks/useChannelPreviewInfo';\nimport { getLatestMessagePreview as defaultGetLatestMessagePreview } from './utils';\n\nimport { ChatContextValue, useChatContext } from '../../context/ChatContext';\nimport { useTranslationContext } from '../../context/TranslationContext';\nimport {\n  MessageDeliveryStatus,\n  useMessageDeliveryStatus,\n} from './hooks/useMessageDeliveryStatus';\n\nimport type { Channel, Event } from 'stream-chat';\n\nimport type { ChannelAvatarProps } from '../Avatar/ChannelAvatar';\nimport type { GroupChannelDisplayInfo } from './utils';\nimport type { StreamMessage } from '../../context/ChannelStateContext';\nimport type { TranslationContextValue } from '../../context/TranslationContext';\nimport type { DefaultStreamChatGenerics } from '../../types/types';\n\nexport type ChannelPreviewUIComponentProps<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = ChannelPreviewProps<StreamChatGenerics> & {\n  /** Image of Channel to display */\n  displayImage?: string;\n  /** Title of Channel to display */\n  displayTitle?: string;\n  /** Title of Channel to display */\n  groupChannelDisplayInfo?: GroupChannelDisplayInfo;\n  /** The last message received in a channel */\n  lastMessage?: StreamMessage<StreamChatGenerics>;\n  /** @deprecated Use latestMessagePreview prop instead. */\n  latestMessage?: ReactNode;\n  /** Latest message preview to display, will be a string or JSX element supporting markdown. */\n  latestMessagePreview?: ReactNode;\n  /** Status describing whether own message has been delivered or read by another. If the last message is not an own message, then the status is undefined. */\n  messageDeliveryStatus?: MessageDeliveryStatus;\n  /** Number of unread Messages */\n  unread?: number;\n};\n\nexport type ChannelPreviewProps<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n  /** Comes from either the `channelRenderFilterFn` or `usePaginatedChannels` call from [ChannelList](https://github.com/GetStream/stream-chat-react/blob/master/src/components/ChannelList/ChannelList.tsx) */\n  channel: Channel<StreamChatGenerics>;\n  /** If the component's channel is the active (selected) Channel */\n  active?: boolean;\n  /** Current selected channel object */\n  activeChannel?: Channel<StreamChatGenerics>;\n  /** UI component to display an avatar, defaults to [Avatar](https://github.com/GetStream/stream-chat-react/blob/master/src/components/Avatar/Avatar.tsx) component and accepts the same props as: [ChannelAvatar](https://github.com/GetStream/stream-chat-react/blob/master/src/components/Avatar/ChannelAvatar.tsx) */\n  Avatar?: React.ComponentType<ChannelAvatarProps<StreamChatGenerics>>;\n  /** Forces the update of preview component on channel update */\n  channelUpdateCount?: number;\n  /** Custom class for the channel preview root */\n  className?: string;\n  /** Custom function that generates the message preview in ChannelPreview component */\n  getLatestMessagePreview?: (\n    channel: Channel<StreamChatGenerics>,\n    t: TranslationContextValue['t'],\n    userLanguage: TranslationContextValue['userLanguage'],\n  ) => ReactNode;\n  key?: string;\n  /** Custom ChannelPreview click handler function */\n  onSelect?: (event: React.MouseEvent) => void;\n  /** Custom UI component to display the channel preview in the list, defaults to and accepts same props as: [ChannelPreviewMessenger](https://github.com/GetStream/stream-chat-react/blob/master/src/components/ChannelPreview/ChannelPreviewMessenger.tsx) */\n  Preview?: React.ComponentType<ChannelPreviewUIComponentProps<StreamChatGenerics>>;\n  /** Setter for selected Channel */\n  setActiveChannel?: ChatContextValue<StreamChatGenerics>['setActiveChannel'];\n  /** Object containing watcher parameters */\n  watchers?: { limit?: number; offset?: number };\n};\n\nexport const ChannelPreview = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  props: ChannelPreviewProps<StreamChatGenerics>,\n) => {\n  const {\n    active,\n    channel,\n    channelUpdateCount,\n    getLatestMessagePreview = defaultGetLatestMessagePreview,\n    Preview = ChannelPreviewMessenger,\n  } = props;\n  const {\n    channel: activeChannel,\n    client,\n    isMessageAIGenerated,\n    setActiveChannel,\n  } = useChatContext<StreamChatGenerics>('ChannelPreview');\n  const { t, userLanguage } = useTranslationContext('ChannelPreview');\n  const { displayImage, displayTitle, groupChannelDisplayInfo } = useChannelPreviewInfo({\n    channel,\n  });\n\n  const [lastMessage, setLastMessage] = useState<StreamMessage<StreamChatGenerics>>(\n    channel.state.messages[channel.state.messages.length - 1],\n  );\n  const [unread, setUnread] = useState(0);\n  const { messageDeliveryStatus } = useMessageDeliveryStatus<StreamChatGenerics>({\n    channel,\n    lastMessage,\n  });\n\n  const isActive =\n    typeof active === 'undefined' ? activeChannel?.cid === channel.cid : active;\n  const { muted } = useIsChannelMuted(channel);\n\n  useEffect(() => {\n    const handleEvent = (event: Event) => {\n      if (!event.cid) return setUnread(0);\n      if (channel.cid === event.cid) setUnread(0);\n    };\n\n    client.on('notification.mark_read', handleEvent);\n    return () => client.off('notification.mark_read', handleEvent);\n  }, [channel, client]);\n\n  useEffect(() => {\n    const handleEvent = (event: Event) => {\n      if (channel.cid !== event.cid) return;\n      if (event.user?.id !== client.user?.id) return;\n      setUnread(channel.countUnread());\n    };\n    channel.on('notification.mark_unread', handleEvent);\n    return () => {\n      channel.off('notification.mark_unread', handleEvent);\n    };\n  }, [channel, client]);\n\n  const refreshUnreadCount = useMemo(\n    () =>\n      throttle(() => {\n        if (muted) {\n          setUnread(0);\n        } else {\n          setUnread(channel.countUnread());\n        }\n      }, 400),\n    [channel, muted],\n  );\n\n  useEffect(() => {\n    refreshUnreadCount();\n\n    const handleEvent = () => {\n      setLastMessage(\n        channel.state.latestMessages[channel.state.latestMessages.length - 1],\n      );\n      refreshUnreadCount();\n    };\n\n    channel.on('message.new', handleEvent);\n    channel.on('message.updated', handleEvent);\n    channel.on('message.deleted', handleEvent);\n    channel.on('message.undeleted', handleEvent);\n    channel.on('channel.truncated', handleEvent);\n\n    return () => {\n      channel.off('message.new', handleEvent);\n      channel.off('message.updated', handleEvent);\n      channel.off('message.deleted', handleEvent);\n      channel.off('message.undeleted', handleEvent);\n      channel.off('channel.truncated', handleEvent);\n    };\n  }, [channel, refreshUnreadCount, channelUpdateCount]);\n\n  if (!Preview) return null;\n\n  const latestMessagePreview = getLatestMessagePreview(\n    channel,\n    t,\n    userLanguage,\n    isMessageAIGenerated,\n  );\n\n  return (\n    <Preview\n      {...props}\n      active={isActive}\n      displayImage={displayImage}\n      displayTitle={displayTitle}\n      groupChannelDisplayInfo={groupChannelDisplayInfo}\n      lastMessage={lastMessage}\n      latestMessage={latestMessagePreview}\n      latestMessagePreview={latestMessagePreview}\n      messageDeliveryStatus={messageDeliveryStatus}\n      setActiveChannel={setActiveChannel}\n      unread={unread}\n    />\n  );\n};\n", "import React, { useRef } from 'react';\nimport clsx from 'clsx';\n\nimport { ChannelPreviewActionButtons as DefaultChannelPreviewActionButtons } from './ChannelPreviewActionButtons';\nimport { Avatar as DefaultAvatar } from '../Avatar';\nimport { useComponentContext } from '../../context';\n\nimport type { ChannelPreviewUIComponentProps } from './ChannelPreview';\nimport type { DefaultStreamChatGenerics } from '../../types/types';\n\nconst UnMemoizedChannelPreviewMessenger = <\n  SCG extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  props: ChannelPreviewUIComponentProps<SCG>,\n) => {\n  const {\n    active,\n    Avatar = DefaultAvatar,\n    channel,\n    className: customClassName = '',\n    displayImage,\n    displayTitle,\n    groupChannelDisplayInfo,\n    latestMessagePreview,\n    onSelect: customOnSelectChannel,\n    setActiveChannel,\n    unread,\n    watchers,\n  } = props;\n\n  const { ChannelPreviewActionButtons = DefaultChannelPreviewActionButtons } =\n    useComponentContext<SCG>();\n\n  const channelPreviewButton = useRef<HTMLButtonElement | null>(null);\n\n  const avatarName =\n    displayTitle || channel.state.messages[channel.state.messages.length - 1]?.user?.id;\n\n  const onSelectChannel = (e: React.MouseEvent<HTMLButtonElement>) => {\n    if (customOnSelectChannel) {\n      customOnSelectChannel(e);\n    } else if (setActiveChannel) {\n      setActiveChannel(channel, watchers);\n    }\n    if (channelPreviewButton?.current) {\n      channelPreviewButton.current.blur();\n    }\n  };\n\n  return (\n    <div className='str-chat__channel-preview-container'>\n      <ChannelPreviewActionButtons channel={channel} />\n      <button\n        aria-label={`Select Channel: ${displayTitle || ''}`}\n        aria-selected={active}\n        className={clsx(\n          `str-chat__channel-preview-messenger str-chat__channel-preview`,\n          active && 'str-chat__channel-preview-messenger--active',\n          unread && unread >= 1 && 'str-chat__channel-preview-messenger--unread',\n          customClassName,\n        )}\n        data-testid='channel-preview-button'\n        onClick={onSelectChannel}\n        ref={channelPreviewButton}\n        role='option'\n      >\n        <div className='str-chat__channel-preview-messenger--left'>\n          <Avatar\n            className='str-chat__avatar--channel-preview'\n            groupChannelDisplayInfo={groupChannelDisplayInfo}\n            image={displayImage}\n            name={avatarName}\n          />\n        </div>\n        <div className='str-chat__channel-preview-end'>\n          <div className='str-chat__channel-preview-end-first-row'>\n            <div className='str-chat__channel-preview-messenger--name'>\n              <span>{displayTitle}</span>\n            </div>\n            {!!unread && (\n              <div\n                className='str-chat__channel-preview-unread-badge'\n                data-testid='unread-badge'\n              >\n                {unread}\n              </div>\n            )}\n          </div>\n          <div className='str-chat__channel-preview-messenger--last-message'>\n            {latestMessagePreview}\n          </div>\n        </div>\n      </button>\n    </div>\n  );\n};\n\n/**\n * Used as preview component for channel item in [ChannelList](#channellist) component.\n * Its best suited for messenger type chat.\n */\nexport const ChannelPreviewMessenger = React.memo(\n  UnMemoizedChannelPreviewMessenger,\n) as typeof UnMemoizedChannelPreviewMessenger;\n", "import React from 'react';\nimport clsx from 'clsx';\nimport type { Channel, ExtendableGenerics } from 'stream-chat';\n\nimport { useChannelMembershipState } from '../ChannelList';\nimport { Icon } from './icons';\nimport { useTranslationContext } from '../../context';\n\nexport type ChannelPreviewActionButtonsProps<SCG extends ExtendableGenerics> = {\n  channel: Channel<SCG>;\n};\n\nexport function ChannelPreviewActionButtons<SCG extends ExtendableGenerics>({\n  channel,\n}: ChannelPreviewActionButtonsProps<SCG>) {\n  const membership = useChannelMembershipState(channel);\n  const { t } = useTranslationContext();\n\n  return (\n    <div className='str-chat__channel-preview__action-buttons'>\n      <button\n        aria-label={membership.pinned_at ? t('Unpin') : t('Pin')}\n        className={clsx(\n          'str-chat__channel-preview__action-button',\n          'str-chat__channel-preview__action-button--pin',\n          membership.pinned_at && 'str-chat__channel-preview__action-button--active',\n        )}\n        onClick={(e) => {\n          e.stopPropagation();\n          if (membership.pinned_at) {\n            channel.unpin();\n          } else {\n            channel.pin();\n          }\n        }}\n        title={membership.pinned_at ? t('Unpin') : t('Pin')}\n      >\n        <Icon.Pin />\n      </button>\n      <button\n        aria-label={membership.archived_at ? t('Unarchive') : t('Archive')}\n        className={clsx(\n          'str-chat__channel-preview__action-button',\n          'str-chat__channel-preview__action-button--archive',\n          membership.archived_at && 'str-chat__channel-preview__action-button--active',\n        )}\n        onClick={(e) => {\n          e.stopPropagation();\n          if (membership.archived_at) {\n            channel.unarchive();\n          } else {\n            channel.archive();\n          }\n        }}\n        title={membership.archived_at ? t('Unarchive') : t('Archive')}\n      >\n        <Icon.ArchiveBox />\n      </button>\n    </div>\n  );\n}\n", "import React, { ReactNode, useCallback, useEffect, useRef, useState } from 'react';\nimport clsx from 'clsx';\n\nimport { ChannelListMessenger, ChannelListMessengerProps } from './ChannelListMessenger';\nimport { useConnectionRecoveredListener } from './hooks/useConnectionRecoveredListener';\nimport { useMobileNavigation } from './hooks/useMobileNavigation';\nimport {\n  CustomQueryChannelsFn,\n  usePaginatedChannels,\n} from './hooks/usePaginatedChannels';\nimport {\n  useChannelListShape,\n  usePrepareShapeHandlers,\n} from './hooks/useChannelListShape';\nimport { MAX_QUERY_CHANNELS_LIMIT, moveChannelUpwards } from './utils';\n\nimport { Avatar as DefaultAvatar } from '../Avatar';\nimport {\n  ChannelPreview,\n  ChannelPreviewUIComponentProps,\n} from '../ChannelPreview/ChannelPreview';\nimport {\n  ChannelSearchProps,\n  ChannelSearch as DefaultChannelSearch,\n} from '../ChannelSearch/ChannelSearch';\nimport {\n  EmptyStateIndicator as DefaultEmptyStateIndicator,\n  EmptyStateIndicatorProps,\n} from '../EmptyStateIndicator';\nimport { LoadingChannels } from '../Loading/LoadingChannels';\nimport { LoadMorePaginator, LoadMorePaginatorProps } from '../LoadMore/LoadMorePaginator';\nimport { NullComponent } from '../UtilityComponents';\n\nimport {\n  ChannelListContextProvider,\n  ChatContextValue,\n  useComponentContext,\n} from '../../context';\nimport { useChatContext } from '../../context/ChatContext';\nimport { useStateStore } from '../../store';\n\nimport type {\n  Channel,\n  ChannelFilters,\n  ChannelOptions,\n  ChannelSort,\n  Event,\n  SearchControllerState,\n} from 'stream-chat';\nimport type { ChannelAvatarProps } from '../Avatar';\nimport type { TranslationContextValue } from '../../context/TranslationContext';\nimport type { DefaultStreamChatGenerics, PaginatorProps } from '../../types/types';\n\nconst DEFAULT_FILTERS = {};\nconst DEFAULT_OPTIONS = {};\nconst DEFAULT_SORT = {};\n\nconst searchControllerStateSelector = (nextValue: SearchControllerState) => ({\n  searchIsActive: nextValue.isActive,\n});\n\nexport type ChannelListProps<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n  /** Additional props for underlying ChannelSearch component and channel search controller, [available props](https://getstream.io/chat/docs/sdk/react/utility-components/channel_search/#props) */\n  additionalChannelSearchProps?: Omit<\n    ChannelSearchProps<StreamChatGenerics>,\n    'setChannels'\n  >;\n  /**\n   * When the client receives `message.new`, `notification.message_new`, and `notification.added_to_channel` events, we automatically\n   * push that channel to the top of the list. If the channel doesn't currently exist in the list, we grab the channel from\n   * `client.activeChannels` and push it to the top of the list. You can disable this behavior by setting this prop\n   * to false, which will prevent channels not in the list from incrementing the list. The default is true.\n   */\n  allowNewMessagesFromUnfilteredChannels?: boolean;\n  /** UI component to display an avatar, defaults to [Avatar](https://github.com/GetStream/stream-chat-react/blob/master/src/components/Avatar/Avatar.tsx) component and accepts the same props as: [ChannelAvatar](https://github.com/GetStream/stream-chat-react/blob/master/src/components/Avatar/ChannelAvatar.tsx) */\n  Avatar?: React.ComponentType<ChannelAvatarProps>;\n  /** Optional function to filter channels prior to loading in the DOM. Do not use any complex or async logic that would delay the loading of the ChannelList. We recommend using a pure function with array methods like filter/sort/reduce. */\n  channelRenderFilterFn?: (\n    channels: Array<Channel<StreamChatGenerics>>,\n  ) => Array<Channel<StreamChatGenerics>>;\n  /** Custom UI component to display search results, defaults to and accepts same props as: [ChannelSearch](https://github.com/GetStream/stream-chat-react/blob/master/src/components/ChannelSearch/ChannelSearch.tsx) */\n  ChannelSearch?: React.ComponentType<ChannelSearchProps<StreamChatGenerics>>;\n  // FIXME: how is this even legal (WHY IS IT STRING?!)\n  /** Set a channel (with this ID) to active and manually move it to the top of the list */\n  customActiveChannel?: string;\n  /** Custom function that handles the channel pagination. Has to build query filters, sort and options and query and append channels to the current channels state and update the hasNext pagination flag after each query. */\n  customQueryChannels?: CustomQueryChannelsFn<StreamChatGenerics>;\n  /** Custom UI component for rendering an empty list, defaults to and accepts same props as: [EmptyStateIndicator](https://github.com/GetStream/stream-chat-react/blob/master/src/components/EmptyStateIndicator/EmptyStateIndicator.tsx) */\n  EmptyStateIndicator?: React.ComponentType<EmptyStateIndicatorProps>;\n  /** An object containing channel query filters */\n  filters?: ChannelFilters<StreamChatGenerics>;\n  /** Custom function that generates the message preview in ChannelPreview component */\n  getLatestMessagePreview?: (\n    channel: Channel<StreamChatGenerics>,\n    t: TranslationContextValue['t'],\n    userLanguage: TranslationContextValue['userLanguage'],\n    isMessageAIGenerated?: ChatContextValue['isMessageAIGenerated'],\n  ) => ReactNode;\n  /** Custom UI component to display the container for the queried channels, defaults to and accepts same props as: [ChannelListMessenger](https://github.com/GetStream/stream-chat-react/blob/master/src/components/ChannelList/ChannelListMessenger.tsx) */\n  List?: React.ComponentType<ChannelListMessengerProps<StreamChatGenerics>>;\n  /** Custom UI component to display the loading error indicator, defaults to component that renders null */\n  LoadingErrorIndicator?: React.ComponentType;\n  /** Custom UI component to display the loading state, defaults to and accepts same props as: [LoadingChannels](https://github.com/GetStream/stream-chat-react/blob/master/src/components/Loading/LoadingChannels.tsx) */\n  LoadingIndicator?: React.ComponentType;\n  /** When true, channels won't dynamically sort by most recent message */\n  lockChannelOrder?: boolean;\n  /** Function to override the default behavior when a user is added to a channel, corresponds to [notification.added\\_to\\_channel](https://getstream.io/chat/docs/javascript/event_object/?language=javascript) event */\n  onAddedToChannel?: (\n    setChannels: React.Dispatch<React.SetStateAction<Array<Channel<StreamChatGenerics>>>>,\n    event: Event<StreamChatGenerics>,\n  ) => void;\n  /** Function to override the default behavior when a channel is deleted, corresponds to [channel.deleted](https://getstream.io/chat/docs/javascript/event_object/?language=javascript) event */\n  onChannelDeleted?: (\n    setChannels: React.Dispatch<React.SetStateAction<Array<Channel<StreamChatGenerics>>>>,\n    event: Event<StreamChatGenerics>,\n  ) => void;\n  /** Function to override the default behavior when a channel is hidden, corresponds to [channel.hidden](https://getstream.io/chat/docs/javascript/event_object/?language=javascript) event */\n  onChannelHidden?: (\n    setChannels: React.Dispatch<React.SetStateAction<Array<Channel<StreamChatGenerics>>>>,\n    event: Event<StreamChatGenerics>,\n  ) => void;\n  /** Function to override the default behavior when a channel is truncated, corresponds to [channel.truncated](https://getstream.io/chat/docs/javascript/event_object/?language=javascript) event */\n  onChannelTruncated?: (\n    setChannels: React.Dispatch<React.SetStateAction<Array<Channel<StreamChatGenerics>>>>,\n    event: Event<StreamChatGenerics>,\n  ) => void;\n  /** Function to override the default behavior when a channel is updated, corresponds to [channel.updated](https://getstream.io/chat/docs/javascript/event_object/?language=javascript) event */\n  onChannelUpdated?: (\n    setChannels: React.Dispatch<React.SetStateAction<Array<Channel<StreamChatGenerics>>>>,\n    event: Event<StreamChatGenerics>,\n  ) => void;\n  /** Function to override the default channel visible behavior, corresponds to [channel.visible](https://getstream.io/chat/docs/javascript/event_object/?language=javascript) event */\n  onChannelVisible?: (\n    setChannels: React.Dispatch<React.SetStateAction<Array<Channel<StreamChatGenerics>>>>,\n    event: Event<StreamChatGenerics>,\n  ) => void;\n  /** Function to override the default behavior when a message is received on a channel not being watched, corresponds to [notification.message\\_new](https://getstream.io/chat/docs/javascript/event_object/?language=javascript) event */\n  onMessageNew?: (\n    setChannels: React.Dispatch<React.SetStateAction<Array<Channel<StreamChatGenerics>>>>,\n    event: Event<StreamChatGenerics>,\n  ) => void;\n  /** Function to override the default behavior when a message is received on a channel being watched, handles [message.new](https://getstream.io/chat/docs/javascript/event_object/?language=javascript) event */\n  onMessageNewHandler?: (\n    setChannels: React.Dispatch<React.SetStateAction<Array<Channel<StreamChatGenerics>>>>,\n    event: Event<StreamChatGenerics>,\n  ) => void;\n  /** Function to override the default behavior when a user gets removed from a channel, corresponds to [notification.removed\\_from\\_channel](https://getstream.io/chat/docs/javascript/event_object/?language=javascript) event */\n  onRemovedFromChannel?: (\n    setChannels: React.Dispatch<React.SetStateAction<Array<Channel<StreamChatGenerics>>>>,\n    event: Event<StreamChatGenerics>,\n  ) => void;\n  /** An object containing channel query options */\n  options?: ChannelOptions;\n  /** Custom UI component to handle channel pagination logic, defaults to and accepts same props as: [LoadMorePaginator](https://github.com/GetStream/stream-chat-react/blob/master/src/components/LoadMore/LoadMorePaginator.tsx) */\n  Paginator?: React.ComponentType<PaginatorProps | LoadMorePaginatorProps>;\n  /** Custom UI component to display the channel preview in the list, defaults to and accepts same props as: [ChannelPreviewMessenger](https://github.com/GetStream/stream-chat-react/blob/master/src/components/ChannelPreview/ChannelPreviewMessenger.tsx) */\n  Preview?: React.ComponentType<ChannelPreviewUIComponentProps<StreamChatGenerics>>;\n  /**\n   * Custom interval during which the recovery channel list queries will be prevented.\n   * This is to avoid firing unnecessary queries during internet connection fluctuation.\n   * Recovery channel query is triggered upon `connection.recovered` and leads to complete channel list reload with pagination offset 0.\n   * The minimum throttle interval is 2000ms. The default throttle interval is 5000ms.\n   */\n  recoveryThrottleIntervalMs?: number;\n  /** Function to override the default behavior when rendering channels, so this function is called instead of rendering the Preview directly */\n  renderChannels?: (\n    channels: Channel<StreamChatGenerics>[],\n    channelPreview: (item: Channel<StreamChatGenerics>) => React.ReactNode,\n  ) => React.ReactNode;\n  /** If true, sends the list's currently loaded channels to the `List` component as the `loadedChannels` prop */\n  sendChannelsToList?: boolean;\n  /** Last channel will be set as active channel if true, defaults to true */\n  setActiveChannelOnMount?: boolean;\n  /** Whether or not to load the list with a search component, defaults to false */\n  showChannelSearch?: boolean;\n  /** An object containing channel query sort parameters */\n  sort?: ChannelSort<StreamChatGenerics>;\n  /** An object containing query parameters for fetching channel watchers */\n  watchers?: { limit?: number; offset?: number };\n};\n\nconst UnMemoizedChannelList = <\n  SCG extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  props: ChannelListProps<SCG>,\n) => {\n  const {\n    additionalChannelSearchProps,\n    allowNewMessagesFromUnfilteredChannels = true,\n    Avatar = DefaultAvatar,\n    channelRenderFilterFn,\n    ChannelSearch = DefaultChannelSearch,\n    customActiveChannel,\n    customQueryChannels,\n    EmptyStateIndicator = DefaultEmptyStateIndicator,\n    filters = {},\n    getLatestMessagePreview,\n    List = ChannelListMessenger,\n    LoadingErrorIndicator = NullComponent,\n    LoadingIndicator = LoadingChannels,\n    lockChannelOrder = false,\n    onAddedToChannel,\n    onChannelDeleted,\n    onChannelHidden,\n    onChannelTruncated,\n    onChannelUpdated,\n    onChannelVisible,\n    onMessageNew,\n    onMessageNewHandler,\n    onRemovedFromChannel,\n    options,\n    Paginator = LoadMorePaginator,\n    Preview,\n    recoveryThrottleIntervalMs,\n    renderChannels,\n    sendChannelsToList = false,\n    setActiveChannelOnMount = true,\n    showChannelSearch = false,\n    sort = DEFAULT_SORT,\n    watchers = {},\n  } = props;\n\n  const {\n    channel,\n    channelsQueryState,\n    client,\n    closeMobileNav,\n    customClasses,\n    navOpen = false,\n    searchController,\n    setActiveChannel,\n    theme,\n    useImageFlagEmojisOnWindows,\n  } = useChatContext<SCG>('ChannelList');\n  const { Search } = useComponentContext<SCG>(); // FIXME: us component context to retrieve ChannelPreview UI components too\n  const channelListRef = useRef<HTMLDivElement | null>(null);\n  const [channelUpdateCount, setChannelUpdateCount] = useState(0);\n  const [searchActive, setSearchActive] = useState(false);\n\n  // Indicator relevant when Search component that relies on SearchController is used\n  const { searchIsActive } = useStateStore(\n    searchController.state,\n    searchControllerStateSelector,\n  );\n  /**\n   * Set a channel with id {customActiveChannel} as active and move it to the top of the list.\n   * If customActiveChannel prop is absent, then set the first channel in list as active channel.\n   */\n  const activeChannelHandler = async (\n    channels: Array<Channel<SCG>>,\n    setChannels: React.Dispatch<React.SetStateAction<Array<Channel<SCG>>>>,\n  ) => {\n    if (\n      !channels.length ||\n      channels.length > (options?.limit || MAX_QUERY_CHANNELS_LIMIT)\n    ) {\n      return;\n    }\n\n    if (customActiveChannel) {\n      // FIXME: this is wrong...\n      let customActiveChannelObject = channels.find(\n        (chan) => chan.id === customActiveChannel,\n      );\n\n      if (!customActiveChannelObject) {\n        //@ts-expect-error valid query\n        [customActiveChannelObject] = await client.queryChannels({\n          id: customActiveChannel,\n        });\n      }\n\n      if (customActiveChannelObject) {\n        setActiveChannel(customActiveChannelObject, watchers);\n\n        const newChannels = moveChannelUpwards({\n          channels,\n          channelToMove: customActiveChannelObject,\n          sort,\n        });\n\n        setChannels(newChannels);\n      }\n\n      return;\n    }\n\n    if (setActiveChannelOnMount) {\n      setActiveChannel(channels[0], watchers);\n    }\n  };\n\n  /**\n   * For some events, inner properties on the channel will update but the shallow comparison will not\n   * force a re-render. Incrementing this dummy variable ensures the channel previews update.\n   */\n  const forceUpdate = useCallback(() => setChannelUpdateCount((count) => count + 1), []);\n\n  const onSearch = useCallback(\n    (event: React.ChangeEvent<HTMLInputElement>) => {\n      setSearchActive(!!event.target.value);\n\n      additionalChannelSearchProps?.onSearch?.(event);\n    },\n    [additionalChannelSearchProps],\n  );\n\n  const onSearchExit = useCallback(() => {\n    setSearchActive(false);\n    additionalChannelSearchProps?.onSearchExit?.();\n  }, [additionalChannelSearchProps]);\n\n  const { channels, hasNextPage, loadNextPage, setChannels } = usePaginatedChannels(\n    client,\n    filters || DEFAULT_FILTERS,\n    sort || DEFAULT_SORT,\n    options || DEFAULT_OPTIONS,\n    activeChannelHandler,\n    recoveryThrottleIntervalMs,\n    customQueryChannels,\n  );\n\n  const loadedChannels = channelRenderFilterFn\n    ? channelRenderFilterFn(channels)\n    : channels;\n\n  useMobileNavigation(channelListRef, navOpen, closeMobileNav);\n\n  const { customHandler, defaultHandler } = usePrepareShapeHandlers<SCG>({\n    allowNewMessagesFromUnfilteredChannels,\n    filters,\n    lockChannelOrder,\n    onAddedToChannel,\n    onChannelDeleted,\n    onChannelHidden,\n    onChannelTruncated,\n    onChannelUpdated,\n    onChannelVisible,\n    onMessageNew,\n    onMessageNewHandler,\n    onRemovedFromChannel,\n    setChannels,\n    sort,\n    // TODO: implement\n    // customHandleChannelListShape\n  });\n\n  useChannelListShape<SCG>(customHandler ?? defaultHandler);\n\n  // TODO: maybe move this too\n  useConnectionRecoveredListener(forceUpdate);\n\n  useEffect(() => {\n    const handleEvent = (event: Event<SCG>) => {\n      if (event.cid === channel?.cid) {\n        setActiveChannel();\n      }\n    };\n\n    client.on('channel.deleted', handleEvent);\n    client.on('channel.hidden', handleEvent);\n\n    return () => {\n      client.off('channel.deleted', handleEvent);\n      client.off('channel.hidden', handleEvent);\n    };\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [channel?.cid]);\n\n  const renderChannel = (item: Channel<SCG>) => {\n    const previewProps = {\n      activeChannel: channel,\n      Avatar,\n      channel: item,\n      // forces the update of preview component on channel update\n      channelUpdateCount,\n      getLatestMessagePreview,\n      key: item.cid,\n      Preview,\n      setActiveChannel,\n      watchers,\n    };\n\n    return <ChannelPreview<SCG> {...previewProps} />;\n  };\n\n  const baseClass = 'str-chat__channel-list';\n  const className = clsx(\n    customClasses?.chat ?? 'str-chat',\n    theme,\n    customClasses?.channelList ?? `${baseClass} ${baseClass}-react`,\n    {\n      'str-chat--windows-flags':\n        useImageFlagEmojisOnWindows && navigator.userAgent.match(/Win/),\n      [`${baseClass}--open`]: navOpen,\n    },\n  );\n\n  const showChannelList =\n    (!searchActive && !searchIsActive) || additionalChannelSearchProps?.popupResults;\n  return (\n    <ChannelListContextProvider value={{ channels, setChannels }}>\n      <div className={className} ref={channelListRef}>\n        {showChannelSearch &&\n          (Search ? (\n            <Search\n              directMessagingChannelType={additionalChannelSearchProps?.channelType}\n              disabled={additionalChannelSearchProps?.disabled}\n              exitSearchOnInputBlur={\n                additionalChannelSearchProps?.clearSearchOnClickOutside\n              }\n              placeholder={additionalChannelSearchProps?.placeholder}\n            />\n          ) : (\n            <ChannelSearch\n              onSearch={onSearch}\n              onSearchExit={onSearchExit}\n              setChannels={setChannels}\n              {...additionalChannelSearchProps}\n            />\n          ))}\n        {showChannelList && (\n          <List\n            error={channelsQueryState.error}\n            loadedChannels={sendChannelsToList ? loadedChannels : undefined}\n            loading={\n              !!channelsQueryState.queryInProgress &&\n              ['reload', 'uninitialized'].includes(channelsQueryState.queryInProgress)\n            }\n            LoadingErrorIndicator={LoadingErrorIndicator}\n            LoadingIndicator={LoadingIndicator}\n            setChannels={setChannels}\n          >\n            {!loadedChannels?.length ? (\n              <EmptyStateIndicator listType='channel' />\n            ) : (\n              <Paginator\n                hasNextPage={hasNextPage}\n                isLoading={channelsQueryState.queryInProgress === 'load-more'}\n                loadNextPage={loadNextPage}\n              >\n                {renderChannels\n                  ? renderChannels(loadedChannels, renderChannel)\n                  : loadedChannels.map((channel) => renderChannel(channel))}\n              </Paginator>\n            )}\n          </List>\n        )}\n      </div>\n    </ChannelListContextProvider>\n  );\n};\n\n/**\n * Renders a preview list of Channels, allowing you to select the Channel you want to open\n */\nexport const ChannelList = React.memo(\n  UnMemoizedChannelList,\n) as typeof UnMemoizedChannelList;\n", "import React, { PropsWithChildren } from 'react';\n\nimport { LoadingChannels } from '../Loading/LoadingChannels';\nimport { NullComponent } from '../UtilityComponents';\nimport { useTranslationContext } from '../../context';\n\nimport type { APIErrorResponse, Channel, ErrorFromResponse } from 'stream-chat';\nimport type { DefaultStreamChatGenerics } from '../../types/types';\n\nexport type ChannelListMessengerProps<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n  /** Whether the channel query request returned an errored response */\n  error: ErrorFromResponse<APIErrorResponse> | null;\n  /** The channels currently loaded in the list, only defined if `sendChannelsToList` on `ChannelList` is true */\n  loadedChannels?: Channel<StreamChatGenerics>[];\n  /** Whether the channels are currently loading */\n  loading?: boolean;\n  /** Custom UI component to display the loading error indicator, defaults to component that renders null */\n  LoadingErrorIndicator?: React.ComponentType;\n  /** Custom UI component to display a loading indicator, defaults to and accepts same props as: [LoadingChannels](https://github.com/GetStream/stream-chat-react/blob/master/src/components/Loading/LoadingChannels.tsx) */\n  LoadingIndicator?: React.ComponentType;\n  /** Local state hook that resets the currently loaded channels */\n  setChannels?: React.Dispatch<React.SetStateAction<Channel<StreamChatGenerics>[]>>;\n};\n\n/**\n * A preview list of channels, allowing you to select the channel you want to open\n */\nexport const ChannelListMessenger = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  props: PropsWithChildren<ChannelListMessengerProps<StreamChatGenerics>>,\n) => {\n  const {\n    children,\n    error = null,\n    loading,\n    LoadingErrorIndicator = NullComponent,\n    LoadingIndicator = LoadingChannels,\n  } = props;\n  const { t } = useTranslationContext('ChannelListMessenger');\n\n  if (error) {\n    return <LoadingErrorIndicator />;\n  }\n\n  if (loading) {\n    return <LoadingIndicator />;\n  }\n\n  return (\n    <div className='str-chat__channel-list-messenger str-chat__channel-list-messenger-react'>\n      <div\n        aria-label={t('aria/Channel list')}\n        className='str-chat__channel-list-messenger__main str-chat__channel-list-messenger-react__main'\n        role='listbox'\n      >\n        {children}\n      </div>\n    </div>\n  );\n};\n", "import { useEffect } from 'react';\n\nimport { useChatContext } from '../../../context/ChatContext';\n\nimport type { DefaultStreamChatGenerics } from '../../../types/types';\n\nexport const useConnectionRecoveredListener = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  forceUpdate?: () => void,\n) => {\n  const { client } = useChatContext<StreamChatGenerics>('useConnectionRecoveredListener');\n\n  useEffect(() => {\n    const handleEvent = () => {\n      if (forceUpdate) {\n        forceUpdate();\n      }\n    };\n\n    client.on('connection.recovered', handleEvent);\n\n    return () => {\n      client.off('connection.recovered', handleEvent);\n    };\n  }, [client, forceUpdate]);\n};\n", "import { useEffect } from 'react';\n\nexport const useMobileNavigation = (\n  channelListRef: React.RefObject<HTMLDivElement | null>,\n  navOpen: boolean,\n  closeMobileNav?: () => void,\n) => {\n  useEffect(() => {\n    const handleClickOutside = (event: MouseEvent) => {\n      if (\n        closeMobileNav &&\n        channelListRef.current &&\n        !channelListRef.current.contains(event.target as Node) &&\n        navOpen\n      ) {\n        closeMobileNav();\n      }\n    };\n\n    document.addEventListener('click', handleClickOutside);\n\n    return () => {\n      document.removeEventListener('click', handleClickOutside);\n    };\n  }, [channelListRef, closeMobileNav, navOpen]);\n};\n", "import { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport uniqBy from 'lodash.uniqby';\n\nimport { MAX_QUERY_CHANNELS_LIMIT } from '../utils';\n\nimport type {\n  Channel,\n  ChannelFilters,\n  ChannelOptions,\n  ChannelSort,\n  StreamChat,\n} from 'stream-chat';\n\nimport { useChatContext } from '../../../context/ChatContext';\n\nimport type { DefaultStreamChatGenerics } from '../../../types/types';\nimport type { ChannelsQueryState } from '../../Chat/hooks/useChannelsQueryState';\nimport { DEFAULT_INITIAL_CHANNEL_PAGE_SIZE } from '../../../constants/limits';\n\nconst RECOVER_LOADED_CHANNELS_THROTTLE_INTERVAL_IN_MS = 5000;\nconst MIN_RECOVER_LOADED_CHANNELS_THROTTLE_INTERVAL_IN_MS = 2000;\n\ntype AllowedQueryType = Extract<\n  ChannelsQueryState['queryInProgress'],\n  'reload' | 'load-more'\n>;\n\nexport type CustomQueryChannelParams<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n  currentChannels: Array<Channel<StreamChatGenerics>>;\n  queryType: AllowedQueryType;\n  setChannels: React.Dispatch<React.SetStateAction<Array<Channel<StreamChatGenerics>>>>;\n  setHasNextPage: React.Dispatch<React.SetStateAction<boolean>>;\n};\n\nexport type CustomQueryChannelsFn<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = (params: CustomQueryChannelParams<StreamChatGenerics>) => Promise<void>;\n\nexport const usePaginatedChannels = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  client: StreamChat<StreamChatGenerics>,\n  filters: ChannelFilters<StreamChatGenerics>,\n  sort: ChannelSort<StreamChatGenerics>,\n  options: ChannelOptions,\n  activeChannelHandler: (\n    channels: Array<Channel<StreamChatGenerics>>,\n    setChannels: React.Dispatch<React.SetStateAction<Array<Channel<StreamChatGenerics>>>>,\n  ) => void,\n  recoveryThrottleIntervalMs: number = RECOVER_LOADED_CHANNELS_THROTTLE_INTERVAL_IN_MS,\n  customQueryChannels?: CustomQueryChannelsFn<StreamChatGenerics>,\n) => {\n  const {\n    channelsQueryState: { error, setError, setQueryInProgress },\n  } = useChatContext('usePaginatedChannels');\n  const [channels, setChannels] = useState<Array<Channel<StreamChatGenerics>>>([]);\n  const [hasNextPage, setHasNextPage] = useState(true);\n  const lastRecoveryTimestamp = useRef<number | undefined>(undefined);\n\n  const recoveryThrottleInterval =\n    recoveryThrottleIntervalMs < MIN_RECOVER_LOADED_CHANNELS_THROTTLE_INTERVAL_IN_MS\n      ? MIN_RECOVER_LOADED_CHANNELS_THROTTLE_INTERVAL_IN_MS\n      : (recoveryThrottleIntervalMs ?? RECOVER_LOADED_CHANNELS_THROTTLE_INTERVAL_IN_MS);\n  // memoize props\n  const filterString = useMemo(() => JSON.stringify(filters), [filters]);\n  const sortString = useMemo(() => JSON.stringify(sort), [sort]);\n\n  // eslint-disable-next-line react-hooks/exhaustive-deps\n  const queryChannels = async (queryType = 'load-more') => {\n    setError(null);\n\n    if (queryType === 'reload') {\n      setChannels([]);\n    }\n    setQueryInProgress(queryType as AllowedQueryType);\n\n    try {\n      if (customQueryChannels) {\n        await customQueryChannels({\n          currentChannels: channels,\n          queryType: queryType as AllowedQueryType,\n          setChannels,\n          setHasNextPage,\n        });\n      } else {\n        const offset = queryType === 'reload' ? 0 : channels.length;\n\n        const newOptions = {\n          limit: options?.limit ?? MAX_QUERY_CHANNELS_LIMIT,\n          message_limit: options?.message_limit ?? DEFAULT_INITIAL_CHANNEL_PAGE_SIZE,\n          offset,\n          ...options,\n        };\n\n        const channelQueryResponse = await client.queryChannels(\n          filters,\n          sort || {},\n          newOptions,\n        );\n\n        const newChannels =\n          queryType === 'reload'\n            ? channelQueryResponse\n            : uniqBy([...channels, ...channelQueryResponse], 'cid');\n\n        setChannels(newChannels);\n        setHasNextPage(channelQueryResponse.length >= newOptions.limit);\n\n        // Set active channel only on load of first page\n        if (!offset && activeChannelHandler) {\n          activeChannelHandler(newChannels, setChannels);\n        }\n      }\n    } catch (err) {\n      console.warn(err);\n      setError(err as Error);\n    }\n\n    setQueryInProgress(null);\n  };\n\n  const throttleRecover = useCallback(() => {\n    const now = Date.now();\n    const isFirstRecovery = !lastRecoveryTimestamp.current;\n    const timeElapsedSinceLastRecoveryMs = lastRecoveryTimestamp.current\n      ? now - lastRecoveryTimestamp.current\n      : 0;\n\n    if (\n      !isFirstRecovery &&\n      timeElapsedSinceLastRecoveryMs < recoveryThrottleInterval &&\n      !error\n    ) {\n      return;\n    }\n\n    lastRecoveryTimestamp.current = now;\n    queryChannels('reload');\n  }, [error, queryChannels, recoveryThrottleInterval]);\n\n  const loadNextPage = () => {\n    queryChannels();\n  };\n\n  useEffect(() => {\n    if (client.recoverStateOnReconnect) return;\n    const { unsubscribe } = client.on('connection.recovered', throttleRecover);\n\n    return () => {\n      unsubscribe();\n    };\n  }, [client, throttleRecover]);\n\n  useEffect(() => {\n    queryChannels('reload');\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [filterString, sortString]);\n\n  return {\n    channels,\n    hasNextPage,\n    loadNextPage,\n    setChannels,\n  };\n};\n", "import uniqBy from 'lodash.uniqby';\nimport type {\n  Channel,\n  ChannelSort,\n  ChannelSortBase,\n  ExtendableGenerics,\n} from 'stream-chat';\n\nimport type { DefaultStreamChatGenerics } from '../../types/types';\nimport type { ChannelListProps } from './ChannelList';\n\nexport const MAX_QUERY_CHANNELS_LIMIT = 30;\n\ntype MoveChannelUpParams<\n  SCG extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n  channels: Array<Channel<SCG>>;\n  cid: string;\n  activeChannel?: Channel<SCG>;\n};\n\n/**\n * @deprecated\n */\nexport const moveChannelUp = <\n  SCG extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n  activeChannel,\n  channels,\n  cid,\n}: MoveChannelUpParams<SCG>) => {\n  // get index of channel to move up\n  const channelIndex = channels.findIndex((channel) => channel.cid === cid);\n\n  if (!activeChannel && channelIndex <= 0) return channels;\n\n  // get channel to move up\n  const channel = activeChannel || channels[channelIndex];\n\n  return uniqBy([channel, ...channels], 'cid');\n};\n\n/**\n * Expects channel array sorted by `{ pinned_at: -1 }`.\n *\n * TODO: add support for the `{ pinned_at: 1 }`\n */\nexport function findLastPinnedChannelIndex<SCG extends ExtendableGenerics>({\n  channels,\n}: {\n  channels: Channel<SCG>[];\n}) {\n  let lastPinnedChannelIndex: number | null = null;\n\n  for (const channel of channels) {\n    if (!isChannelPinned(channel)) break;\n\n    if (typeof lastPinnedChannelIndex === 'number') {\n      lastPinnedChannelIndex++;\n    } else {\n      lastPinnedChannelIndex = 0;\n    }\n  }\n\n  return lastPinnedChannelIndex;\n}\n\ntype MoveChannelUpwardsParams<\n  SCG extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n  channels: Array<Channel<SCG>>;\n  channelToMove: Channel<SCG>;\n  sort: ChannelSort<SCG>;\n  /**\n   * If the index of the channel within `channels` list which is being moved upwards\n   * (`channelToMove`) is known, you can supply it to skip extra calculation.\n   */\n  channelToMoveIndexWithinChannels?: number;\n};\n\nexport const moveChannelUpwards = <\n  SCG extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n  channels,\n  channelToMove,\n  channelToMoveIndexWithinChannels,\n  sort,\n}: MoveChannelUpwardsParams<SCG>) => {\n  // get index of channel to move up\n  const targetChannelIndex =\n    channelToMoveIndexWithinChannels ??\n    channels.findIndex((channel) => channel.cid === channelToMove.cid);\n\n  const targetChannelExistsWithinList = targetChannelIndex >= 0;\n  const targetChannelAlreadyAtTheTop = targetChannelIndex === 0;\n\n  // pinned channels should not move within the list based on recent activity, channels which\n  // receive messages and are not pinned should move upwards but only under the last pinned channel\n  // in the list\n  const considerPinnedChannels = shouldConsiderPinnedChannels(sort);\n  const isTargetChannelPinned = isChannelPinned(channelToMove);\n\n  if (targetChannelAlreadyAtTheTop || (considerPinnedChannels && isTargetChannelPinned)) {\n    return channels;\n  }\n\n  const newChannels = [...channels];\n\n  // target channel index is known, remove it from the list\n  if (targetChannelExistsWithinList) {\n    newChannels.splice(targetChannelIndex, 1);\n  }\n\n  // as position of pinned channels has to stay unchanged, we need to\n  // find last pinned channel in the list to move the target channel after\n  let lastPinnedChannelIndex: number | null = null;\n  if (considerPinnedChannels) {\n    lastPinnedChannelIndex = findLastPinnedChannelIndex({ channels: newChannels });\n  }\n\n  // re-insert it at the new place (to specific index if pinned channels are considered)\n  newChannels.splice(\n    typeof lastPinnedChannelIndex === 'number' ? lastPinnedChannelIndex + 1 : 0,\n    0,\n    channelToMove,\n  );\n\n  return newChannels;\n};\n\n/**\n * Returns `true` only if object with `pinned_at` property is first within the `sort` array\n * or if `pinned_at` key of the `sort` object gets picked first when using `for...in` looping mechanism\n * and value of the `pinned_at` is either `1` or `-1`.\n */\nexport const shouldConsiderPinnedChannels = <SCG extends ExtendableGenerics>(\n  sort: ChannelListProps<SCG>['sort'],\n) => {\n  const value = extractSortValue<SCG>({ atIndex: 0, sort, targetKey: 'pinned_at' });\n\n  if (typeof value !== 'number') return false;\n\n  return Math.abs(value) === 1;\n};\n\nexport const extractSortValue = <SCG extends ExtendableGenerics>({\n  atIndex,\n  sort,\n  targetKey,\n}: {\n  atIndex: number;\n  targetKey: keyof ChannelSortBase<SCG>;\n  sort?: ChannelListProps<SCG>['sort'];\n}) => {\n  if (!sort) return null;\n  let option: null | ChannelSort<SCG> = null;\n\n  if (Array.isArray(sort)) {\n    option = sort[atIndex] ?? null;\n  } else {\n    let index = 0;\n    for (const key in sort) {\n      if (index !== atIndex) {\n        index++;\n        continue;\n      }\n\n      if (key !== targetKey) {\n        return null;\n      }\n\n      option = sort;\n\n      break;\n    }\n  }\n\n  return option?.[targetKey] ?? null;\n};\n\n/**\n * Returns `true` only if `archived` property is of type `boolean` within `filters` object.\n */\nexport const shouldConsiderArchivedChannels = <SCG extends ExtendableGenerics>(\n  filters: ChannelListProps<SCG>['filters'],\n) => {\n  if (!filters) return false;\n\n  return typeof filters.archived === 'boolean';\n};\n\n/**\n * Returns `true` only if `pinned_at` property is of type `string` within `membership` object.\n */\nexport const isChannelPinned = <SCG extends ExtendableGenerics>(\n  channel: Channel<SCG>,\n) => {\n  if (!channel) return false;\n\n  const membership = channel.state.membership;\n\n  return typeof membership.pinned_at === 'string';\n};\n\n/**\n * Returns `true` only if `archived_at` property is of type `string` within `membership` object.\n */\nexport const isChannelArchived = <SCG extends ExtendableGenerics>(\n  channel: Channel<SCG>,\n) => {\n  if (!channel) return false;\n\n  const membership = channel.state.membership;\n\n  return typeof membership.archived_at === 'string';\n};\n", "// const defaults = useChannelListShapeDefaults();\n\nimport { Dispatch, SetStateAction, useCallback, useEffect, useMemo, useRef } from 'react';\nimport { Channel, Event, ExtendableGenerics } from 'stream-chat';\n\nimport {\n  extractSortValue,\n  findLastPinnedChannelIndex,\n  isChannelArchived,\n  isChannelPinned,\n  moveChannelUpwards,\n  shouldConsiderArchivedChannels,\n  shouldConsiderPinnedChannels,\n} from '../utils';\nimport { useChatContext } from '../../../context';\nimport { getChannel } from '../../../utils';\nimport { ChannelListProps } from '../ChannelList';\n\ntype SetChannels<SCG extends ExtendableGenerics> = Dispatch<\n  SetStateAction<Channel<SCG>[]>\n>;\n\ntype BaseParameters<SCG extends ExtendableGenerics> = {\n  event: Event<SCG>;\n  setChannels: SetChannels<SCG>;\n};\n\ntype RepeatedParameters<SCG extends ExtendableGenerics> = {\n  customHandler?: (\n    setChannels: BaseParameters<SCG>['setChannels'],\n    event: BaseParameters<SCG>['event'],\n  ) => void;\n};\n\ntype HandleMessageNewParameters<SCG extends ExtendableGenerics> = BaseParameters<SCG> &\n  RepeatedParameters<SCG> & {\n    allowNewMessagesFromUnfilteredChannels: boolean;\n    lockChannelOrder: boolean;\n  } & Required<Pick<ChannelListProps<SCG>, 'filters' | 'sort'>>;\n\ntype HandleNotificationMessageNewParameters<SCG extends ExtendableGenerics> =\n  BaseParameters<SCG> &\n    RepeatedParameters<SCG> & {\n      allowNewMessagesFromUnfilteredChannels: boolean;\n      lockChannelOrder: boolean;\n    } & Required<Pick<ChannelListProps<SCG>, 'filters' | 'sort'>>;\n\ntype HandleNotificationRemovedFromChannelParameters<SCG extends ExtendableGenerics> =\n  BaseParameters<SCG> & RepeatedParameters<SCG>;\n\ntype HandleNotificationAddedToChannelParameters<SCG extends ExtendableGenerics> =\n  BaseParameters<SCG> &\n    RepeatedParameters<SCG> & {\n      allowNewMessagesFromUnfilteredChannels: boolean;\n      lockChannelOrder: boolean;\n    } & Required<Pick<ChannelListProps<SCG>, 'sort'>>;\n\ntype HandleMemberUpdatedParameters<SCG extends ExtendableGenerics> =\n  BaseParameters<SCG> & {\n    lockChannelOrder: boolean;\n  } & Required<Pick<ChannelListProps<SCG>, 'sort' | 'filters'>>;\n\ntype HandleChannelDeletedParameters<SCG extends ExtendableGenerics> =\n  BaseParameters<SCG> & RepeatedParameters<SCG>;\n\ntype HandleChannelHiddenParameters<SCG extends ExtendableGenerics> = BaseParameters<SCG> &\n  RepeatedParameters<SCG>;\n\ntype HandleChannelVisibleParameters<SCG extends ExtendableGenerics> =\n  BaseParameters<SCG> &\n    RepeatedParameters<SCG> &\n    Required<Pick<ChannelListProps<SCG>, 'sort' | 'filters'>>;\n\ntype HandleChannelTruncatedParameters<SCG extends ExtendableGenerics> =\n  BaseParameters<SCG> & RepeatedParameters<SCG>;\n\ntype HandleChannelUpdatedParameters<SCG extends ExtendableGenerics> =\n  BaseParameters<SCG> & RepeatedParameters<SCG>;\n\ntype HandleUserPresenceChangedParameters<SCG extends ExtendableGenerics> =\n  BaseParameters<SCG>;\n\nconst shared = <SCG extends ExtendableGenerics>({\n  customHandler,\n  event,\n  setChannels,\n}: BaseParameters<SCG> & RepeatedParameters<SCG>) => {\n  if (typeof customHandler === 'function') {\n    return customHandler(setChannels, event);\n  }\n\n  setChannels((channels) => {\n    const channelIndex = channels.findIndex((channel) => channel.cid === event.cid);\n\n    if (channelIndex < 0) return channels;\n\n    channels.splice(channelIndex, 1);\n\n    return [...channels];\n  });\n};\n\nexport const useChannelListShapeDefaults = <SCG extends ExtendableGenerics>() => {\n  const { client } = useChatContext<SCG>();\n\n  const handleMessageNew = useCallback(\n    ({\n      allowNewMessagesFromUnfilteredChannels,\n      customHandler,\n      event,\n      filters,\n      lockChannelOrder,\n      setChannels,\n      sort,\n    }: HandleMessageNewParameters<SCG>) => {\n      if (typeof customHandler === 'function') {\n        return customHandler(setChannels, event);\n      }\n\n      const channelType = event.channel_type;\n      const channelId = event.channel_id;\n\n      if (!channelType || !channelId) return;\n\n      setChannels((currentChannels) => {\n        const targetChannel = client.channel(channelType, channelId);\n        const targetChannelIndex = currentChannels.indexOf(targetChannel);\n        const targetChannelExistsWithinList = targetChannelIndex >= 0;\n\n        const isTargetChannelPinned = isChannelPinned(targetChannel);\n        const isTargetChannelArchived = isChannelArchived(targetChannel);\n\n        const considerArchivedChannels = shouldConsiderArchivedChannels(filters);\n        const considerPinnedChannels = shouldConsiderPinnedChannels(sort);\n\n        if (\n          // filter is defined, target channel is archived and filter option is set to false\n          (considerArchivedChannels && isTargetChannelArchived && !filters.archived) ||\n          // filter is defined, target channel isn't archived and filter option is set to true\n          (considerArchivedChannels && !isTargetChannelArchived && filters.archived) ||\n          // sort option is defined, target channel is pinned\n          (considerPinnedChannels && isTargetChannelPinned) ||\n          // list order is locked\n          lockChannelOrder ||\n          // target channel is not within the loaded list and loading from cache is disallowed\n          (!targetChannelExistsWithinList && !allowNewMessagesFromUnfilteredChannels)\n        ) {\n          return currentChannels;\n        }\n\n        return moveChannelUpwards({\n          channels: currentChannels,\n          channelToMove: targetChannel,\n          channelToMoveIndexWithinChannels: targetChannelIndex,\n          sort,\n        });\n      });\n    },\n    [client],\n  );\n\n  const handleNotificationMessageNew = useCallback(\n    async ({\n      allowNewMessagesFromUnfilteredChannels,\n      customHandler,\n      event,\n      filters,\n      setChannels,\n      sort,\n    }: HandleNotificationMessageNewParameters<SCG>) => {\n      if (typeof customHandler === 'function') {\n        return customHandler(setChannels, event);\n      }\n\n      if (!event.channel) {\n        return;\n      }\n\n      const channel = await getChannel({\n        client,\n        id: event.channel.id,\n        type: event.channel.type,\n      });\n\n      const considerArchivedChannels = shouldConsiderArchivedChannels(filters);\n      if (isChannelArchived(channel) && considerArchivedChannels && !filters.archived) {\n        return;\n      }\n\n      if (!allowNewMessagesFromUnfilteredChannels) {\n        return;\n      }\n\n      setChannels((channels) =>\n        moveChannelUpwards({\n          channels,\n          channelToMove: channel,\n          sort,\n        }),\n      );\n    },\n    [client],\n  );\n\n  const handleNotificationAddedToChannel = useCallback(\n    async ({\n      allowNewMessagesFromUnfilteredChannels,\n      customHandler,\n      event,\n      setChannels,\n      sort,\n    }: HandleNotificationAddedToChannelParameters<SCG>) => {\n      if (typeof customHandler === 'function') {\n        return customHandler(setChannels, event);\n      }\n\n      if (!event.channel || !allowNewMessagesFromUnfilteredChannels) {\n        return;\n      }\n\n      const channel = await getChannel({\n        client,\n        id: event.channel.id,\n        members: event.channel.members?.reduce<string[]>(\n          (newMembers, { user, user_id }) => {\n            const userId = user_id || user?.id;\n\n            if (userId) newMembers.push(userId);\n\n            return newMembers;\n          },\n          [],\n        ),\n        type: event.channel.type,\n      });\n\n      // membership has been reset (target channel shouldn't be pinned nor archived)\n      setChannels((channels) =>\n        moveChannelUpwards({\n          channels,\n          channelToMove: channel,\n          sort,\n        }),\n      );\n    },\n    [client],\n  );\n\n  const handleNotificationRemovedFromChannel = useCallback(\n    ({\n      customHandler,\n      event,\n      setChannels,\n    }: HandleNotificationRemovedFromChannelParameters<SCG>) => {\n      if (typeof customHandler === 'function') {\n        return customHandler(setChannels, event);\n      }\n\n      setChannels((channels) =>\n        channels.filter((channel) => channel.cid !== event.channel?.cid),\n      );\n    },\n    [],\n  );\n\n  const handleMemberUpdated = useCallback(\n    ({\n      event,\n      filters,\n      lockChannelOrder,\n      setChannels,\n      sort,\n    }: HandleMemberUpdatedParameters<SCG>) => {\n      if (\n        !event.member?.user ||\n        event.member.user.id !== client.userID ||\n        !event.channel_type\n      ) {\n        return;\n      }\n\n      const channelType = event.channel_type;\n      const channelId = event.channel_id;\n\n      const considerPinnedChannels = shouldConsiderPinnedChannels(sort);\n      const considerArchivedChannels = shouldConsiderArchivedChannels(filters);\n\n      // `pinned_at` nor `archived` properties are set or channel list order is locked, return early\n      if ((!considerPinnedChannels && !considerArchivedChannels) || lockChannelOrder) {\n        return;\n      }\n\n      const pinnedAtSort = extractSortValue({ atIndex: 0, sort, targetKey: 'pinned_at' });\n\n      setChannels((currentChannels) => {\n        const targetChannel = client.channel(channelType, channelId);\n        // assumes that channel instances are not changing\n        const targetChannelIndex = currentChannels.indexOf(targetChannel);\n        const targetChannelExistsWithinList = targetChannelIndex >= 0;\n\n        const isTargetChannelArchived = isChannelArchived(targetChannel);\n        const isTargetChannelPinned = isChannelPinned(targetChannel);\n\n        const newChannels = [...currentChannels];\n\n        if (targetChannelExistsWithinList) {\n          newChannels.splice(targetChannelIndex, 1);\n        }\n\n        // handle archiving (remove channel)\n        if (\n          (considerArchivedChannels && isTargetChannelArchived && !filters.archived) ||\n          (considerArchivedChannels && !isTargetChannelArchived && filters.archived)\n        ) {\n          return newChannels;\n        }\n\n        let lastPinnedChannelIndex: number | null = null;\n\n        // calculate last pinned channel index only if `pinned_at` sort is set to\n        // ascending order or if it's in descending order while the pin is being removed, otherwise\n        // we move to the top (index 0)\n        if (pinnedAtSort === 1 || (pinnedAtSort === -1 && !isTargetChannelPinned)) {\n          lastPinnedChannelIndex = findLastPinnedChannelIndex({ channels: newChannels });\n        }\n\n        const newTargetChannelIndex =\n          typeof lastPinnedChannelIndex === 'number' ? lastPinnedChannelIndex + 1 : 0;\n\n        // skip re-render if the position of the channel does not change\n        if (currentChannels[newTargetChannelIndex] === targetChannel) {\n          return currentChannels;\n        }\n\n        newChannels.splice(newTargetChannelIndex, 0, targetChannel);\n\n        return newChannels;\n      });\n    },\n    [client],\n  );\n\n  const handleChannelDeleted = useCallback(\n    (p: HandleChannelDeletedParameters<SCG>) => shared<SCG>(p),\n    [],\n  );\n\n  const handleChannelHidden = useCallback(\n    (p: HandleChannelHiddenParameters<SCG>) => shared<SCG>(p),\n    [],\n  );\n\n  const handleChannelVisible = useCallback(\n    async ({\n      customHandler,\n      event,\n      filters,\n      setChannels,\n      sort,\n    }: HandleChannelVisibleParameters<SCG>) => {\n      if (typeof customHandler === 'function') {\n        return customHandler(setChannels, event);\n      }\n\n      if (!event.channel) {\n        return;\n      }\n\n      const channel = await getChannel({\n        client,\n        id: event.channel.id,\n        type: event.channel.type,\n      });\n\n      const considerArchivedChannels = shouldConsiderArchivedChannels(filters);\n      if (isChannelArchived(channel) && considerArchivedChannels && !filters.archived) {\n        return;\n      }\n\n      setChannels((channels) =>\n        moveChannelUpwards({\n          channels,\n          channelToMove: channel,\n          sort,\n        }),\n      );\n    },\n    [client],\n  );\n\n  const handleChannelTruncated = useCallback(\n    ({ customHandler, event, setChannels }: HandleChannelTruncatedParameters<SCG>) => {\n      if (typeof customHandler === 'function') {\n        return customHandler(setChannels, event);\n      }\n\n      // TODO: not sure whether this is needed\n      setChannels((channels) => [...channels]);\n      // if (forceUpdate) {\n      //   forceUpdate();\n      // }\n    },\n    [],\n  );\n\n  const handleChannelUpdated = useCallback(\n    ({ customHandler, event, setChannels }: HandleChannelUpdatedParameters<SCG>) => {\n      if (typeof customHandler === 'function') {\n        return customHandler(setChannels, event);\n      }\n\n      setChannels((channels) => {\n        const channelIndex = channels.findIndex(\n          (channel) => channel.cid === event.channel?.cid,\n        );\n\n        if (channelIndex > -1 && event.channel) {\n          const newChannels = channels;\n          newChannels[channelIndex].data = {\n            ...event.channel,\n            hidden: event.channel?.hidden ?? newChannels[channelIndex].data?.hidden,\n            own_capabilities:\n              event.channel?.own_capabilities ??\n              newChannels[channelIndex].data?.own_capabilities,\n          };\n\n          return [...newChannels];\n        }\n\n        return channels;\n      });\n\n      // if (forceUpdate) {\n      //   forceUpdate();\n      // }\n    },\n    [],\n  );\n\n  const handleUserPresenceChanged = useCallback(\n    ({ event, setChannels }: HandleUserPresenceChangedParameters<SCG>) => {\n      setChannels((channels) => {\n        const newChannels = channels.map((channel) => {\n          if (!event.user?.id || !channel.state.members[event.user.id]) {\n            return channel;\n          }\n\n          // FIXME: oh no...\n          const newChannel = channel;\n          newChannel.state.members[event.user.id].user = event.user;\n\n          return newChannel;\n        });\n\n        return newChannels;\n      });\n    },\n    [],\n  );\n\n  return useMemo(\n    () => ({\n      handleChannelDeleted,\n      handleChannelHidden,\n      handleChannelTruncated,\n      handleChannelUpdated,\n      handleChannelVisible,\n      handleMemberUpdated,\n      handleMessageNew,\n      handleNotificationAddedToChannel,\n      handleNotificationMessageNew,\n      handleNotificationRemovedFromChannel,\n      handleUserPresenceChanged,\n    }),\n    [\n      handleChannelDeleted,\n      handleChannelHidden,\n      handleChannelTruncated,\n      handleChannelUpdated,\n      handleChannelVisible,\n      handleMemberUpdated,\n      handleMessageNew,\n      handleNotificationAddedToChannel,\n      handleNotificationMessageNew,\n      handleNotificationRemovedFromChannel,\n      handleUserPresenceChanged,\n    ],\n  );\n};\n\ntype UseDefaultHandleChannelListShapeParameters<SCG extends ExtendableGenerics> =\n  Required<\n    Pick<\n      ChannelListProps<SCG>,\n      'allowNewMessagesFromUnfilteredChannels' | 'lockChannelOrder' | 'filters' | 'sort'\n    >\n  > &\n    Pick<\n      ChannelListProps<SCG>,\n      | 'onAddedToChannel'\n      | 'onChannelDeleted'\n      | 'onChannelHidden'\n      | 'onChannelTruncated'\n      | 'onChannelUpdated'\n      | 'onChannelVisible'\n      | 'onMessageNew'\n      | 'onMessageNewHandler'\n      | 'onRemovedFromChannel'\n    > & {\n      setChannels: SetChannels<SCG>;\n      customHandleChannelListShape?: (data: {\n        // can't use ReturnType<typeof useChannelListShapeDefaults<SCG>> until we upgrade prettier to at least v2.7.0\n        defaults: ReturnType<typeof useChannelListShapeDefaults>;\n        event: Event<SCG>;\n        setChannels: SetChannels<SCG>;\n      }) => void;\n    };\n\nexport const usePrepareShapeHandlers = <SCG extends ExtendableGenerics>({\n  allowNewMessagesFromUnfilteredChannels,\n  customHandleChannelListShape,\n  filters,\n  lockChannelOrder,\n  onAddedToChannel,\n  onChannelDeleted,\n  onChannelHidden,\n  onChannelTruncated,\n  onChannelUpdated,\n  onChannelVisible,\n  onMessageNew,\n  onMessageNewHandler,\n  onRemovedFromChannel,\n  setChannels,\n  sort,\n}: UseDefaultHandleChannelListShapeParameters<SCG>) => {\n  const defaults = useChannelListShapeDefaults<SCG>();\n\n  const defaultHandleChannelListShapeRef = useRef<(e: Event<SCG>) => void>(undefined);\n\n  const customHandleChannelListShapeRef = useRef<(e: Event<SCG>) => void>(undefined);\n\n  customHandleChannelListShapeRef.current = (event: Event<SCG>) => {\n    // @ts-expect-error can't use ReturnType<typeof useChannelListShapeDefaults<SCG>> until we upgrade prettier to at least v2.7.0\n    customHandleChannelListShape?.({ defaults, event, setChannels });\n  };\n\n  defaultHandleChannelListShapeRef.current = (event: Event<SCG>) => {\n    switch (event.type) {\n      case 'message.new':\n        defaults.handleMessageNew({\n          allowNewMessagesFromUnfilteredChannels,\n          customHandler: onMessageNewHandler,\n          event,\n          filters,\n          lockChannelOrder,\n          setChannels,\n          sort,\n        });\n        break;\n      case 'notification.message_new':\n        defaults.handleNotificationMessageNew({\n          allowNewMessagesFromUnfilteredChannels,\n          customHandler: onMessageNew,\n          event,\n          filters,\n          lockChannelOrder,\n          setChannels,\n          sort,\n        });\n        break;\n      case 'notification.added_to_channel':\n        defaults.handleNotificationAddedToChannel({\n          allowNewMessagesFromUnfilteredChannels,\n          customHandler: onAddedToChannel,\n          event,\n          lockChannelOrder,\n          setChannels,\n          sort,\n        });\n        break;\n      case 'notification.removed_from_channel':\n        defaults.handleNotificationRemovedFromChannel({\n          customHandler: onRemovedFromChannel,\n          event,\n          setChannels,\n        });\n        break;\n      case 'channel.deleted':\n        defaults.handleChannelDeleted({\n          customHandler: onChannelDeleted,\n          event,\n          setChannels,\n        });\n        break;\n      case 'channel.hidden':\n        defaults.handleChannelHidden({\n          customHandler: onChannelHidden,\n          event,\n          setChannels,\n        });\n        break;\n      case 'channel.visible':\n        defaults.handleChannelVisible({\n          customHandler: onChannelVisible,\n          event,\n          filters,\n          setChannels,\n          sort,\n        });\n        break;\n      case 'channel.truncated':\n        defaults.handleChannelTruncated({\n          customHandler: onChannelTruncated,\n          event,\n          setChannels,\n        });\n        break;\n      case 'channel.updated':\n        defaults.handleChannelUpdated({\n          customHandler: onChannelUpdated,\n          event,\n          setChannels,\n        });\n        break;\n      case 'user.presence.changed':\n        defaults.handleUserPresenceChanged({ event, setChannels });\n        break;\n      case 'member.updated':\n        defaults.handleMemberUpdated({\n          event,\n          filters,\n          lockChannelOrder,\n          setChannels,\n          sort,\n        });\n        break;\n      default:\n        break;\n    }\n  };\n\n  const defaultFn = useCallback((e: Event<SCG>) => {\n    defaultHandleChannelListShapeRef.current?.(e);\n  }, []);\n\n  const customFn = useMemo(() => {\n    if (!customHandleChannelListShape) return null;\n    return (e: Event<SCG>) => {\n      customHandleChannelListShapeRef.current?.(e);\n    };\n  }, [customHandleChannelListShape]);\n\n  return {\n    customHandler: customFn,\n    defaultHandler: defaultFn,\n  };\n};\n\nexport const useChannelListShape = <SCG extends ExtendableGenerics>(\n  handler: (e: Event<SCG>) => void,\n) => {\n  const { client } = useChatContext<SCG>();\n\n  useEffect(() => {\n    const subscription = client.on('all', handler);\n\n    return subscription.unsubscribe;\n  }, [client, handler]);\n};\n", "import clsx from 'clsx';\nimport React from 'react';\n\nimport {\n  ChannelSearchControllerParams,\n  useChannelSearch,\n} from './hooks/useChannelSearch';\n\nimport type { AdditionalSearchBarProps, SearchBarProps } from './SearchBar';\nimport { SearchBar as DefaultSearchBar } from './SearchBar';\nimport {\n  AdditionalSearchInputProps,\n  SearchInput as DefaultSearchInput,\n  SearchInputProps,\n} from './SearchInput';\nimport { AdditionalSearchResultsProps, SearchResults } from './SearchResults';\n\nimport type { DefaultStreamChatGenerics } from '../../types/types';\n\nexport type AdditionalChannelSearchProps = {\n  /** Custom UI component to display the search bar with text input */\n  SearchBar?: React.ComponentType<SearchBarProps>;\n  /** Custom UI component to display the search text input */\n  SearchInput?: React.ComponentType<SearchInputProps>;\n};\n\nexport type ChannelSearchProps<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = AdditionalSearchBarProps &\n  AdditionalSearchInputProps &\n  AdditionalSearchResultsProps<StreamChatGenerics> &\n  AdditionalChannelSearchProps &\n  ChannelSearchControllerParams<StreamChatGenerics>;\n\nconst UnMemoizedChannelSearch = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  props: ChannelSearchProps<StreamChatGenerics>,\n) => {\n  const {\n    AppMenu,\n    ClearInputIcon,\n    ExitSearchIcon,\n    MenuIcon,\n    placeholder,\n    popupResults = false,\n    SearchBar = DefaultSearchBar,\n    SearchEmpty,\n    SearchInput = DefaultSearchInput,\n    SearchInputIcon,\n    SearchLoading,\n    SearchResultItem,\n    SearchResultsHeader,\n    SearchResultsList,\n    ...channelSearchParams\n  } = props;\n\n  const {\n    activateSearch,\n    clearState,\n    exitSearch,\n    inputIsFocused,\n    inputRef,\n    onSearch,\n    query,\n    results,\n    searchBarRef,\n    searching,\n    selectResult,\n  } = useChannelSearch<StreamChatGenerics>(channelSearchParams);\n\n  return (\n    <div\n      className={clsx(\n        'str-chat__channel-search',\n        popupResults\n          ? 'str-chat__channel-search--popup'\n          : 'str-chat__channel-search--inline',\n        {\n          'str-chat__channel-search--with-results': results.length > 0,\n        },\n      )}\n      data-testid='channel-search'\n    >\n      <SearchBar\n        activateSearch={activateSearch}\n        AppMenu={AppMenu}\n        ClearInputIcon={ClearInputIcon}\n        clearState={clearState}\n        disabled={channelSearchParams.disabled}\n        exitSearch={exitSearch}\n        ExitSearchIcon={ExitSearchIcon}\n        inputIsFocused={inputIsFocused}\n        inputRef={inputRef}\n        MenuIcon={MenuIcon}\n        onSearch={onSearch}\n        placeholder={placeholder}\n        query={query}\n        searchBarRef={searchBarRef}\n        SearchInput={SearchInput}\n        SearchInputIcon={SearchInputIcon}\n      />\n\n      {query && (\n        <SearchResults\n          popupResults={popupResults}\n          results={results}\n          SearchEmpty={SearchEmpty}\n          searching={searching}\n          SearchLoading={SearchLoading}\n          SearchResultItem={SearchResultItem}\n          SearchResultsHeader={SearchResultsHeader}\n          SearchResultsList={SearchResultsList}\n          selectResult={selectResult}\n        />\n      )}\n    </div>\n  );\n};\n\n/**\n * The ChannelSearch component makes a query users call and displays the results in a list.\n * Clicking on a list item will navigate you into a channel with the selected user. It can be used\n * on its own or added to the ChannelList component by setting the `showChannelSearch` prop to true.\n */\nexport const ChannelSearch = React.memo(\n  UnMemoizedChannelSearch,\n) as typeof UnMemoizedChannelSearch;\n", "import React, { useCallback, useEffect, useRef, useState } from 'react';\nimport debounce from 'lodash.debounce';\nimport uniqBy from 'lodash.uniqby';\n\nimport { ChannelOrUserResponse, isChannel } from '../utils';\n\nimport { useChatContext } from '../../../context/ChatContext';\n\nimport type {\n  Channel,\n  ChannelFilters,\n  ChannelOptions,\n  ChannelSort,\n  UserFilters,\n  UserOptions,\n  UsersAPIResponse,\n  UserSort,\n} from 'stream-chat';\nimport type { SearchBarController } from '../SearchBar';\nimport type { SearchInputController } from '../SearchInput';\nimport type { SearchResultsController } from '../SearchResults';\nimport type { DefaultStreamChatGenerics } from '../../../types/types';\n\nexport type ChannelSearchFunctionParams<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n  setQuery: React.Dispatch<React.SetStateAction<string>>;\n  setResults: React.Dispatch<\n    React.SetStateAction<ChannelOrUserResponse<StreamChatGenerics>[]>\n  >;\n  setSearching: React.Dispatch<React.SetStateAction<boolean>>;\n};\n\nexport type SearchController<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = SearchInputController &\n  SearchBarController &\n  SearchResultsController<StreamChatGenerics>;\n\nexport type SearchQueryParams<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n  channelFilters?: {\n    filters?: ChannelFilters<StreamChatGenerics>;\n    options?: ChannelOptions;\n    sort?: ChannelSort<StreamChatGenerics>;\n  };\n  userFilters?: {\n    filters?:\n      | UserFilters<StreamChatGenerics>\n      | ((query: string) => UserFilters<StreamChatGenerics>);\n    options?: UserOptions;\n    sort?: UserSort<StreamChatGenerics>;\n  };\n};\n\nexport type ChannelSearchParams<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n  /** The type of channel to create on user result select, defaults to `messaging` */\n  channelType?: string;\n  /** Clear search state / results on every click outside the search input, defaults to true */\n  clearSearchOnClickOutside?: boolean;\n  /** Disables execution of the search queries, defaults to false */\n  disabled?: boolean;\n  /** Callback invoked with every search input change handler */\n  onSearch?: SearchInputController['onSearch'];\n  /** Callback invoked when the search UI is deactivated */\n  onSearchExit?: () => void;\n  /** Custom handler function to run on search result item selection */\n  onSelectResult?: (\n    params: ChannelSearchFunctionParams<StreamChatGenerics>,\n    result: ChannelOrUserResponse<StreamChatGenerics>,\n  ) => Promise<void> | void;\n  /** The number of milliseconds to debounce the search query. The default interval is 200ms. */\n  searchDebounceIntervalMs?: number;\n  /** Boolean to search for channels in the server query, default is false and just searches for users */\n  searchForChannels?: boolean;\n  /** Boolean to search for users in the server query, default is true and just searches for users */\n  searchForUsers?: boolean;\n  /** Custom search function to override the default implementation */\n  searchFunction?: (\n    params: ChannelSearchFunctionParams<StreamChatGenerics>,\n    event: React.BaseSyntheticEvent,\n  ) => Promise<void> | void;\n  /** Object containing filters/sort/options overrides for user / channel search */\n  searchQueryParams?: SearchQueryParams<StreamChatGenerics>;\n};\n\nexport type ChannelSearchControllerParams<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = ChannelSearchParams<StreamChatGenerics> & {\n  /** Set the array of channels displayed in the ChannelList */\n  setChannels?: React.Dispatch<React.SetStateAction<Array<Channel<StreamChatGenerics>>>>;\n};\n\nexport const useChannelSearch = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n  channelType = 'messaging',\n  clearSearchOnClickOutside = true,\n  disabled = false,\n  onSearch: onSearchCallback,\n  onSearchExit,\n  onSelectResult,\n  searchDebounceIntervalMs = 300,\n  searchForChannels = false,\n  searchForUsers = true,\n  searchFunction,\n  searchQueryParams,\n  setChannels,\n}: ChannelSearchControllerParams<StreamChatGenerics>): SearchController<StreamChatGenerics> => {\n  const { client, setActiveChannel } =\n    useChatContext<StreamChatGenerics>('useChannelSearch');\n\n  const [inputIsFocused, setInputIsFocused] = useState(false);\n  const [query, setQuery] = useState('');\n  const [results, setResults] = useState<\n    Array<ChannelOrUserResponse<StreamChatGenerics>>\n  >([]);\n  const [searching, setSearching] = useState(false);\n\n  const searchQueryPromiseInProgress = useRef<boolean>(false);\n  const shouldIgnoreQueryResults = useRef(false);\n\n  const inputRef = useRef<HTMLInputElement | null>(null);\n  const searchBarRef = useRef<HTMLDivElement | null>(null);\n\n  const clearState = useCallback(() => {\n    setQuery('');\n    setResults([]);\n    setSearching(false);\n\n    shouldIgnoreQueryResults.current = searchQueryPromiseInProgress.current;\n  }, []);\n\n  const activateSearch = useCallback(() => {\n    setInputIsFocused(true);\n  }, []);\n\n  const exitSearch = useCallback(() => {\n    setInputIsFocused(false);\n    inputRef.current?.blur();\n    clearState();\n    onSearchExit?.();\n  }, [clearState, onSearchExit]);\n\n  useEffect(() => {\n    if (disabled) return;\n\n    const clickListener = (event: MouseEvent) => {\n      if (!(event.target instanceof HTMLElement)) return;\n      const isInputClick = searchBarRef.current?.contains(event.target);\n\n      if (isInputClick) return;\n\n      if ((inputIsFocused && !query) || clearSearchOnClickOutside) {\n        exitSearch();\n      }\n    };\n\n    document.addEventListener('click', clickListener);\n    return () => document.removeEventListener('click', clickListener);\n  }, [disabled, inputIsFocused, query, exitSearch, clearSearchOnClickOutside]);\n\n  useEffect(() => {\n    if (!inputRef.current || disabled) return;\n\n    const handleKeyDown = (event: KeyboardEvent) => {\n      if (event.key === 'Escape') return exitSearch();\n    };\n    inputRef.current.addEventListener('keydown', handleKeyDown);\n\n    return () => {\n      // eslint-disable-next-line react-hooks/exhaustive-deps\n      inputRef.current?.removeEventListener('keydown', handleKeyDown);\n    };\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [disabled]);\n\n  const selectResult = useCallback(\n    async (result: ChannelOrUserResponse<StreamChatGenerics>) => {\n      if (!client.userID) return;\n      if (onSelectResult) {\n        await onSelectResult(\n          {\n            setQuery,\n            setResults,\n            setSearching,\n          },\n          result,\n        );\n        return;\n      }\n      let selectedChannel: Channel<StreamChatGenerics>;\n      if (isChannel(result)) {\n        setActiveChannel(result);\n        selectedChannel = result;\n      } else {\n        const newChannel = client.channel(channelType, {\n          members: [client.userID, result.id],\n        });\n        await newChannel.watch();\n\n        setActiveChannel(newChannel);\n        selectedChannel = newChannel;\n      }\n      setChannels?.((channels) => uniqBy([selectedChannel, ...channels], 'cid'));\n      if (clearSearchOnClickOutside) {\n        exitSearch();\n      }\n    },\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    [\n      clearSearchOnClickOutside,\n      client,\n      exitSearch,\n      onSelectResult,\n      setActiveChannel,\n      setChannels,\n    ],\n  );\n\n  const getChannels = useCallback(\n    async (text: string) => {\n      if (!searchForChannels && !searchForUsers) return;\n      let results: ChannelOrUserResponse<StreamChatGenerics>[] = [];\n      const promises: Array<\n        | Promise<Channel<StreamChatGenerics>[]>\n        | Promise<UsersAPIResponse<StreamChatGenerics>>\n      > = [];\n      try {\n        if (searchForChannels) {\n          promises.push(\n            client.queryChannels(\n              // @ts-expect-error valid query\n              {\n                members: { $in: [client.userID] },\n                name: { $autocomplete: text },\n                ...searchQueryParams?.channelFilters?.filters,\n              },\n              searchQueryParams?.channelFilters?.sort || {},\n              { limit: 5, ...searchQueryParams?.channelFilters?.options },\n            ),\n          );\n        }\n\n        if (searchForUsers) {\n          promises.push(\n            client.queryUsers(\n              // @ts-expect-error valid query\n              {\n                $or: [{ id: { $autocomplete: text } }, { name: { $autocomplete: text } }],\n                ...searchQueryParams?.userFilters?.filters,\n              },\n              { id: 1, ...searchQueryParams?.userFilters?.sort },\n              { limit: 8, ...searchQueryParams?.userFilters?.options },\n            ),\n          );\n        }\n\n        if (promises.length) {\n          searchQueryPromiseInProgress.current = true;\n\n          const resolved = await Promise.all(promises);\n\n          if (searchForChannels && searchForUsers) {\n            const [channels, { users }] = resolved as [\n              Channel<StreamChatGenerics>[],\n              UsersAPIResponse<StreamChatGenerics>,\n            ];\n            results = [...channels, ...users.filter((u) => u.id !== client.user?.id)];\n          } else if (searchForChannels) {\n            const [channels] = resolved as [Channel<StreamChatGenerics>[]];\n            results = [...channels];\n          } else if (searchForUsers) {\n            const [{ users }] = resolved as [UsersAPIResponse<StreamChatGenerics>];\n            results = [...users.filter((u) => u.id !== client.user?.id)];\n          }\n        }\n      } catch (error) {\n        console.error(error);\n      }\n      setSearching(false);\n\n      if (!shouldIgnoreQueryResults.current) {\n        setResults(results);\n      } else {\n        shouldIgnoreQueryResults.current = false;\n      }\n\n      searchQueryPromiseInProgress.current = false;\n    },\n    [client, searchForChannels, searchForUsers, searchQueryParams],\n  );\n\n  // eslint-disable-next-line react-hooks/exhaustive-deps\n  const scheduleGetChannels = useCallback(\n    debounce(getChannels, searchDebounceIntervalMs),\n    [getChannels, searchDebounceIntervalMs],\n  );\n\n  const onSearch = useCallback(\n    (event: React.ChangeEvent<HTMLInputElement>) => {\n      event.preventDefault();\n      if (disabled) return;\n\n      if (searchFunction) {\n        searchFunction(\n          {\n            setQuery,\n            setResults,\n            setSearching,\n          },\n          event,\n        );\n      } else if (!searchForChannels && !searchForUsers) {\n        return;\n      } else if (event.target.value) {\n        setSearching(true);\n        setQuery(event.target.value);\n        scheduleGetChannels(event.target.value);\n      } else if (!event.target.value) {\n        clearState();\n        scheduleGetChannels.cancel();\n      }\n      onSearchCallback?.(event);\n    },\n    [\n      clearState,\n      disabled,\n      scheduleGetChannels,\n      onSearchCallback,\n      searchForChannels,\n      searchForUsers,\n      searchFunction,\n    ],\n  );\n\n  return {\n    activateSearch,\n    clearState,\n    exitSearch,\n    inputIsFocused,\n    inputRef,\n    onSearch,\n    query,\n    results,\n    searchBarRef,\n    searching,\n    selectResult,\n  };\n};\n", "import type { Channel, UserResponse } from 'stream-chat';\n\nimport type { DefaultStreamChatGenerics } from '../../types/types';\n\nexport type ChannelOrUserResponse<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Channel<StreamChatGenerics> | UserResponse<StreamChatGenerics>;\n\nexport const isChannel = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  output: ChannelOrUserResponse<StreamChatGenerics>,\n): output is Channel<StreamChatGenerics> =>\n  (output as Channel<StreamChatGenerics>).cid != null;\n", "import React, {\n  MouseEventHandler,\n  PropsWithChildren,\n  useCallback,\n  useEffect,\n  useRef,\n  useState,\n} from 'react';\nimport clsx from 'clsx';\n\nimport {\n  MenuIcon as DefaultMenuIcon,\n  SearchIcon as DefaultSearchInputIcon,\n  ReturnIcon,\n  XIcon,\n} from './icons';\nimport { SearchInput as DefaultSearchInput, SearchInputProps } from './SearchInput';\n\nexport type AppMenuProps = {\n  close?: () => void;\n};\n\ntype SearchBarButtonProps = {\n  className?: string;\n  onClick?: MouseEventHandler<HTMLButtonElement>;\n};\n\nconst SearchBarButton = ({\n  children,\n  className,\n  onClick,\n}: PropsWithChildren<SearchBarButtonProps>) => (\n  <button\n    className={clsx('str-chat__channel-search-bar-button', className)}\n    data-testid='search-bar-button'\n    onClick={onClick}\n  >\n    {children}\n  </button>\n);\n\nexport type SearchBarController = {\n  /** Called on search input focus */\n  activateSearch: () => void;\n  /** Clears the search state, removes focus from the search input */\n  exitSearch: () => void;\n  /** Flag determining whether the search input is focused */\n  inputIsFocused: boolean;\n  /** Ref object for the input wrapper in the SearchBar */\n  searchBarRef: React.RefObject<HTMLDivElement | null>;\n};\n\nexport type AdditionalSearchBarProps = {\n  /** Application menu to be displayed  when clicked on MenuIcon */\n  AppMenu?: React.ComponentType<AppMenuProps>;\n  /** Custom icon component used to clear the input value on click. Displayed within the search input wrapper. */\n  ClearInputIcon?: React.ComponentType;\n  /** Custom icon component used to terminate the search UI session on click. */\n  ExitSearchIcon?: React.ComponentType;\n  /** Custom icon component used to invoke context menu. */\n  MenuIcon?: React.ComponentType;\n  /** Custom UI component to display the search text input */\n  SearchInput?: React.ComponentType<SearchInputProps>;\n  /** Custom icon used to indicate search input. */\n  SearchInputIcon?: React.ComponentType;\n};\n\nexport type SearchBarProps = AdditionalSearchBarProps &\n  SearchBarController &\n  SearchInputProps;\n\n// todo: add context menu control logic\nexport const SearchBar = (props: SearchBarProps) => {\n  const {\n    activateSearch,\n    AppMenu,\n    ClearInputIcon = XIcon,\n    exitSearch,\n    ExitSearchIcon = ReturnIcon,\n    inputIsFocused,\n    MenuIcon = DefaultMenuIcon,\n    searchBarRef,\n    SearchInput = DefaultSearchInput,\n    SearchInputIcon = DefaultSearchInputIcon,\n    ...inputProps\n  } = props;\n\n  const [menuIsOpen, setMenuIsOpen] = useState(false);\n  const appMenuRef = useRef<HTMLDivElement | null>(null);\n\n  useEffect(() => {\n    if (!appMenuRef.current) return;\n\n    const handleKeyDown = (event: KeyboardEvent) => {\n      if (menuIsOpen && event.key === 'Escape') {\n        setMenuIsOpen(false);\n      }\n    };\n\n    const clickListener = (e: MouseEvent) => {\n      if (\n        !(e.target instanceof HTMLElement) ||\n        !menuIsOpen ||\n        appMenuRef.current?.contains(e.target)\n      )\n        return;\n      setMenuIsOpen(false);\n    };\n\n    document.addEventListener('keydown', handleKeyDown);\n    document.addEventListener('click', clickListener);\n    return () => {\n      document.removeEventListener('keydown', handleKeyDown);\n      document.removeEventListener('click', clickListener);\n    };\n  }, [menuIsOpen]);\n\n  useEffect(() => {\n    if (!props.inputRef.current) return;\n    const input = props.inputRef.current;\n    const handleFocus = () => {\n      activateSearch();\n    };\n\n    const handleBlur = (e: Event) => {\n      e.stopPropagation(); // handle blur/focus state with React state\n    };\n\n    input.addEventListener('focus', handleFocus);\n    input.addEventListener('blur', handleBlur);\n    return () => {\n      input.removeEventListener('focus', handleFocus);\n      input.removeEventListener('blur', handleBlur);\n    };\n  }, [activateSearch, props.inputRef]);\n\n  const handleClearClick = useCallback(() => {\n    exitSearch();\n    inputProps.inputRef.current?.focus();\n  }, [exitSearch, inputProps.inputRef]);\n\n  const closeAppMenu = useCallback(() => setMenuIsOpen(false), []);\n\n  return (\n    <div\n      className='str-chat__channel-search-bar'\n      data-testid='search-bar'\n      ref={searchBarRef}\n    >\n      {inputIsFocused ? (\n        <SearchBarButton\n          className='str-chat__channel-search-bar-button--exit-search'\n          onClick={exitSearch}\n        >\n          <ExitSearchIcon />\n        </SearchBarButton>\n      ) : AppMenu ? (\n        <SearchBarButton\n          className='str-chat__channel-search-bar-button--menu'\n          onClick={() => setMenuIsOpen((prev) => !prev)}\n        >\n          <MenuIcon />\n        </SearchBarButton>\n      ) : null}\n\n      <div\n        className={clsx(\n          'str-chat__channel-search-input--wrapper',\n          inputProps.query && 'str-chat__channel-search-input--wrapper-active',\n        )}\n      >\n        <div className='str-chat__channel-search-input--icon'>\n          <SearchInputIcon />\n        </div>\n        <SearchInput {...inputProps} />\n        <button\n          className='str-chat__channel-search-input--clear-button'\n          data-testid='clear-input-button'\n          disabled={!inputProps.query}\n          onClick={handleClearClick}\n        >\n          <ClearInputIcon />\n        </button>\n      </div>\n      {menuIsOpen && AppMenu && (\n        <div ref={appMenuRef}>\n          <AppMenu close={closeAppMenu} />\n        </div>\n      )}\n    </div>\n  );\n};\n", "import React from 'react';\nimport type { IconProps } from '../../types/types';\n\nexport const MenuIcon = () => (\n  <svg\n    data-testid='menu-icon'\n    fill='none'\n    height='24'\n    viewBox='0 0 24 24'\n    width='24'\n    xmlns='http://www.w3.org/2000/svg'\n  >\n    <path\n      clipRule='evenodd'\n      d='M3 8V6H21V8H3ZM3 13H21V11H3V13ZM3 18H21V16H3V18Z'\n      fill='black'\n      fillRule='evenodd'\n    />\n  </svg>\n);\n\nexport const ReturnIcon = () => (\n  <svg\n    data-testid='return-icon'\n    fill='none'\n    height='20'\n    viewBox='0 0 22 22'\n    width='20'\n    xmlns='http://www.w3.org/2000/svg'\n  >\n    <path\n      d='M21.6668 9.66666V12.3333H5.6529L12.9932 19.6736L11.1076 21.5592L0.54834 11L11.1076 0.440765L12.9932 2.32638L5.6529 9.66666H21.6668Z'\n      fill='#080707'\n    />\n  </svg>\n);\n\nexport const XIcon = () => (\n  <svg\n    fill='none'\n    height='14'\n    viewBox='0 0 14 14'\n    width='14'\n    xmlns='http://www.w3.org/2000/svg'\n  >\n    <path\n      d='M14 1.41L12.59 0L7 5.59L1.41 0L0 1.41L5.59 7L0 12.59L1.41 14L7 8.41L12.59 14L14 12.59L8.41 7L14 1.41Z'\n      fill='#747881'\n    />\n  </svg>\n);\n\nexport const SearchIcon = ({ className }: IconProps) => (\n  <svg\n    className={className}\n    fill='none'\n    height='18'\n    viewBox='0 0 18 18'\n    width='18'\n    xmlns='http://www.w3.org/2000/svg'\n  >\n    <path\n      d='M12.7549 11.255H11.9649L11.6849 10.985C12.6649 9.845 13.2549 8.365 13.2549 6.755C13.2549 3.165 10.3449 0.255005 6.75488 0.255005C3.16488 0.255005 0.254883 3.165 0.254883 6.755C0.254883 10.345 3.16488 13.255 6.75488 13.255C8.36488 13.255 9.84488 12.665 10.9849 11.685L11.2549 11.965V12.755L16.2549 17.745L17.7449 16.255L12.7549 11.255ZM6.75488 11.255C4.26488 11.255 2.25488 9.245 2.25488 6.755C2.25488 4.26501 4.26488 2.255 6.75488 2.255C9.24488 2.255 11.2549 4.26501 11.2549 6.755C11.2549 9.245 9.24488 11.255 6.75488 11.255Z'\n      fill='#747881'\n    />\n  </svg>\n);\n", "import React from 'react';\n\nimport { useTranslationContext } from '../../context/TranslationContext';\n\nexport type SearchInputController = {\n  /** Clears the channel search state */\n  clearState: () => void;\n  inputRef: React.RefObject<HTMLInputElement | null>;\n  /** Search input change handler */\n  onSearch: React.ChangeEventHandler<HTMLInputElement>;\n  /** Current search string */\n  query: string;\n};\n\nexport type AdditionalSearchInputProps = {\n  /** Sets the input element into disabled state */\n  disabled?: boolean;\n  /** Custom placeholder text to be displayed in the search input */\n  placeholder?: string;\n};\n\nexport type SearchInputProps = AdditionalSearchInputProps & SearchInputController;\n\nexport const SearchInput = (props: SearchInputProps) => {\n  const { disabled, inputRef, onSearch, placeholder, query } = props;\n\n  const { t } = useTranslationContext('SearchInput');\n\n  return (\n    <input\n      className='str-chat__channel-search-input'\n      data-testid='search-input'\n      disabled={disabled}\n      onChange={onSearch}\n      placeholder={placeholder ?? t('Search')}\n      ref={inputRef}\n      type='text'\n      value={query}\n    />\n  );\n};\n", "import React, { PropsWithChildren, useCallback, useEffect, useState } from 'react';\nimport clsx from 'clsx';\n\nimport { SearchIcon } from './icons';\nimport { ChannelPreview } from '../ChannelPreview';\nimport { ChannelOrUserResponse, isChannel } from './utils';\nimport { Avatar } from '../Avatar';\n\nimport { useTranslationContext } from '../../context';\n\nimport type { DefaultStreamChatGenerics } from '../../types/types';\n\nconst DefaultSearchEmpty = () => {\n  const { t } = useTranslationContext('SearchResults');\n  return (\n    <div aria-live='polite' className='str-chat__channel-search-container-empty'>\n      <SearchIcon />\n      {t<string>('No results found')}\n    </div>\n  );\n};\n\nexport type SearchResultsHeaderProps<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Pick<SearchResultsProps<StreamChatGenerics>, 'results'>;\n\nconst DefaultSearchResultsHeader = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n  results,\n}: SearchResultsHeaderProps<StreamChatGenerics>) => {\n  const { t } = useTranslationContext('SearchResultsHeader');\n  return (\n    <div\n      className='str-chat__channel-search-results-header'\n      data-testid='channel-search-results-header'\n    >\n      {t<string>('searchResultsCount', {\n        count: results.length,\n      })}\n    </div>\n  );\n};\n\nexport type SearchResultsListProps<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Required<\n  Pick<\n    SearchResultsProps<StreamChatGenerics>,\n    'results' | 'SearchResultItem' | 'selectResult'\n  >\n> & {\n  focusedUser?: number;\n};\n\nconst DefaultSearchResultsList = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  props: SearchResultsListProps<StreamChatGenerics>,\n) => {\n  const { focusedUser, results, SearchResultItem, selectResult } = props;\n\n  return (\n    <>\n      {results.map((result, index) => (\n        <SearchResultItem\n          focusedUser={focusedUser}\n          index={index}\n          key={index}\n          result={result}\n          selectResult={selectResult}\n        />\n      ))}\n    </>\n  );\n};\n\n// fixme: index and focusedUser should be changed for className with default value \"str-chat__channel-search-result--focused\"\nexport type SearchResultItemProps<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Pick<SearchResultsProps<StreamChatGenerics>, 'selectResult'> & {\n  index: number;\n  result: ChannelOrUserResponse<StreamChatGenerics>;\n  focusedUser?: number;\n};\n\nconst DefaultSearchResultItem = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  props: SearchResultItemProps<StreamChatGenerics>,\n) => {\n  const { focusedUser, index, result, selectResult } = props;\n  const focused = focusedUser === index;\n\n  const className = clsx(\n    'str-chat__channel-search-result',\n    focused && 'str-chat__channel-search-result--focused',\n  );\n\n  if (isChannel(result)) {\n    const channel = result;\n\n    return (\n      <ChannelPreview\n        channel={channel}\n        className={className}\n        onSelect={() => selectResult(channel)}\n      />\n    );\n  } else {\n    return (\n      <button\n        aria-label={`Select User Channel: ${result.name || ''}`}\n        className={className}\n        data-testid='channel-search-result-user'\n        onClick={() => selectResult(result)}\n        role='option'\n      >\n        <Avatar\n          className='str-chat__avatar--channel-preview'\n          image={result.image}\n          name={result.name || result.id}\n          user={result}\n        />\n        <div className='str-chat__channel-search-result--display-name'>\n          {result.name || result.id}\n        </div>\n      </button>\n    );\n  }\n};\n\nconst ResultsContainer = ({\n  children,\n  popupResults,\n}: PropsWithChildren<{ popupResults?: boolean }>) => {\n  const { t } = useTranslationContext('ResultsContainer');\n\n  return (\n    <div\n      aria-label={t('aria/Channel search results')}\n      className={clsx(\n        `str-chat__channel-search-result-list`,\n        popupResults ? 'popup' : 'inline',\n      )}\n    >\n      {children}\n    </div>\n  );\n};\n\nexport type SearchResultsController<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n  results: Array<ChannelOrUserResponse<StreamChatGenerics>>;\n  searching: boolean;\n  selectResult: (\n    result: ChannelOrUserResponse<StreamChatGenerics>,\n  ) => Promise<void> | void;\n};\n\nexport type AdditionalSearchResultsProps<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n  /** Display search results as an absolutely positioned popup, defaults to false and shows inline */\n  popupResults?: boolean;\n  /** Custom UI component to display empty search results */\n  SearchEmpty?: React.ComponentType;\n  /** Custom UI component to display the search loading state */\n  SearchLoading?: React.ComponentType;\n  /** Custom UI component to display a search result list item, defaults to and accepts the same props as: [DefaultSearchResultItem](https://github.com/GetStream/stream-chat-react/blob/master/src/components/ChannelSearch/SearchResults.tsx) */\n  SearchResultItem?: React.ComponentType<SearchResultItemProps<StreamChatGenerics>>;\n  /** Custom UI component to display the search results header */\n  SearchResultsHeader?: React.ComponentType;\n  /** Custom UI component to display all the search results, defaults to and accepts the same props as: [DefaultSearchResultsList](https://github.com/GetStream/stream-chat-react/blob/master/src/components/ChannelSearch/SearchResults.tsx)  */\n  SearchResultsList?: React.ComponentType<SearchResultsListProps<StreamChatGenerics>>;\n};\n\nexport type SearchResultsProps<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = AdditionalSearchResultsProps<StreamChatGenerics> &\n  SearchResultsController<StreamChatGenerics>;\n\nexport const SearchResults = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  props: SearchResultsProps<StreamChatGenerics>,\n) => {\n  const {\n    popupResults,\n    results,\n    SearchEmpty = DefaultSearchEmpty,\n    searching,\n    SearchLoading,\n    SearchResultItem = DefaultSearchResultItem,\n    SearchResultsHeader = DefaultSearchResultsHeader,\n    SearchResultsList = DefaultSearchResultsList,\n    selectResult,\n  } = props;\n\n  const { t } = useTranslationContext('SearchResults');\n  const [focusedResult, setFocusedResult] = useState<number>();\n\n  const handleKeyDown = useCallback(\n    (event: KeyboardEvent) => {\n      if (event.key === 'ArrowUp') {\n        setFocusedResult((prevFocused) => {\n          if (prevFocused === undefined) return 0;\n          return prevFocused === 0 ? results.length - 1 : prevFocused - 1;\n        });\n      }\n\n      if (event.key === 'ArrowDown') {\n        setFocusedResult((prevFocused) => {\n          if (prevFocused === undefined) return 0;\n          return prevFocused === results.length - 1 ? 0 : prevFocused + 1;\n        });\n      }\n\n      if (event.key === 'Enter') {\n        event.preventDefault();\n        setFocusedResult((prevFocused) => {\n          if (typeof prevFocused !== 'undefined') {\n            selectResult(results[prevFocused]);\n            return undefined;\n          }\n          return prevFocused;\n        });\n      }\n    },\n    [results, selectResult],\n  );\n\n  useEffect(() => {\n    document.addEventListener('keydown', handleKeyDown, false);\n    return () => document.removeEventListener('keydown', handleKeyDown);\n  }, [handleKeyDown]);\n\n  if (searching) {\n    return (\n      <ResultsContainer popupResults={popupResults}>\n        {SearchLoading ? (\n          <SearchLoading />\n        ) : (\n          <div\n            className='str-chat__channel-search-container-searching'\n            data-testid='search-in-progress-indicator'\n          >\n            {t<string>('Searching...')}\n          </div>\n        )}\n      </ResultsContainer>\n    );\n  }\n\n  if (!results.length) {\n    return (\n      <ResultsContainer popupResults={popupResults}>\n        <SearchEmpty />\n      </ResultsContainer>\n    );\n  }\n\n  return (\n    <ResultsContainer popupResults={popupResults}>\n      <SearchResultsHeader results={results} />\n      <SearchResultsList\n        focusedUser={focusedResult}\n        results={results}\n        SearchResultItem={SearchResultItem}\n        selectResult={selectResult}\n      />\n    </ResultsContainer>\n  );\n};\n", "import React from 'react';\n\nimport { useTranslationContext } from '../../context/TranslationContext';\nimport { ChatBubble } from './icons';\n\nexport type EmptyStateIndicatorProps = {\n  /** List Type: channel | message */\n  listType?: 'channel' | 'message' | 'thread';\n};\n\nconst UnMemoizedEmptyStateIndicator = (props: EmptyStateIndicatorProps) => {\n  const { listType } = props;\n\n  const { t } = useTranslationContext('EmptyStateIndicator');\n\n  if (listType === 'thread') return null;\n\n  if (listType === 'channel') {\n    const text = t<string>('You have no channels currently');\n    return (\n      <>\n        <div className='str-chat__channel-list-empty'>\n          <ChatBubble />\n          <p role='listitem'>{text}</p>\n        </div>\n      </>\n    );\n  }\n\n  if (listType === 'message') {\n    const text = t<string>('No chats here yet\u2026');\n    return (\n      <div className='str-chat__empty-channel'>\n        <ChatBubble />\n        <p className='str-chat__empty-channel-text' role='listitem'>\n          {text}\n        </p>\n      </div>\n    );\n  }\n\n  return <p>No items exist</p>;\n};\n\nexport const EmptyStateIndicator = React.memo(\n  UnMemoizedEmptyStateIndicator,\n) as typeof UnMemoizedEmptyStateIndicator;\n", "import React from 'react';\n\nexport const ChatBubble = () => (\n  <svg\n    data-testid='chat-bubble'\n    fill='none'\n    height='96'\n    viewBox='0 0 136 136'\n    width='96'\n    xmlns='http://www.w3.org/2000/svg'\n  >\n    <path\n      d='M106 24.5H30C24.775 24.5 20.5 28.775 20.5 34V119.5L39.5 100.5H106C111.225 100.5 115.5 96.225 115.5 91V34C115.5 28.775 111.225 24.5 106 24.5ZM106 91H39.5L30 100.5V34H106V91Z'\n      fill='#B4B7BB'\n    />\n  </svg>\n);\n", "import React, { PropsWithChildren, useEffect } from 'react';\n\nimport {\n  LoadMoreButton as DefaultLoadMoreButton,\n  LoadMoreButtonProps,\n} from './LoadMoreButton';\nimport type { PaginatorProps } from '../../types/types';\nimport { deprecationAndReplacementWarning } from '../../utils/deprecationWarning';\n\nexport type LoadMorePaginatorProps = PaginatorProps & {\n  /** A UI button component that handles pagination logic */\n  LoadMoreButton?: React.ComponentType<LoadMoreButtonProps>;\n  /** indicates if the `LoadMoreButton` should be displayed at the top of the list of channels instead of the bottom of the list (the default) */\n  reverse?: boolean;\n};\n\nexport const UnMemoizedLoadMorePaginator = (\n  props: PropsWithChildren<LoadMorePaginatorProps>,\n) => {\n  const {\n    children,\n    hasNextPage,\n    isLoading,\n    LoadMoreButton = DefaultLoadMoreButton,\n    loadNextPage,\n    refreshing,\n    reverse,\n  } = props;\n  const loadingState = typeof isLoading !== 'undefined' ? isLoading : refreshing;\n\n  useEffect(() => {\n    deprecationAndReplacementWarning(\n      [[{ refreshing }, { isLoading }]],\n      'LoadMorePaginator',\n    );\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, []);\n\n  return (\n    <>\n      {!reverse && children}\n      {hasNextPage && <LoadMoreButton isLoading={loadingState} onClick={loadNextPage} />}\n      {reverse && children}\n    </>\n  );\n};\n\nexport const LoadMorePaginator = React.memo(\n  UnMemoizedLoadMorePaginator,\n) as typeof UnMemoizedLoadMorePaginator;\n", "import React, { PropsWithChildren, useEffect } from 'react';\nimport { LoadingIndicator } from '../Loading';\nimport { deprecationAndReplacementWarning } from '../../utils/deprecationWarning';\nimport { useTranslationContext } from '../../context';\n\nexport type LoadMoreButtonProps = {\n  /** onClick handler load more button. Pagination logic should be executed in this handler. */\n  onClick: React.MouseEventHandler<HTMLButtonElement>;\n  /** indicates whether a loading request is in progress */\n  isLoading?: boolean;\n  /**\n   * @desc If true, LoadingIndicator is displayed instead of button\n   * @deprecated Use loading prop instead of refreshing. Planned for removal: https://github.com/GetStream/stream-chat-react/issues/1804\n   */\n  refreshing?: boolean;\n};\n\nconst UnMemoizedLoadMoreButton = ({\n  children,\n  isLoading,\n  onClick,\n  refreshing,\n}: PropsWithChildren<LoadMoreButtonProps>) => {\n  const { t } = useTranslationContext('UnMemoizedLoadMoreButton');\n\n  const childrenOrDefaultString = children ?? t<string>('Load more');\n  const loading = typeof isLoading !== 'undefined' ? isLoading : refreshing;\n\n  useEffect(() => {\n    deprecationAndReplacementWarning([[{ refreshing }, { isLoading }]], 'LoadMoreButton');\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, []);\n\n  return (\n    <div className='str-chat__load-more-button'>\n      <button\n        aria-label={t('aria/Load More Channels')}\n        className='str-chat__load-more-button__button str-chat__cta-button'\n        data-testid='load-more-button'\n        disabled={loading}\n        onClick={onClick}\n      >\n        {loading ? <LoadingIndicator /> : childrenOrDefaultString}\n      </button>\n    </div>\n  );\n};\n\nexport const LoadMoreButton = React.memo(\n  UnMemoizedLoadMoreButton,\n) as typeof UnMemoizedLoadMoreButton;\n", "export const deprecationAndReplacementWarning = <P extends Record<string, unknown>[][]>(\n  pairs: P,\n  component: string,\n) => {\n  pairs.forEach((data) => {\n    const [[oldName, oldValue], [newName, newValue]] = [\n      Object.entries(data[0])[0],\n      Object.entries(data[1])[0],\n    ];\n\n    if (\n      (typeof oldValue !== 'undefined' && typeof newValue === 'undefined') ||\n      (typeof oldValue !== 'undefined' && typeof newValue !== 'undefined')\n    ) {\n      console.warn(\n        `[Deprecation notice (${component})]: prefer using prop ${newName} instead of ${oldName}`,\n      );\n    }\n  });\n};\n", "import { useEffect } from 'react';\n\nimport { useChatContext } from '../../../context/ChatContext';\n\nimport type { Channel, Event } from 'stream-chat';\n\nimport type { DefaultStreamChatGenerics } from '../../../types/types';\n\nexport const useChannelDeletedListener = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  setChannels: React.Dispatch<React.SetStateAction<Array<Channel<StreamChatGenerics>>>>,\n  customHandler?: (\n    setChannels: React.Dispatch<React.SetStateAction<Array<Channel<StreamChatGenerics>>>>,\n    event: Event<StreamChatGenerics>,\n  ) => void,\n) => {\n  const { client } = useChatContext<StreamChatGenerics>('useChannelDeletedListener');\n\n  useEffect(() => {\n    const handleEvent = (event: Event<StreamChatGenerics>) => {\n      if (customHandler && typeof customHandler === 'function') {\n        customHandler(setChannels, event);\n      } else {\n        setChannels((channels) => {\n          const channelIndex = channels.findIndex((channel) => channel.cid === event.cid);\n\n          if (channelIndex < 0) return [...channels];\n\n          // Remove the deleted channel from the list\n          channels.splice(channelIndex, 1);\n\n          return [...channels];\n        });\n      }\n    };\n\n    client.on('channel.deleted', handleEvent);\n\n    return () => {\n      client.off('channel.deleted', handleEvent);\n    };\n  }, [client, customHandler, setChannels]);\n};\n", "import { useEffect } from 'react';\n\nimport { useChatContext } from '../../../context/ChatContext';\n\nimport type { Channel, Event } from 'stream-chat';\n\nimport type { DefaultStreamChatGenerics } from '../../../types/types';\n\nexport const useChannelHiddenListener = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  setChannels: React.Dispatch<React.SetStateAction<Array<Channel<StreamChatGenerics>>>>,\n  customHandler?: (\n    setChannels: React.Dispatch<React.SetStateAction<Array<Channel<StreamChatGenerics>>>>,\n    event: Event<StreamChatGenerics>,\n  ) => void,\n) => {\n  const { client } = useChatContext<StreamChatGenerics>('useChannelHiddenListener');\n\n  useEffect(() => {\n    const handleEvent = (event: Event<StreamChatGenerics>) => {\n      if (customHandler && typeof customHandler === 'function') {\n        customHandler(setChannels, event);\n      } else {\n        setChannels((channels) => {\n          const channelIndex = channels.findIndex((channel) => channel.cid === event.cid);\n          if (channelIndex < 0) return [...channels];\n\n          // Remove the hidden channel from the list.s\n          channels.splice(channelIndex, 1);\n\n          return [...channels];\n        });\n      }\n    };\n\n    client.on('channel.hidden', handleEvent);\n\n    return () => {\n      client.off('channel.hidden', handleEvent);\n    };\n  }, [client, customHandler, setChannels]);\n};\n", "import { useEffect } from 'react';\n\nimport { useChatContext } from '../../../context/ChatContext';\n\nimport type { Channel, Event } from 'stream-chat';\n\nimport type { DefaultStreamChatGenerics } from '../../../types/types';\n\nexport const useChannelTruncatedListener = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  setChannels: React.Dispatch<React.SetStateAction<Array<Channel<StreamChatGenerics>>>>,\n  customHandler?: (\n    setChannels: React.Dispatch<React.SetStateAction<Array<Channel<StreamChatGenerics>>>>,\n    event: Event<StreamChatGenerics>,\n  ) => void,\n  forceUpdate?: () => void,\n) => {\n  const { client } = useChatContext<StreamChatGenerics>('useChannelTruncatedListener');\n\n  useEffect(() => {\n    const handleEvent = (event: Event<StreamChatGenerics>) => {\n      setChannels((channels) => [...channels]);\n\n      if (customHandler && typeof customHandler === 'function') {\n        customHandler(setChannels, event);\n      }\n      if (forceUpdate) {\n        forceUpdate();\n      }\n    };\n\n    client.on('channel.truncated', handleEvent);\n\n    return () => {\n      client.off('channel.truncated', handleEvent);\n    };\n  }, [client, customHandler, forceUpdate, setChannels]);\n};\n", "import { useEffect } from 'react';\n\nimport { useChatContext } from '../../../context/ChatContext';\n\nimport type { Channel, Event } from 'stream-chat';\n\nimport type { DefaultStreamChatGenerics } from '../../../types/types';\n\nexport const useChannelUpdatedListener = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  setChannels: React.Dispatch<React.SetStateAction<Array<Channel<StreamChatGenerics>>>>,\n  customHandler?: (\n    setChannels: React.Dispatch<React.SetStateAction<Array<Channel<StreamChatGenerics>>>>,\n    event: Event<StreamChatGenerics>,\n  ) => void,\n  forceUpdate?: () => void,\n) => {\n  const { client } = useChatContext<StreamChatGenerics>('useChannelUpdatedListener');\n\n  useEffect(() => {\n    const handleEvent = (event: Event<StreamChatGenerics>) => {\n      setChannels((channels) => {\n        const channelIndex = channels.findIndex(\n          (channel) => channel.cid === event.channel?.cid,\n        );\n\n        if (channelIndex > -1 && event.channel) {\n          const newChannels = channels;\n          newChannels[channelIndex].data = {\n            ...event.channel,\n            hidden: event.channel?.hidden ?? newChannels[channelIndex].data?.hidden,\n            own_capabilities:\n              event.channel?.own_capabilities ??\n              newChannels[channelIndex].data?.own_capabilities,\n          };\n\n          return [...newChannels];\n        }\n\n        return channels;\n      });\n      if (forceUpdate) {\n        forceUpdate();\n      }\n      if (customHandler && typeof customHandler === 'function') {\n        customHandler(setChannels, event);\n      }\n    };\n\n    client.on('channel.updated', handleEvent);\n\n    return () => {\n      client.off('channel.updated', handleEvent);\n    };\n  }, [client, customHandler, forceUpdate, setChannels]);\n};\n", "import { useEffect } from 'react';\nimport uniqBy from 'lodash.uniqby';\n\nimport { getChannel } from '../../../utils/getChannel';\n\nimport { useChatContext } from '../../../context/ChatContext';\n\nimport type { Channel, Event } from 'stream-chat';\n\nimport type { DefaultStreamChatGenerics } from '../../../types/types';\n\nexport const useChannelVisibleListener = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  setChannels: React.Dispatch<React.SetStateAction<Array<Channel<StreamChatGenerics>>>>,\n  customHandler?: (\n    setChannels: React.Dispatch<React.SetStateAction<Array<Channel<StreamChatGenerics>>>>,\n    event: Event<StreamChatGenerics>,\n  ) => void,\n) => {\n  const { client } = useChatContext<StreamChatGenerics>('useChannelVisibleListener');\n\n  useEffect(() => {\n    const handleEvent = async (event: Event<StreamChatGenerics>) => {\n      if (customHandler && typeof customHandler === 'function') {\n        customHandler(setChannels, event);\n      } else if (event.type && event.channel_type && event.channel_id) {\n        const channel = await getChannel({\n          client,\n          id: event.channel_id,\n          type: event.channel_type,\n        });\n        setChannels((channels) => uniqBy([channel, ...channels], 'cid'));\n      }\n    };\n\n    client.on('channel.visible', handleEvent);\n\n    return () => {\n      client.off('channel.visible', handleEvent);\n    };\n  }, [client, customHandler, setChannels]);\n};\n", "import { useEffect } from 'react';\nimport uniqBy from 'lodash.uniqby';\n\nimport { moveChannelUp } from '../utils';\n\nimport { useChatContext } from '../../../context/ChatContext';\n\nimport type { Channel, Event } from 'stream-chat';\n\nimport type { DefaultStreamChatGenerics } from '../../../types/types';\n\nexport const useMessageNewListener = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  setChannels: React.Dispatch<React.SetStateAction<Array<Channel<StreamChatGenerics>>>>,\n  customHandler?: (\n    setChannels: React.Dispatch<React.SetStateAction<Array<Channel<StreamChatGenerics>>>>,\n    event: Event<StreamChatGenerics>,\n  ) => void,\n  lockChannelOrder = false,\n  allowNewMessagesFromUnfilteredChannels = true,\n) => {\n  const { client } = useChatContext<StreamChatGenerics>('useMessageNewListener');\n\n  useEffect(() => {\n    const handleEvent = (event: Event<StreamChatGenerics>) => {\n      if (customHandler && typeof customHandler === 'function') {\n        customHandler(setChannels, event);\n      } else {\n        setChannels((channels) => {\n          const channelInList =\n            channels.filter((channel) => channel.cid === event.cid).length > 0;\n\n          if (\n            !channelInList &&\n            allowNewMessagesFromUnfilteredChannels &&\n            event.channel_type\n          ) {\n            const channel = client.channel(event.channel_type, event.channel_id);\n            return uniqBy([channel, ...channels], 'cid');\n          }\n\n          if (!lockChannelOrder) return moveChannelUp({ channels, cid: event.cid || '' });\n\n          return channels;\n        });\n      }\n    };\n\n    client.on('message.new', handleEvent);\n\n    return () => {\n      client.off('message.new', handleEvent);\n    };\n  }, [\n    allowNewMessagesFromUnfilteredChannels,\n    client,\n    customHandler,\n    lockChannelOrder,\n    setChannels,\n  ]);\n};\n", "import { useEffect } from 'react';\nimport uniqBy from 'lodash.uniqby';\n\nimport { getChannel } from '../../../utils/getChannel';\n\nimport { useChatContext } from '../../../context/ChatContext';\n\nimport type { Channel, Event } from 'stream-chat';\n\nimport type { DefaultStreamChatGenerics } from '../../../types/types';\n\nexport const useNotificationAddedToChannelListener = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  setChannels: React.Dispatch<React.SetStateAction<Array<Channel<StreamChatGenerics>>>>,\n  customHandler?: (\n    setChannels: React.Dispatch<React.SetStateAction<Array<Channel<StreamChatGenerics>>>>,\n    event: Event<StreamChatGenerics>,\n  ) => void,\n  allowNewMessagesFromUnfilteredChannels = true,\n) => {\n  const { client } = useChatContext<StreamChatGenerics>(\n    'useNotificationAddedToChannelListener',\n  );\n\n  useEffect(() => {\n    const handleEvent = async (event: Event<StreamChatGenerics>) => {\n      if (customHandler && typeof customHandler === 'function') {\n        customHandler(setChannels, event);\n      } else if (allowNewMessagesFromUnfilteredChannels && event.channel?.type) {\n        const channel = await getChannel({\n          client,\n          id: event.channel.id,\n          members: event.channel.members?.reduce<string[]>((acc, { user, user_id }) => {\n            const userId = user_id || user?.id;\n            if (userId) {\n              acc.push(userId);\n            }\n            return acc;\n          }, []),\n          type: event.channel.type,\n        });\n        setChannels((channels) => uniqBy([channel, ...channels], 'cid'));\n      }\n    };\n\n    client.on('notification.added_to_channel', handleEvent);\n\n    return () => {\n      client.off('notification.added_to_channel', handleEvent);\n    };\n  }, [allowNewMessagesFromUnfilteredChannels, client, customHandler, setChannels]);\n};\n", "import { useEffect } from 'react';\nimport uniqBy from 'lodash.uniqby';\n\nimport { getChannel } from '../../../utils/getChannel';\n\nimport { useChatContext } from '../../../context/ChatContext';\n\nimport type { Channel, Event } from 'stream-chat';\n\nimport type { DefaultStreamChatGenerics } from '../../../types/types';\n\nexport const useNotificationMessageNewListener = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  setChannels: React.Dispatch<React.SetStateAction<Array<Channel<StreamChatGenerics>>>>,\n  customHandler?: (\n    setChannels: React.Dispatch<React.SetStateAction<Array<Channel<StreamChatGenerics>>>>,\n    event: Event<StreamChatGenerics>,\n  ) => void,\n  allowNewMessagesFromUnfilteredChannels = true,\n) => {\n  const { client } = useChatContext<StreamChatGenerics>(\n    'useNotificationMessageNewListener',\n  );\n\n  useEffect(() => {\n    const handleEvent = async (event: Event<StreamChatGenerics>) => {\n      if (customHandler && typeof customHandler === 'function') {\n        customHandler(setChannels, event);\n      } else if (allowNewMessagesFromUnfilteredChannels && event.channel?.type) {\n        const channel = await getChannel({\n          client,\n          id: event.channel.id,\n          type: event.channel.type,\n        });\n        setChannels((channels) => uniqBy([channel, ...channels], 'cid'));\n      }\n    };\n\n    client.on('notification.message_new', handleEvent);\n\n    return () => {\n      client.off('notification.message_new', handleEvent);\n    };\n  }, [allowNewMessagesFromUnfilteredChannels, client, customHandler, setChannels]);\n};\n", "import { useEffect } from 'react';\n\nimport { useChatContext } from '../../../context/ChatContext';\n\nimport type { Channel, Event } from 'stream-chat';\n\nimport type { DefaultStreamChatGenerics } from '../../../types/types';\n\nexport const useNotificationRemovedFromChannelListener = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  setChannels: React.Dispatch<React.SetStateAction<Array<Channel<StreamChatGenerics>>>>,\n  customHandler?: (\n    setChannels: React.Dispatch<React.SetStateAction<Array<Channel<StreamChatGenerics>>>>,\n    event: Event<StreamChatGenerics>,\n  ) => void,\n) => {\n  const { client } = useChatContext<StreamChatGenerics>(\n    'useNotificationRemovedFromChannelListener',\n  );\n\n  useEffect(() => {\n    const handleEvent = (event: Event<StreamChatGenerics>) => {\n      if (customHandler && typeof customHandler === 'function') {\n        customHandler(setChannels, event);\n      } else {\n        setChannels((channels) =>\n          channels.filter((channel) => channel.cid !== event.channel?.cid),\n        );\n      }\n    };\n\n    client.on('notification.removed_from_channel', handleEvent);\n\n    return () => {\n      client.off('notification.removed_from_channel', handleEvent);\n    };\n  }, [client, customHandler, setChannels]);\n};\n", "import { useEffect } from 'react';\n\nimport { useChatContext } from '../../../context/ChatContext';\n\nimport type { Channel, Event } from 'stream-chat';\n\nimport type { DefaultStreamChatGenerics } from '../../../types/types';\n\nexport const useUserPresenceChangedListener = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  setChannels: React.Dispatch<React.SetStateAction<Array<Channel<StreamChatGenerics>>>>,\n) => {\n  const { client } = useChatContext<StreamChatGenerics>('useUserPresenceChangedListener');\n\n  useEffect(() => {\n    const handleEvent = (event: Event<StreamChatGenerics>) => {\n      setChannels((channels) => {\n        const newChannels = channels.map((channel) => {\n          if (!event.user?.id || !channel.state.members[event.user.id]) {\n            return channel;\n          }\n\n          const newChannel = channel; // dumb workaround for linter\n          newChannel.state.members[event.user.id].user = event.user;\n\n          return newChannel;\n        });\n\n        return [...newChannels];\n      });\n    };\n\n    client.on('user.presence.changed', handleEvent);\n\n    return () => {\n      client.off('user.presence.changed', handleEvent);\n    };\n  }, [client, setChannels]);\n};\n", "import { useCallback } from 'react';\nimport { useSyncExternalStore } from 'use-sync-external-store/shim';\nimport type { Channel, EventTypes, ExtendableGenerics } from 'stream-chat';\n\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nconst noop = () => {};\n\nexport function useSelectedChannelState<SCG extends ExtendableGenerics, O>(_: {\n  channel: Channel<SCG>;\n  selector: (channel: Channel<SCG>) => O;\n  stateChangeEventKeys?: EventTypes[];\n}): O;\nexport function useSelectedChannelState<SCG extends ExtendableGenerics, O>(_: {\n  selector: (channel: Channel<SCG>) => O;\n  channel?: Channel<SCG> | undefined;\n  stateChangeEventKeys?: EventTypes[];\n}): O | undefined;\nexport function useSelectedChannelState<SCG extends ExtendableGenerics, O>({\n  channel,\n  selector,\n  stateChangeEventKeys = ['all'],\n}: {\n  selector: (channel: Channel<SCG>) => O;\n  channel?: Channel<SCG>;\n  stateChangeEventKeys?: EventTypes[];\n}): O | undefined {\n  const subscribe = useCallback(\n    (onStoreChange: (value: O) => void) => {\n      if (!channel) return noop;\n\n      const subscriptions = stateChangeEventKeys.map((et) =>\n        channel.on(et, () => {\n          onStoreChange(selector(channel));\n        }),\n      );\n\n      return () => subscriptions.forEach((subscription) => subscription.unsubscribe());\n    },\n    [channel, selector, stateChangeEventKeys],\n  );\n\n  const getSnapshot = useCallback(() => {\n    if (!channel) return undefined;\n\n    return selector(channel);\n  }, [channel, selector]);\n\n  return useSyncExternalStore(subscribe, getSnapshot);\n}\n", "import type {\n  Channel,\n  ChannelMemberResponse,\n  EventTypes,\n  ExtendableGenerics,\n} from 'stream-chat';\nimport { useSelectedChannelState } from './useSelectedChannelState';\n\nconst selector = <SCG extends ExtendableGenerics>(c: Channel<SCG>) => c.state.membership;\nconst keys: EventTypes[] = ['member.updated'];\n\nexport function useChannelMembershipState<SCG extends ExtendableGenerics>(\n  channel: Channel<SCG>,\n): ChannelMemberResponse<SCG>;\nexport function useChannelMembershipState<SCG extends ExtendableGenerics>(\n  channel?: Channel<SCG> | undefined,\n): ChannelMemberResponse<SCG> | undefined;\nexport function useChannelMembershipState<SCG extends ExtendableGenerics>(\n  channel?: Channel<SCG>,\n) {\n  return useSelectedChannelState({ channel, selector, stateChangeEventKeys: keys });\n}\n", "import React from 'react';\nimport { ComponentPropsWithoutRef } from 'react';\n\nexport const Icon = {\n  ArchiveBox: (props: ComponentPropsWithoutRef<'svg'>) => (\n    <svg\n      className='str-chat__icon str-chat__icon--archive-box'\n      fill='currentColor'\n      viewBox='0 0 512 512'\n      xmlns='http://www.w3.org/2000/svg'\n      {...props}\n    >\n      <path d='M32 32l448 0c17.7 0 32 14.3 32 32l0 32c0 17.7-14.3 32-32 32L32 128C14.3 128 0 113.7 0 96L0 64C0 46.3 14.3 32 32 32zm0 128l448 0 0 256c0 35.3-28.7 64-64 64L96 480c-35.3 0-64-28.7-64-64l0-256zm128 80c0 8.8 7.2 16 16 16l160 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-160 0c-8.8 0-16 7.2-16 16z' />\n    </svg>\n  ),\n  Pin: (props: ComponentPropsWithoutRef<'svg'>) => (\n    <svg\n      className='str-chat__icon str-chat__icon--pin'\n      fill='currentColor'\n      viewBox='0 0 384 512'\n      xmlns='http://www.w3.org/2000/svg'\n      {...props}\n    >\n      <path d='M32 32C32 14.3 46.3 0 64 0L320 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-29.5 0 11.4 148.2c36.7 19.9 65.7 53.2 79.5 94.7l1 3c3.3 9.8 1.6 20.5-4.4 28.8s-15.7 13.3-26 13.3L32 352c-10.3 0-19.9-4.9-26-13.3s-7.7-19.1-4.4-28.8l1-3c13.8-41.5 42.8-74.8 79.5-94.7L93.5 64 64 64C46.3 64 32 49.7 32 32zM160 384l64 0 0 96c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-96z' />\n    </svg>\n  ),\n};\n", "import { useEffect, useState } from 'react';\n\nimport { useChatContext } from '../../../context/ChatContext';\n\nimport type { Channel } from 'stream-chat';\n\nimport type { DefaultStreamChatGenerics } from '../../../types/types';\n\nexport const useIsChannelMuted = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  channel: Channel<StreamChatGenerics>,\n) => {\n  const { client } = useChatContext<StreamChatGenerics>('useIsChannelMuted');\n\n  const [muted, setMuted] = useState(channel.muteStatus());\n\n  useEffect(() => {\n    const handleEvent = () => setMuted(channel.muteStatus());\n\n    client.on('notification.channel_mutes_updated', handleEvent);\n    return () => client.off('notification.channel_mutes_updated', handleEvent);\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [muted]);\n\n  return muted;\n};\n", "import { useEffect, useState } from 'react';\nimport type { Channel } from 'stream-chat';\n\nimport { getDisplayImage, getDisplayTitle, getGroupChannelDisplayInfo } from '../utils';\nimport { useChatContext } from '../../../context';\n\nimport type { DefaultStreamChatGenerics } from '../../../types/types';\n\nexport type ChannelPreviewInfoParams<\n  StreamChatGenerics extends DefaultStreamChatGenerics,\n> = {\n  channel: Channel<StreamChatGenerics>;\n  /** Manually set the image to render, defaults to the Channel image */\n  overrideImage?: string;\n  /** Set title manually */\n  overrideTitle?: string;\n};\n\nexport const useChannelPreviewInfo = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  props: ChannelPreviewInfoParams<StreamChatGenerics>,\n) => {\n  const { channel, overrideImage, overrideTitle } = props;\n\n  const { client } = useChatContext<StreamChatGenerics>('useChannelPreviewInfo');\n  const [displayTitle, setDisplayTitle] = useState(\n    () => overrideTitle || getDisplayTitle(channel, client.user),\n  );\n  const [displayImage, setDisplayImage] = useState(\n    () => overrideImage || getDisplayImage(channel, client.user),\n  );\n\n  const [groupChannelDisplayInfo, setGroupDisplayChannelInfo] = useState<\n    ReturnType<typeof getGroupChannelDisplayInfo>\n  >(() => getGroupChannelDisplayInfo(channel));\n\n  useEffect(() => {\n    if (overrideTitle && overrideImage) return;\n\n    const updateInfo = () => {\n      if (!overrideTitle) setDisplayTitle(getDisplayTitle(channel, client.user));\n      if (!overrideImage) {\n        setDisplayImage(getDisplayImage(channel, client.user));\n        setGroupDisplayChannelInfo(getGroupChannelDisplayInfo(channel));\n      }\n    };\n\n    updateInfo();\n\n    client.on('user.updated', updateInfo);\n    return () => {\n      client.off('user.updated', updateInfo);\n    };\n  }, [channel, channel.data, client, overrideImage, overrideTitle]);\n\n  return {\n    displayImage: overrideImage || displayImage,\n    displayTitle: overrideTitle || displayTitle,\n    groupChannelDisplayInfo,\n  };\n};\n", "import React, { ReactNode } from 'react';\n\nimport ReactMarkdown from 'react-markdown';\n\nimport type { Channel, PollVote, TranslationLanguages, UserResponse } from 'stream-chat';\n\nimport type { TranslationContextValue } from '../../context/TranslationContext';\n\nimport type { DefaultStreamChatGenerics } from '../../types/types';\nimport { ChatContextValue } from '../../context';\n\nexport const renderPreviewText = (text: string) => (\n  <ReactMarkdown skipHtml>{text}</ReactMarkdown>\n);\n\nconst getLatestPollVote = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  latestVotesByOption: Record<string, PollVote<StreamChatGenerics>[]>,\n) => {\n  let latestVote: PollVote<StreamChatGenerics> | undefined;\n  for (const optionVotes of Object.values(latestVotesByOption)) {\n    optionVotes.forEach((vote) => {\n      if (latestVote && new Date(latestVote.updated_at) >= new Date(vote.created_at))\n        return;\n      latestVote = vote;\n    });\n  }\n\n  return latestVote;\n};\n\nexport const getLatestMessagePreview = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  channel: Channel<StreamChatGenerics>,\n  t: TranslationContextValue['t'],\n  userLanguage: TranslationContextValue['userLanguage'] = 'en',\n  isMessageAIGenerated?: ChatContextValue<StreamChatGenerics>['isMessageAIGenerated'],\n): ReactNode => {\n  const latestMessage =\n    channel.state.latestMessages[channel.state.latestMessages.length - 1];\n\n  const previewTextToRender =\n    latestMessage?.i18n?.[`${userLanguage}_text` as `${TranslationLanguages}_text`] ||\n    latestMessage?.text;\n  const poll = latestMessage?.poll;\n\n  if (!latestMessage) {\n    return t<string>('Nothing yet...');\n  }\n\n  if (latestMessage.deleted_at) {\n    return t<string>('Message deleted');\n  }\n\n  if (poll) {\n    if (!poll.vote_count) {\n      const createdBy =\n        poll.created_by?.id === channel.getClient().userID\n          ? t<string>('You')\n          : (poll.created_by?.name ?? t<string>('Poll'));\n      return t<string>('\uD83D\uDCCA {{createdBy}} created: {{ pollName}}', {\n        createdBy,\n        pollName: poll.name,\n      });\n    } else {\n      const latestVote = getLatestPollVote<StreamChatGenerics>(\n        poll.latest_votes_by_option as Record<string, PollVote<StreamChatGenerics>[]>,\n      );\n      const option =\n        latestVote && poll.options.find((opt) => opt.id === latestVote.option_id);\n\n      if (option && latestVote) {\n        return t<string>('\uD83D\uDCCA {{votedBy}} voted: {{pollOptionText}}', {\n          pollOptionText: option.text,\n          votedBy:\n            latestVote?.user?.id === channel.getClient().userID\n              ? t<string>('You')\n              : (latestVote.user?.name ?? t<string>('Poll')),\n        });\n      }\n    }\n  }\n\n  if (previewTextToRender) {\n    return isMessageAIGenerated?.(latestMessage)\n      ? previewTextToRender\n      : renderPreviewText(previewTextToRender);\n  }\n\n  if (latestMessage.command) {\n    return `/${latestMessage.command}`;\n  }\n\n  if (latestMessage.attachments?.length) {\n    return t<string>('\uD83C\uDFD9 Attachment...');\n  }\n\n  return t<string>('Empty message...');\n};\n\nexport type GroupChannelDisplayInfo = { image?: string; name?: string }[];\n\nexport const getGroupChannelDisplayInfo = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  channel: Channel<StreamChatGenerics>,\n): GroupChannelDisplayInfo | undefined => {\n  const members = Object.values(channel.state.members);\n  if (members.length <= 2) return;\n\n  const info: GroupChannelDisplayInfo = [];\n  for (let i = 0; i < members.length; i++) {\n    const { user } = members[i];\n    if (!user?.name && !user?.image) continue;\n    info.push({ image: user.image, name: user.name });\n    if (info.length === 4) break;\n  }\n  return info;\n};\n\nconst getChannelDisplayInfo = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  info: 'name' | 'image',\n  channel: Channel<StreamChatGenerics>,\n  currentUser?: UserResponse<StreamChatGenerics>,\n) => {\n  if (channel.data?.[info]) return channel.data[info];\n  const members = Object.values(channel.state.members);\n  if (members.length !== 2) return;\n  const otherMember = members.find((member) => member.user?.id !== currentUser?.id);\n  return otherMember?.user?.[info];\n};\n\nexport const getDisplayTitle = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  channel: Channel<StreamChatGenerics>,\n  currentUser?: UserResponse<StreamChatGenerics>,\n) => getChannelDisplayInfo('name', channel, currentUser);\n\nexport const getDisplayImage = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  channel: Channel<StreamChatGenerics>,\n  currentUser?: UserResponse<StreamChatGenerics>,\n) => getChannelDisplayInfo('image', channel, currentUser);\n", "import { useCallback, useEffect, useState } from 'react';\nimport type { Channel, Event } from 'stream-chat';\n\nimport { useChatContext } from '../../../context';\n\nimport type { DefaultStreamChatGenerics } from '../../../types/types';\nimport type { StreamMessage } from '../../../context';\n\nexport enum MessageDeliveryStatus {\n  DELIVERED = 'delivered',\n  READ = 'read',\n}\n\ntype UseMessageStatusParamsChannelPreviewProps<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n  channel: Channel<StreamChatGenerics>;\n  /** The last message received in a channel */\n  lastMessage?: StreamMessage<StreamChatGenerics>;\n};\n\nexport const useMessageDeliveryStatus = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n  channel,\n  lastMessage,\n}: UseMessageStatusParamsChannelPreviewProps<StreamChatGenerics>) => {\n  const { client } = useChatContext();\n  const [messageDeliveryStatus, setMessageDeliveryStatus] = useState<\n    MessageDeliveryStatus | undefined\n  >();\n\n  const isOwnMessage = useCallback(\n    (message?: StreamMessage<StreamChatGenerics>) =>\n      client.user && message?.user?.id === client.user.id,\n    [client],\n  );\n\n  useEffect(() => {\n    const lastMessageIsOwn = isOwnMessage(lastMessage);\n    if (!lastMessage?.created_at || !lastMessageIsOwn) return;\n\n    const lastMessageCreatedAtDate =\n      typeof lastMessage.created_at === 'string'\n        ? new Date(lastMessage.created_at)\n        : lastMessage.created_at;\n\n    const channelReadByOthersAfterLastMessageUpdate = Object.values(\n      channel.state.read,\n    ).some(({ last_read: channelLastMarkedReadDate, user }) => {\n      const ignoreOwnReadStatus = client.user && user.id !== client.user.id;\n      return ignoreOwnReadStatus && lastMessageCreatedAtDate < channelLastMarkedReadDate;\n    });\n\n    setMessageDeliveryStatus(\n      channelReadByOthersAfterLastMessageUpdate\n        ? MessageDeliveryStatus.READ\n        : MessageDeliveryStatus.DELIVERED,\n    );\n  }, [channel.state.read, client, isOwnMessage, lastMessage]);\n\n  useEffect(() => {\n    const handleMessageNew = (event: Event<StreamChatGenerics>) => {\n      // the last message is not mine, so do not show the delivery status\n      if (!isOwnMessage(event.message)) {\n        return setMessageDeliveryStatus(undefined);\n      }\n\n      return setMessageDeliveryStatus(MessageDeliveryStatus.DELIVERED);\n    };\n\n    channel.on('message.new', handleMessageNew);\n\n    return () => {\n      channel.off('message.new', handleMessageNew);\n    };\n  }, [channel, client, isOwnMessage]);\n\n  useEffect(() => {\n    if (!isOwnMessage(lastMessage)) return;\n    const handleMarkRead = (event: Event<StreamChatGenerics>) => {\n      if (event.user?.id !== client.user?.id)\n        setMessageDeliveryStatus(MessageDeliveryStatus.READ);\n    };\n    channel.on('message.read', handleMarkRead);\n\n    return () => {\n      channel.off('message.read', handleMarkRead);\n    };\n  }, [channel, client, lastMessage, isOwnMessage]);\n\n  return {\n    messageDeliveryStatus,\n  };\n};\n", "import React, { createContext, useContext, useEffect, useMemo, useState } from 'react';\n\nimport { ThreadProvider } from '../Threads';\nimport { Icon } from '../Threads/icons';\nimport { UnreadCountBadge } from '../Threads/UnreadCountBadge';\nimport { useChatContext } from '../../context';\nimport { useStateStore } from '../../store';\n\nimport type { PropsWithChildren } from 'react';\nimport type { Thread, ThreadManagerState } from 'stream-chat';\nimport clsx from 'clsx';\n\ntype ChatView = 'channels' | 'threads';\n\ntype ChatViewContextValue = {\n  activeChatView: ChatView;\n  setActiveChatView: (cv: ChatViewContextValue['activeChatView']) => void;\n};\n\nconst ChatViewContext = createContext<ChatViewContextValue>({\n  activeChatView: 'channels',\n  setActiveChatView: () => undefined,\n});\n\nexport const ChatView = ({ children }: PropsWithChildren) => {\n  const [activeChatView, setActiveChatView] =\n    useState<ChatViewContextValue['activeChatView']>('channels');\n\n  const { theme } = useChatContext();\n\n  const value = useMemo(() => ({ activeChatView, setActiveChatView }), [activeChatView]);\n\n  return (\n    <ChatViewContext.Provider value={value}>\n      <div className={clsx('str-chat', theme, 'str-chat__chat-view')}>{children}</div>\n    </ChatViewContext.Provider>\n  );\n};\n\nconst ChannelsView = ({ children }: PropsWithChildren) => {\n  const { activeChatView } = useContext(ChatViewContext);\n\n  if (activeChatView !== 'channels') return null;\n\n  return <div className='str-chat__chat-view__channels'>{children}</div>;\n};\n\nexport type ThreadsViewContextValue = {\n  activeThread: Thread | undefined;\n  setActiveThread: (cv: ThreadsViewContextValue['activeThread']) => void;\n};\n\nconst ThreadsViewContext = createContext<ThreadsViewContextValue>({\n  activeThread: undefined,\n  setActiveThread: () => undefined,\n});\n\nexport const useThreadsViewContext = () => useContext(ThreadsViewContext);\n\nconst ThreadsView = ({ children }: PropsWithChildren) => {\n  const { activeChatView } = useContext(ChatViewContext);\n  const [activeThread, setActiveThread] =\n    useState<ThreadsViewContextValue['activeThread']>(undefined);\n\n  const value = useMemo(() => ({ activeThread, setActiveThread }), [activeThread]);\n\n  if (activeChatView !== 'threads') return null;\n\n  return (\n    <ThreadsViewContext.Provider value={value}>\n      <div className='str-chat__chat-view__threads'>{children}</div>\n    </ThreadsViewContext.Provider>\n  );\n};\n\n// thread business logic that's impossible to keep within client but encapsulated for ease of use\nexport const useActiveThread = ({ activeThread }: { activeThread?: Thread }) => {\n  useEffect(() => {\n    if (!activeThread) return;\n\n    const handleVisibilityChange = () => {\n      if (document.visibilityState === 'visible' && document.hasFocus()) {\n        activeThread.activate();\n      }\n      if (document.visibilityState === 'hidden' || !document.hasFocus()) {\n        activeThread.deactivate();\n      }\n    };\n\n    handleVisibilityChange();\n\n    window.addEventListener('focus', handleVisibilityChange);\n    window.addEventListener('blur', handleVisibilityChange);\n    return () => {\n      activeThread.deactivate();\n      window.addEventListener('blur', handleVisibilityChange);\n      window.removeEventListener('focus', handleVisibilityChange);\n    };\n  }, [activeThread]);\n};\n\n// ThreadList under View.Threads context, will access setting function and on item click will set activeThread\n// which can be accessed for the ease of use by ThreadAdapter which forwards it to required ThreadProvider\n// ThreadList can easily live without this context and click handler can be overriden, ThreadAdapter is then no longer needed\n/**\n * // this setup still works\n * const MyCustomComponent = () => {\n *  const [activeThread, setActiveThread] = useState();\n *\n *  return <>\n *    // simplified\n *    <ThreadList onItemPointerDown={setActiveThread} />\n *    <ThreadProvider thread={activeThread}>\n *      <Thread />\n *    </ThreadProvider>\n *  </>\n * }\n *\n */\nconst ThreadAdapter = ({ children }: PropsWithChildren) => {\n  const { activeThread } = useThreadsViewContext();\n\n  useActiveThread({ activeThread });\n\n  return <ThreadProvider thread={activeThread}>{children}</ThreadProvider>;\n};\n\nconst selector = ({ unreadThreadCount }: ThreadManagerState) => ({\n  unreadThreadCount,\n});\n\nconst ChatViewSelector = () => {\n  const { client } = useChatContext();\n  const { unreadThreadCount } = useStateStore(client.threads.state, selector);\n\n  const { activeChatView, setActiveChatView } = useContext(ChatViewContext);\n\n  return (\n    <div className='str-chat__chat-view__selector'>\n      <button\n        aria-selected={activeChatView === 'channels'}\n        className='str-chat__chat-view__selector-button'\n        onPointerDown={() => setActiveChatView('channels')}\n        role='tab'\n      >\n        <Icon.MessageBubbleEmpty />\n        <div className='str-chat__chat-view__selector-button-text'>Channels</div>\n      </button>\n      <button\n        aria-selected={activeChatView === 'threads'}\n        className='str-chat__chat-view__selector-button'\n        onPointerDown={() => setActiveChatView('threads')}\n        role='tab'\n      >\n        <UnreadCountBadge count={unreadThreadCount} position='top-right'>\n          <Icon.MessageBubble />\n        </UnreadCountBadge>\n        <div className='str-chat__chat-view__selector-button-text'>Threads</div>\n      </button>\n    </div>\n  );\n};\n\nChatView.Channels = ChannelsView;\nChatView.Threads = ThreadsView;\nChatView.ThreadAdapter = ThreadAdapter;\nChatView.Selector = ChatViewSelector;\n", "import React from 'react';\nimport { Icon } from '../icons';\n\nexport const ThreadListEmptyPlaceholder = () => (\n  <div className='str-chat__thread-list-empty-placeholder'>\n    <Icon.MessageBubble />\n    {/* TODO: translate */}\n    No threads here yet...\n  </div>\n);\n", "import React from 'react';\n\nimport type { ThreadManagerState } from 'stream-chat';\n\nimport { Icon } from '../icons';\nimport { useChatContext } from '../../../context';\nimport { useStateStore } from '../../../store';\n\nconst selector = (nextValue: ThreadManagerState) => ({\n  unseenThreadIds: nextValue.unseenThreadIds,\n});\n\nexport const ThreadListUnseenThreadsBanner = () => {\n  const { client } = useChatContext();\n  const { unseenThreadIds } = useStateStore(client.threads.state, selector);\n\n  if (!unseenThreadIds.length) return null;\n\n  return (\n    <div className='str-chat__unseen-threads-banner'>\n      {/* TODO: translate */}\n      {unseenThreadIds.length} unread threads\n      <button\n        className='str-chat__unseen-threads-banner__button'\n        onClick={() => client.threads.reload()}\n      >\n        <Icon.Reload />\n      </button>\n    </div>\n  );\n};\n", "import React from 'react';\n\nimport type { ThreadManagerState } from 'stream-chat';\n\nimport { LoadingIndicator as DefaultLoadingIndicator } from '../../Loading';\nimport { useChatContext, useComponentContext } from '../../../context';\nimport { useStateStore } from '../../../store';\n\nconst selector = (nextValue: ThreadManagerState) => ({\n  isLoadingNext: nextValue.pagination.isLoadingNext,\n});\n\nexport const ThreadListLoadingIndicator = () => {\n  const { LoadingIndicator = DefaultLoadingIndicator } = useComponentContext();\n  const { client } = useChatContext();\n  const { isLoadingNext } = useStateStore(client.threads.state, selector);\n\n  if (!isLoadingNext) return null;\n\n  return (\n    <div className='str-chat__thread-list-loading-indicator'>\n      <LoadingIndicator />\n    </div>\n  );\n};\n", "import {\n  RetrySendMessage,\n  useChannelActionContext,\n} from '../../../context/ChannelActionContext';\n\nimport type { DefaultStreamChatGenerics } from '../../../types/types';\n\nexport const useRetryHandler = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  customRetrySendMessage?: RetrySendMessage<StreamChatGenerics>,\n): RetrySendMessage<StreamChatGenerics> => {\n  const { retrySendMessage: contextRetrySendMessage } =\n    useChannelActionContext<StreamChatGenerics>('useRetryHandler');\n\n  const retrySendMessage = customRetrySendMessage || contextRetrySendMessage;\n\n  return async (message) => {\n    if (message) {\n      await retrySendMessage(message);\n    }\n  };\n};\n", "import type { User } from 'stream-chat';\n\nimport type { ReactEventHandler } from '../types';\n\nimport type { StreamMessage } from '../../../context/ChannelStateContext';\n\nimport type { DefaultStreamChatGenerics } from '../../../types/types';\n\nexport type UserEventHandler<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = (event: React.BaseSyntheticEvent, user: User<StreamChatGenerics>) => void;\n\nexport const useUserHandler = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  message?: StreamMessage<StreamChatGenerics>,\n  eventHandlers?: {\n    onUserClickHandler?: UserEventHandler<StreamChatGenerics>;\n    onUserHoverHandler?: UserEventHandler<StreamChatGenerics>;\n  },\n): {\n  onUserClick: ReactEventHandler;\n  onUserHover: ReactEventHandler;\n} => ({\n  onUserClick: (event) => {\n    if (typeof eventHandlers?.onUserClickHandler !== 'function' || !message?.user) {\n      return;\n    }\n    eventHandlers.onUserClickHandler(event, message.user);\n  },\n  onUserHover: (event) => {\n    if (typeof eventHandlers?.onUserHoverHandler !== 'function' || !message?.user) {\n      return;\n    }\n\n    eventHandlers.onUserHoverHandler(event, message.user);\n  },\n});\n", "import {\n  StreamMessage,\n  useChannelStateContext,\n} from '../../../context/ChannelStateContext';\nimport { useChatContext } from '../../../context/ChatContext';\n\nimport type { DefaultStreamChatGenerics } from '../../../types/types';\n\nexport const useUserRole = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  message: StreamMessage<StreamChatGenerics>,\n  onlySenderCanEdit?: boolean,\n  disableQuotedMessages?: boolean,\n) => {\n  const { channel, channelCapabilities = {} } =\n    useChannelStateContext<StreamChatGenerics>('useUserRole');\n  const { client } = useChatContext<StreamChatGenerics>('useUserRole');\n\n  /**\n   * @deprecated as it relies on `membership.role` check which is already deprecated and shouldn't be used anymore.\n   * `isAdmin` will be removed in future release. See `channelCapabilities`.\n   */\n  const isAdmin =\n    client.user?.role === 'admin' || channel.state.membership.role === 'admin';\n\n  /**\n   * @deprecated as it relies on `membership.role` check which is already deprecated and shouldn't be used anymore.\n   * `isOwner` will be removed in future release. See `channelCapabilities`.\n   */\n  const isOwner = channel.state.membership.role === 'owner';\n\n  /**\n   * @deprecated as it relies on `membership.role` check which is already deprecated and shouldn't be used anymore.\n   * `isModerator` will be removed in future release. See `channelCapabilities`.\n   */\n  const isModerator =\n    client.user?.role === 'channel_moderator' ||\n    channel.state.membership.role === 'channel_moderator' ||\n    channel.state.membership.role === 'moderator' ||\n    channel.state.membership.is_moderator === true ||\n    channel.state.membership.channel_role === 'channel_moderator';\n\n  const isMyMessage = client.userID === message.user?.id;\n\n  const canEdit =\n    !message.poll &&\n    ((!onlySenderCanEdit && channelCapabilities['update-any-message']) ||\n      (isMyMessage && channelCapabilities['update-own-message']));\n\n  const canDelete =\n    channelCapabilities['delete-any-message'] ||\n    (isMyMessage && channelCapabilities['delete-own-message']);\n\n  const canFlag = !isMyMessage && channelCapabilities['flag-message'];\n  const canMarkUnread = channelCapabilities['read-events'];\n  const canMute = !isMyMessage && channelCapabilities['mute-channel'];\n  const canQuote = !disableQuotedMessages && channelCapabilities['quote-message'];\n  const canReact = channelCapabilities['send-reaction'];\n  const canReply = channelCapabilities['send-reply'];\n\n  return {\n    canDelete,\n    canEdit,\n    canFlag,\n    canMarkUnread,\n    canMute,\n    canQuote,\n    canReact,\n    canReply,\n    isAdmin,\n    isModerator,\n    isMyMessage,\n    isOwner,\n  };\n};\n", "import { StreamMessage, useChatContext, useTranslationContext } from '../../../context';\nimport { DefaultStreamChatGenerics } from '../../../types/types';\nimport { ReactionResponse, ReactionSort, StreamChat } from 'stream-chat';\nimport { ReactionType } from '../../Reactions/types';\n\nexport const MAX_MESSAGE_REACTIONS_TO_FETCH = 1000;\n\ntype FetchMessageReactionsNotifications<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n  getErrorNotification?: (message: StreamMessage<StreamChatGenerics>) => string;\n  notify?: (notificationText: string, type: 'success' | 'error') => void;\n};\n\nexport function useReactionsFetcher<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  message: StreamMessage<StreamChatGenerics>,\n  notifications: FetchMessageReactionsNotifications<StreamChatGenerics> = {},\n) {\n  const { client } = useChatContext('useRectionsFetcher');\n  const { t } = useTranslationContext('useReactionFetcher');\n  const { getErrorNotification, notify } = notifications;\n\n  return async (\n    reactionType?: ReactionType<StreamChatGenerics>,\n    sort?: ReactionSort<StreamChatGenerics>,\n  ) => {\n    try {\n      return await fetchMessageReactions(client, message.id, reactionType, sort);\n    } catch (e) {\n      const errorMessage = getErrorNotification?.(message);\n      notify?.(errorMessage || t('Error fetching reactions'), 'error');\n      throw e;\n    }\n  };\n}\n\nasync function fetchMessageReactions<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  client: StreamChat<StreamChatGenerics>,\n  messageId: string,\n  reactionType?: ReactionType<StreamChatGenerics>,\n  sort?: ReactionSort<StreamChatGenerics>,\n) {\n  const reactions: ReactionResponse<StreamChatGenerics>[] = [];\n  const limit = 25;\n  let next: string | undefined;\n  let hasNext = true;\n\n  while (hasNext && reactions.length < MAX_MESSAGE_REACTIONS_TO_FETCH) {\n    const response = await client.queryReactions(\n      messageId,\n      reactionType ? { type: reactionType } : {},\n      sort,\n      { limit, next },\n    );\n\n    reactions.push(...response.reactions);\n    next = response.next;\n    hasNext = Boolean(next);\n  }\n\n  return reactions;\n}\n", "import { useEffect, useRef, useState } from 'react';\n\nimport type { DefaultStreamChatGenerics } from '../../../types/types';\nimport type { StreamedMessageTextProps } from '../StreamedMessageText';\n\nexport type UseMessageTextStreamingProps<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Pick<\n  StreamedMessageTextProps<StreamChatGenerics>,\n  'streamingLetterIntervalMs' | 'renderingLetterCount'\n> & { text: string };\n\nconst DEFAULT_LETTER_INTERVAL = 30;\nconst DEFAULT_RENDERING_LETTER_COUNT = 2;\n\n/**\n * A hook that returns text in a streamed, typewriter fashion. The speed of streaming is\n * configurable.\n * @param {number} [streamingLetterIntervalMs=30] - The timeout between each typing animation in milliseconds.\n * @param {number} [renderingLetterCount=2] - The number of letters to be rendered each time we update.\n * @param {string} text - The text that we want to render in a typewriter fashion.\n * @returns {{ streamedMessageText: string }} - A substring of the text property, up until we've finished rendering the typewriter animation.\n */\nexport const useMessageTextStreaming = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n  renderingLetterCount = DEFAULT_RENDERING_LETTER_COUNT,\n  streamingLetterIntervalMs = DEFAULT_LETTER_INTERVAL,\n  text,\n}: UseMessageTextStreamingProps<StreamChatGenerics>): { streamedMessageText: string } => {\n  const [streamedMessageText, setStreamedMessageText] = useState<string>(text);\n  const textCursor = useRef<number>(text.length);\n\n  useEffect(() => {\n    const textLength = text.length;\n    const interval = setInterval(() => {\n      if (!text || textCursor.current >= textLength) {\n        clearInterval(interval);\n      }\n      const newCursorValue = textCursor.current + renderingLetterCount;\n      const newText = text.substring(0, newCursorValue);\n      textCursor.current += newText.length - textCursor.current;\n      setStreamedMessageText(newText);\n    }, streamingLetterIntervalMs);\n\n    return () => {\n      clearInterval(interval);\n    };\n  }, [streamingLetterIntervalMs, renderingLetterCount, text]);\n\n  return { streamedMessageText };\n};\n", "import React, { useMemo, useState } from 'react';\nimport clsx from 'clsx';\n\nimport { MessageErrorIcon } from './icons';\nimport { MessageBouncePrompt as DefaultMessageBouncePrompt } from '../MessageBounce';\nimport { MessageDeleted as DefaultMessageDeleted } from './MessageDeleted';\nimport { MessageBlocked as DefaultMessageBlocked } from './MessageBlocked';\nimport { MessageOptions as DefaultMessageOptions } from './MessageOptions';\nimport { MessageRepliesCountButton as DefaultMessageRepliesCountButton } from './MessageRepliesCountButton';\nimport { MessageStatus as DefaultMessageStatus } from './MessageStatus';\nimport { MessageText } from './MessageText';\nimport { MessageTimestamp as DefaultMessageTimestamp } from './MessageTimestamp';\nimport {\n  areMessageUIPropsEqual,\n  isMessageBlocked,\n  isMessageBounced,\n  isMessageEdited,\n  messageHasAttachments,\n  messageHasReactions,\n} from './utils';\n\nimport { Avatar as DefaultAvatar } from '../Avatar';\nimport { Attachment as DefaultAttachment } from '../Attachment';\nimport { CUSTOM_MESSAGE_TYPE } from '../../constants/messageTypes';\nimport { EditMessageForm as DefaultEditMessageForm, MessageInput } from '../MessageInput';\nimport { MML } from '../MML';\nimport { Modal } from '../Modal';\nimport { Poll } from '../Poll';\nimport { ReactionsList as DefaultReactionList } from '../Reactions';\nimport { MessageBounceModal } from '../MessageBounce/MessageBounceModal';\nimport { useComponentContext } from '../../context/ComponentContext';\nimport { MessageContextValue, useMessageContext } from '../../context/MessageContext';\n\nimport { useChatContext, useTranslationContext } from '../../context';\nimport { MessageEditedTimestamp } from './MessageEditedTimestamp';\n\nimport type { MessageUIComponentProps } from './types';\nimport type { DefaultStreamChatGenerics } from '../../types/types';\nimport { StreamedMessageText as DefaultStreamedMessageText } from './StreamedMessageText';\n\ntype MessageSimpleWithContextProps<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = MessageContextValue<StreamChatGenerics>;\n\nconst MessageSimpleWithContext = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  props: MessageSimpleWithContextProps<StreamChatGenerics>,\n) => {\n  const {\n    additionalMessageInputProps,\n    clearEditingState,\n    editing,\n    endOfGroup,\n    firstOfGroup,\n    groupedByUser,\n    handleAction,\n    handleOpenThread,\n    handleRetry,\n    highlighted,\n    isMessageAIGenerated,\n    isMyMessage,\n    message,\n    onUserClick,\n    onUserHover,\n    renderText,\n    threadList,\n  } = props;\n  const { client } = useChatContext('MessageSimple');\n  const { t } = useTranslationContext('MessageSimple');\n  const [isBounceDialogOpen, setIsBounceDialogOpen] = useState(false);\n  const [isEditedTimestampOpen, setEditedTimestampOpen] = useState(false);\n\n  const {\n    Attachment = DefaultAttachment,\n    Avatar = DefaultAvatar,\n    EditMessageInput = DefaultEditMessageForm,\n    MessageOptions = DefaultMessageOptions,\n    // TODO: remove this \"passthrough\" in the next\n    // major release and use the new default instead\n    MessageActions = MessageOptions,\n    MessageBlocked = DefaultMessageBlocked,\n    MessageDeleted = DefaultMessageDeleted,\n    MessageBouncePrompt = DefaultMessageBouncePrompt,\n    MessageRepliesCountButton = DefaultMessageRepliesCountButton,\n    MessageStatus = DefaultMessageStatus,\n    MessageTimestamp = DefaultMessageTimestamp,\n    ReactionsList = DefaultReactionList,\n    StreamedMessageText = DefaultStreamedMessageText,\n    PinIndicator,\n  } = useComponentContext<StreamChatGenerics>('MessageSimple');\n\n  const hasAttachment = messageHasAttachments(message);\n  const hasReactions = messageHasReactions(message);\n  const isAIGenerated = useMemo(\n    () => isMessageAIGenerated?.(message),\n    [isMessageAIGenerated, message],\n  );\n\n  if (message.customType === CUSTOM_MESSAGE_TYPE.date) {\n    return null;\n  }\n\n  if (message.deleted_at || message.type === 'deleted') {\n    return <MessageDeleted message={message} />;\n  }\n\n  if (isMessageBlocked(message)) {\n    return <MessageBlocked />;\n  }\n\n  const showMetadata = !groupedByUser || endOfGroup;\n  const showReplyCountButton = !threadList && !!message.reply_count;\n  const allowRetry = message.status === 'failed' && message.errorStatusCode !== 403;\n  const isBounced = isMessageBounced(message);\n  const isEdited = isMessageEdited(message) && !isAIGenerated;\n\n  let handleClick: (() => void) | undefined = undefined;\n\n  if (allowRetry) {\n    handleClick = () => handleRetry(message);\n  } else if (isBounced) {\n    handleClick = () => setIsBounceDialogOpen(true);\n  } else if (isEdited) {\n    handleClick = () => setEditedTimestampOpen((prev) => !prev);\n  }\n\n  const rootClassName = clsx(\n    'str-chat__message str-chat__message-simple',\n    `str-chat__message--${message.type}`,\n    `str-chat__message--${message.status}`,\n    isMyMessage()\n      ? 'str-chat__message--me str-chat__message-simple--me'\n      : 'str-chat__message--other',\n    message.text ? 'str-chat__message--has-text' : 'has-no-text',\n    {\n      'str-chat__message--has-attachment': hasAttachment,\n      'str-chat__message--highlighted': highlighted,\n      'str-chat__message--pinned pinned-message': message.pinned,\n      'str-chat__message--with-reactions': hasReactions,\n      'str-chat__message-send-can-be-retried':\n        message?.status === 'failed' && message?.errorStatusCode !== 403,\n      'str-chat__message-with-thread-link': showReplyCountButton,\n      'str-chat__virtual-message__wrapper--end': endOfGroup,\n      'str-chat__virtual-message__wrapper--first': firstOfGroup,\n      'str-chat__virtual-message__wrapper--group': groupedByUser,\n    },\n  );\n\n  const poll = message.poll_id && client.polls.fromState(message.poll_id);\n\n  return (\n    <>\n      {editing && (\n        <Modal\n          className='str-chat__edit-message-modal'\n          onClose={clearEditingState}\n          open={editing}\n        >\n          <MessageInput\n            clearEditingState={clearEditingState}\n            grow\n            hideSendButton\n            Input={EditMessageInput}\n            message={message}\n            {...additionalMessageInputProps}\n          />\n        </Modal>\n      )}\n      {isBounceDialogOpen && (\n        <MessageBounceModal\n          MessageBouncePrompt={MessageBouncePrompt}\n          onClose={() => setIsBounceDialogOpen(false)}\n          open={isBounceDialogOpen}\n        />\n      )}\n      {\n        <div className={rootClassName} key={message.id}>\n          {PinIndicator && <PinIndicator />}\n          {message.user && (\n            <Avatar\n              image={message.user.image}\n              name={message.user.name || message.user.id}\n              onClick={onUserClick}\n              onMouseOver={onUserHover}\n              user={message.user}\n            />\n          )}\n          <div\n            className={clsx('str-chat__message-inner', {\n              'str-chat__simple-message--error-failed': allowRetry || isBounced,\n            })}\n            data-testid='message-inner'\n            onClick={handleClick}\n            onKeyUp={handleClick}\n          >\n            <MessageActions />\n            <div className='str-chat__message-reactions-host'>\n              {hasReactions && <ReactionsList reverse />}\n            </div>\n            <div className='str-chat__message-bubble'>\n              {poll && <Poll poll={poll} />}\n              {message.attachments?.length && !message.quoted_message ? (\n                <Attachment\n                  actionHandler={handleAction}\n                  attachments={message.attachments}\n                />\n              ) : null}\n              {isAIGenerated ? (\n                <StreamedMessageText message={message} renderText={renderText} />\n              ) : (\n                <MessageText message={message} renderText={renderText} />\n              )}\n              {message.mml && (\n                <MML\n                  actionHandler={handleAction}\n                  align={isMyMessage() ? 'right' : 'left'}\n                  source={message.mml}\n                />\n              )}\n              <MessageErrorIcon />\n            </div>\n          </div>\n          {showReplyCountButton && (\n            <MessageRepliesCountButton\n              onClick={handleOpenThread}\n              reply_count={message.reply_count}\n            />\n          )}\n          {showMetadata && (\n            <div className='str-chat__message-metadata'>\n              <MessageStatus />\n              {!isMyMessage() && !!message.user && (\n                <span className='str-chat__message-simple-name'>\n                  {message.user.name || message.user.id}\n                </span>\n              )}\n              <MessageTimestamp customClass='str-chat__message-simple-timestamp' />\n              {isEdited && (\n                <span className='str-chat__mesage-simple-edited'>\n                  {t<string>('Edited')}\n                </span>\n              )}\n              {isEdited && (\n                <MessageEditedTimestamp calendar open={isEditedTimestampOpen} />\n              )}\n            </div>\n          )}\n        </div>\n      }\n    </>\n  );\n};\n\nconst MemoizedMessageSimple = React.memo(\n  MessageSimpleWithContext,\n  areMessageUIPropsEqual,\n) as typeof MessageSimpleWithContext;\n\n/**\n * The default UI component that renders a message and receives functionality and logic from the MessageContext.\n */\nexport const MessageSimple = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  props: MessageUIComponentProps<StreamChatGenerics>,\n) => {\n  const messageContext = useMessageContext<StreamChatGenerics>('MessageSimple');\n\n  return <MemoizedMessageSimple {...messageContext} {...props} />;\n};\n", "import React from 'react';\n\nimport type { PinIndicatorProps } from './types';\n\nimport type { DefaultStreamChatGenerics, IconProps } from '../../types/types';\n\nexport const ActionsIcon = ({ className = '' }: IconProps) => (\n  <svg\n    className={className}\n    height='4'\n    viewBox='0 0 11 4'\n    width='11'\n    xmlns='http://www.w3.org/2000/svg'\n  >\n    <path\n      d='M1.5 3a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3zm4 0a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3zm4 0a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3z'\n      fillRule='nonzero'\n    />\n  </svg>\n);\n\nexport const ReactionIcon = ({ className = '' }: IconProps) => (\n  <svg\n    className={className}\n    height='12'\n    viewBox='0 0 12 12'\n    width='12'\n    xmlns='http://www.w3.org/2000/svg'\n  >\n    <g clipRule='evenodd' fillRule='evenodd'>\n      <path d='M6 1.2C3.3 1.2 1.2 3.3 1.2 6c0 2.7 2.1 4.8 4.8 4.8 2.7 0 4.8-2.1 4.8-4.8 0-2.7-2.1-4.8-4.8-4.8zM0 6c0-3.3 2.7-6 6-6s6 2.7 6 6-2.7 6-6 6-6-2.7-6-6z' />\n      <path d='M5.4 4.5c0 .5-.4.9-.9.9s-.9-.4-.9-.9.4-.9.9-.9.9.4.9.9zM8.4 4.5c0 .5-.4.9-.9.9s-.9-.4-.9-.9.4-.9.9-.9.9.4.9.9zM3.3 6.7c.3-.2.6-.1.8.1.3.4.8.9 1.5 1 .6.2 1.4.1 2.4-1 .2-.2.6-.3.8 0 .2.2.3.6 0 .8-1.1 1.3-2.4 1.7-3.5 1.5-1-.2-1.8-.9-2.2-1.5-.2-.3-.1-.7.2-.9z' />\n    </g>\n  </svg>\n);\n\nexport const ThreadIcon = ({ className = '' }: IconProps) => (\n  <svg className={className} height='10' width='14' xmlns='http://www.w3.org/2000/svg'>\n    <path\n      d='M8.516 3c4.78 0 4.972 6.5 4.972 6.5-1.6-2.906-2.847-3.184-4.972-3.184v2.872L3.772 4.994 8.516.5V3zM.484 5l4.5-4.237v1.78L2.416 5l2.568 2.125v1.828L.484 5z'\n      fillRule='evenodd'\n    />\n  </svg>\n);\n\nexport const PinIcon = () => (\n  <svg height='13' viewBox='0 0 14 13' width='14' xmlns='http://www.w3.org/2000/svg'>\n    <path\n      d='M13.3518 6.686L6.75251 0.0866699L5.80984 1.02867L6.75318 1.972V1.97334L3.45318 5.272L3.45251 5.27334L2.50984 4.32934L1.56718 5.27267L4.39584 8.10067L0.624512 11.8713L1.56718 12.814L5.33851 9.04334L8.16718 11.8713L9.10984 10.9293L8.16718 9.986L11.4672 6.686L12.4098 7.62867L13.3518 6.686ZM7.22451 9.04267L7.22385 9.04334L4.39584 6.21467L7.69518 2.91467L10.5232 5.74267L7.22451 9.04267Z'\n      fillRule='evenodd'\n    />\n  </svg>\n);\n\nexport const PinIndicator = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n  message,\n  t,\n}: PinIndicatorProps<StreamChatGenerics>) => {\n  if (!message || !t) return null;\n\n  return (\n    <div style={{ alignItems: 'center', display: 'flex' }}>\n      <PinIcon />\n      <div\n        style={{\n          fontSize: '14px',\n          marginBottom: '0',\n          marginLeft: '8px',\n          marginTop: '0',\n        }}\n      >\n        {message.pinned_by\n          ? `${t<string>('Pinned by')} ${message.pinned_by?.name || message.pinned_by?.id}`\n          : t<string>('Message pinned')}\n      </div>\n    </div>\n  );\n};\n\nexport const MessageDeliveredIcon = () => (\n  <svg\n    data-testid='delivered-icon'\n    fill='none'\n    height='24'\n    viewBox='0 0 24 24'\n    width='24'\n    xmlns='http://www.w3.org/2000/svg'\n  >\n    <path\n      clipRule='evenodd'\n      d='M8.9999 16.2L4.7999 12L3.3999 13.4L8.9999 19L20.9999 6.99998L19.5999 5.59998L8.9999 16.2Z'\n      fill='black'\n      fillRule='evenodd'\n    />\n  </svg>\n);\n\nexport const MessageErrorIcon = () => (\n  <div className='str-chat__message-error-icon'>\n    <svg\n      data-testid='error'\n      fill='none'\n      height='24'\n      viewBox='0 0 24 24'\n      width='24'\n      xmlns='http://www.w3.org/2000/svg'\n    >\n      <path\n        d='M12 2C6.48 2 2 6.48 2 12C2 17.52 6.48 22 12 22C17.52 22 22 17.52 22 12C22 6.48 17.52 2 12 2Z'\n        fill='black'\n        id='background'\n      />\n      <path d='M13 17H11V15H13V17ZM13 13H11V7H13V13Z' fill='white' />\n    </svg>\n  </div>\n);\n", "import React, { ComponentType, PropsWithChildren } from 'react';\nimport { Modal, ModalProps } from '../Modal';\nimport { MessageBounceProvider } from '../../context';\nimport { MessageBouncePromptProps } from './MessageBouncePrompt';\n\nexport type MessageBounceModalProps = PropsWithChildren<\n  ModalProps & {\n    MessageBouncePrompt: ComponentType<MessageBouncePromptProps>;\n  }\n>;\n\nexport function MessageBounceModal({\n  MessageBouncePrompt,\n  ...modalProps\n}: MessageBounceModalProps) {\n  return (\n    <Modal className='str-chat__message-bounce-modal' {...modalProps}>\n      <MessageBounceProvider>\n        <MessageBouncePrompt onClose={modalProps.onClose} />\n      </MessageBounceProvider>\n    </Modal>\n  );\n}\n", "import React from 'react';\nimport { useMessageBounceContext, useTranslationContext } from '../../context';\n\nimport type { MouseEventHandler, PropsWithChildren } from 'react';\nimport type { DefaultStreamChatGenerics } from '../../types/types';\nimport type { ModalProps } from '../Modal';\n\nexport type MessageBouncePromptProps = PropsWithChildren<Pick<ModalProps, 'onClose'>>;\n\nexport function MessageBouncePrompt<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({ children, onClose }: MessageBouncePromptProps) {\n  const { handleDelete, handleEdit, handleRetry } =\n    useMessageBounceContext<StreamChatGenerics>('MessageBouncePrompt');\n  const { t } = useTranslationContext('MessageBouncePrompt');\n\n  function createHandler(\n    handle: MouseEventHandler<HTMLButtonElement>,\n  ): MouseEventHandler<HTMLButtonElement> {\n    return (e) => {\n      handle(e);\n      onClose?.(e);\n    };\n  }\n\n  return (\n    <div className='str-chat__message-bounce-prompt' data-testid='message-bounce-prompt'>\n      <div className='str-chat__message-bounce-prompt-header'>\n        {children ?? t<string>('This message did not meet our content guidelines')}\n      </div>\n      <div className='str-chat__message-bounce-actions'>\n        <button\n          className='str-chat__message-bounce-edit'\n          data-testid='message-bounce-edit'\n          onClick={createHandler(handleEdit)}\n          type='button'\n        >\n          {t<string>('Edit Message')}\n        </button>\n        <button\n          className='str-chat__message-bounce-send'\n          data-testid='message-bounce-send'\n          onClick={createHandler(handleRetry)}\n        >\n          {t<string>('Send Anyway')}\n        </button>\n        <button\n          className='str-chat__message-bounce-delete'\n          data-testid='message-bounce-delete'\n          onClick={createHandler(handleDelete)}\n        >\n          {t<string>('Delete')}\n        </button>\n      </div>\n    </div>\n  );\n}\n", "import React from 'react';\n\nimport { useUserRole } from './hooks/useUserRole';\n\nimport { useTranslationContext } from '../../context/TranslationContext';\n\nimport type { StreamMessage } from '../../context/ChannelStateContext';\n\nimport type { DefaultStreamChatGenerics } from '../../types/types';\n\nexport type MessageDeletedProps<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n  message: StreamMessage<StreamChatGenerics>;\n};\n\nexport const MessageDeleted = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  props: MessageDeletedProps<StreamChatGenerics>,\n) => {\n  const { message } = props;\n\n  const { t } = useTranslationContext('MessageDeleted');\n\n  const { isMyMessage } = useUserRole(message);\n\n  const messageClasses = isMyMessage\n    ? 'str-chat__message str-chat__message--me str-chat__message-simple str-chat__message-simple--me'\n    : 'str-chat__message str-chat__message-simple str-chat__message--other';\n\n  return (\n    <div\n      className={`${messageClasses} str-chat__message--deleted ${message.type} `}\n      data-testid={'message-deleted-component'}\n      key={message.id}\n    >\n      <div className='str-chat__message--deleted-inner'>\n        {t<string>('This message was deleted...')}\n      </div>\n    </div>\n  );\n};\n", "import React from 'react';\nimport clsx from 'clsx';\n\nimport { useUserRole } from './hooks/useUserRole';\nimport { useTranslationContext } from '../../context/TranslationContext';\nimport { useMessageContext } from '../../context';\n\nexport const MessageBlocked = () => {\n  const { message } = useMessageContext();\n  const { t } = useTranslationContext('MessageBlocked');\n\n  const { isMyMessage } = useUserRole(message);\n\n  const messageClasses = clsx(\n    'str-chat__message str-chat__message-simple str-chat__message--blocked',\n    message.type,\n    {\n      'str-chat__message--me str-chat__message-simple--me': isMyMessage,\n      'str-chat__message--other': !isMyMessage,\n    },\n  );\n\n  return (\n    <div\n      className={messageClasses}\n      data-testid='message-blocked-component'\n      key={message.id}\n    >\n      <div className='str-chat__message--blocked-inner'>\n        {t<string>('Message was blocked by moderation policies')}\n      </div>\n    </div>\n  );\n};\n", "import clsx from 'clsx';\nimport React from 'react';\n\nimport {\n  ActionsIcon as DefaultActionsIcon,\n  ReactionIcon as DefaultReactionIcon,\n  ThreadIcon as DefaultThreadIcon,\n} from './icons';\nimport { MESSAGE_ACTIONS } from './utils';\nimport { MessageActions } from '../MessageActions';\nimport { useDialogIsOpen } from '../Dialog';\nimport { ReactionSelectorWithButton } from '../Reactions/ReactionSelectorWithButton';\n\nimport { useMessageContext, useTranslationContext } from '../../context';\n\nimport type { DefaultStreamChatGenerics, IconProps } from '../../types/types';\nimport type { MessageContextValue } from '../../context/MessageContext';\n\nexport type MessageOptionsProps<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Partial<Pick<MessageContextValue<StreamChatGenerics>, 'handleOpenThread'>> & {\n  /* Custom component rendering the icon used in message actions button. This button invokes the message actions menu. */\n  ActionsIcon?: React.ComponentType<IconProps>;\n  /* If true, show the `ThreadIcon` and enable navigation into a `Thread` component. */\n  displayReplies?: boolean;\n  /* Custom component rendering the icon used in a button invoking reactions selector for a given message. */\n  ReactionIcon?: React.ComponentType<IconProps>;\n  /* Theme string to be added to CSS class names. */\n  theme?: string;\n  /* Custom component rendering the icon used in a message options button opening thread */\n  ThreadIcon?: React.ComponentType<IconProps>;\n};\n\nconst UnMemoizedMessageOptions = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  props: MessageOptionsProps<StreamChatGenerics>,\n) => {\n  const {\n    ActionsIcon = DefaultActionsIcon,\n    displayReplies = true,\n    handleOpenThread: propHandleOpenThread,\n    ReactionIcon = DefaultReactionIcon,\n    theme = 'simple',\n    ThreadIcon = DefaultThreadIcon,\n  } = props;\n\n  const {\n    getMessageActions,\n    handleOpenThread: contextHandleOpenThread,\n    initialMessage,\n    message,\n    threadList,\n  } = useMessageContext<StreamChatGenerics>('MessageOptions');\n\n  const { t } = useTranslationContext('MessageOptions');\n  const messageActionsDialogIsOpen = useDialogIsOpen(`message-actions--${message.id}`);\n  const reactionSelectorDialogIsOpen = useDialogIsOpen(\n    `reaction-selector--${message.id}`,\n  );\n  const handleOpenThread = propHandleOpenThread || contextHandleOpenThread;\n\n  const messageActions = getMessageActions();\n\n  const shouldShowReactions = messageActions.indexOf(MESSAGE_ACTIONS.react) > -1;\n  const shouldShowReplies =\n    messageActions.indexOf(MESSAGE_ACTIONS.reply) > -1 && displayReplies && !threadList;\n\n  if (\n    !message.type ||\n    message.type === 'error' ||\n    message.type === 'system' ||\n    message.type === 'ephemeral' ||\n    message.status === 'failed' ||\n    message.status === 'sending' ||\n    initialMessage\n  ) {\n    return null;\n  }\n\n  return (\n    <div\n      className={clsx(`str-chat__message-${theme}__actions str-chat__message-options`, {\n        'str-chat__message-options--active':\n          messageActionsDialogIsOpen || reactionSelectorDialogIsOpen,\n      })}\n      data-testid='message-options'\n    >\n      <MessageActions ActionsIcon={ActionsIcon} />\n      {shouldShowReplies && (\n        <button\n          aria-label={t('aria/Open Thread')}\n          className={`str-chat__message-${theme}__actions__action str-chat__message-${theme}__actions__action--thread str-chat__message-reply-in-thread-button`}\n          data-testid='thread-action'\n          onClick={handleOpenThread}\n        >\n          <ThreadIcon className='str-chat__message-action-icon' />\n        </button>\n      )}\n      {shouldShowReactions && <ReactionSelectorWithButton ReactionIcon={ReactionIcon} />}\n    </div>\n  );\n};\n\nexport const MessageOptions = React.memo(\n  UnMemoizedMessageOptions,\n) as typeof UnMemoizedMessageOptions;\n", "import clsx from 'clsx';\nimport React, { PropsWithChildren, useCallback, useRef } from 'react';\n\nimport { MessageActionsBox } from './MessageActionsBox';\n\nimport { DialogAnchor, useDialog, useDialogIsOpen } from '../Dialog';\nimport { ActionsIcon as DefaultActionsIcon } from '../Message/icons';\nimport { isUserMuted, shouldRenderMessageActions } from '../Message/utils';\n\nimport { useChatContext } from '../../context/ChatContext';\nimport { MessageContextValue, useMessageContext } from '../../context/MessageContext';\nimport { useComponentContext, useTranslationContext } from '../../context';\n\nimport type { DefaultStreamChatGenerics, IconProps } from '../../types/types';\n\ntype MessageContextPropsToPick =\n  | 'getMessageActions'\n  | 'handleDelete'\n  | 'handleFlag'\n  | 'handleMarkUnread'\n  | 'handleMute'\n  | 'handlePin'\n  | 'message';\n\nexport type MessageActionsProps<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Partial<Pick<MessageContextValue<StreamChatGenerics>, MessageContextPropsToPick>> & {\n  /* Custom component rendering the icon used in message actions button. This button invokes the message actions menu. */\n  ActionsIcon?: React.ComponentType<IconProps>;\n  /* Custom CSS class to be added to the `div` wrapping the component */\n  customWrapperClass?: string;\n  /* If true, renders the wrapper component as a `span`, not a `div` */\n  inline?: boolean;\n  /* Function that returns whether the message was sent by the connected user */\n  mine?: () => boolean;\n};\n\nexport const MessageActions = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  props: MessageActionsProps<StreamChatGenerics>,\n) => {\n  const {\n    ActionsIcon = DefaultActionsIcon,\n    customWrapperClass = '',\n    getMessageActions: propGetMessageActions,\n    handleDelete: propHandleDelete,\n    handleFlag: propHandleFlag,\n    handleMarkUnread: propHandleMarkUnread,\n    handleMute: propHandleMute,\n    handlePin: propHandlePin,\n    inline,\n    message: propMessage,\n    mine,\n  } = props;\n\n  const { mutes } = useChatContext<StreamChatGenerics>('MessageActions');\n\n  const {\n    customMessageActions,\n    getMessageActions: contextGetMessageActions,\n    handleDelete: contextHandleDelete,\n    handleFlag: contextHandleFlag,\n    handleMarkUnread: contextHandleMarkUnread,\n    handleMute: contextHandleMute,\n    handlePin: contextHandlePin,\n    isMyMessage,\n    message: contextMessage,\n    setEditingState,\n    threadList,\n  } = useMessageContext<StreamChatGenerics>('MessageActions');\n\n  const { CustomMessageActionsList } =\n    useComponentContext<StreamChatGenerics>('MessageActions');\n\n  const { t } = useTranslationContext('MessageActions');\n\n  const getMessageActions = propGetMessageActions || contextGetMessageActions;\n  const handleDelete = propHandleDelete || contextHandleDelete;\n  const handleFlag = propHandleFlag || contextHandleFlag;\n  const handleMarkUnread = propHandleMarkUnread || contextHandleMarkUnread;\n  const handleMute = propHandleMute || contextHandleMute;\n  const handlePin = propHandlePin || contextHandlePin;\n  const message = propMessage || contextMessage;\n  const isMine = mine ? mine() : isMyMessage();\n\n  const isMuted = useCallback(() => isUserMuted(message, mutes), [message, mutes]);\n\n  const dialogId = `message-actions--${message.id}`;\n  const dialog = useDialog({ id: dialogId });\n  const dialogIsOpen = useDialogIsOpen(dialogId);\n\n  const messageActions = getMessageActions();\n\n  const renderMessageActions = shouldRenderMessageActions<StreamChatGenerics>({\n    customMessageActions,\n    CustomMessageActionsList,\n    inThread: threadList,\n    messageActions,\n  });\n\n  const actionsBoxButtonRef = useRef<HTMLButtonElement | null>(null);\n\n  if (!renderMessageActions) return null;\n\n  return (\n    <MessageActionsWrapper\n      customWrapperClass={customWrapperClass}\n      inline={inline}\n      toggleOpen={dialog?.toggle}\n    >\n      <DialogAnchor\n        id={dialogId}\n        placement={isMine ? 'top-end' : 'top-start'}\n        referenceElement={actionsBoxButtonRef.current}\n        trapFocus\n      >\n        <MessageActionsBox\n          getMessageActions={getMessageActions}\n          handleDelete={handleDelete}\n          handleEdit={setEditingState}\n          handleFlag={handleFlag}\n          handleMarkUnread={handleMarkUnread}\n          handleMute={handleMute}\n          handlePin={handlePin}\n          isUserMuted={isMuted}\n          mine={isMine}\n          open={dialogIsOpen}\n        />\n      </DialogAnchor>\n      <button\n        aria-expanded={dialogIsOpen}\n        aria-haspopup='true'\n        aria-label={t('aria/Open Message Actions Menu')}\n        className='str-chat__message-actions-box-button'\n        data-testid='message-actions-toggle-button'\n        ref={actionsBoxButtonRef}\n      >\n        <ActionsIcon className='str-chat__message-action-icon' />\n      </button>\n    </MessageActionsWrapper>\n  );\n};\n\nexport type MessageActionsWrapperProps = {\n  customWrapperClass?: string;\n  inline?: boolean;\n  toggleOpen?: () => void;\n};\n\nexport const MessageActionsWrapper = (\n  props: PropsWithChildren<MessageActionsWrapperProps>,\n) => {\n  const { children, customWrapperClass, inline, toggleOpen } = props;\n\n  const defaultWrapperClass = clsx(\n    'str-chat__message-simple__actions__action',\n    'str-chat__message-simple__actions__action--options',\n    'str-chat__message-actions-container',\n  );\n\n  const wrapperProps = {\n    className: customWrapperClass || defaultWrapperClass,\n    'data-testid': 'message-actions',\n    onClick: toggleOpen,\n  };\n\n  if (inline) return <span {...wrapperProps}>{children}</span>;\n\n  return <div {...wrapperProps}>{children}</div>;\n};\n", "import clsx from 'clsx';\nimport React, { ComponentProps } from 'react';\n\nimport { MESSAGE_ACTIONS } from '../Message/utils';\n\nimport {\n  MessageContextValue,\n  useChannelActionContext,\n  useComponentContext,\n  useMessageContext,\n  useTranslationContext,\n} from '../../context';\n\nimport type { DefaultStreamChatGenerics } from '../../types/types';\n\nimport { CustomMessageActionsList as DefaultCustomMessageActionsList } from './CustomMessageActionsList';\n\ntype PropsDrilledToMessageActionsBox =\n  | 'getMessageActions'\n  | 'handleDelete'\n  | 'handleEdit'\n  | 'handleMarkUnread'\n  | 'handleFlag'\n  | 'handleMute'\n  | 'handlePin';\n\nexport type MessageActionsBoxProps<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Pick<MessageContextValue<StreamChatGenerics>, PropsDrilledToMessageActionsBox> & {\n  isUserMuted: () => boolean;\n  mine: boolean;\n  open: boolean;\n} & ComponentProps<'div'>;\n\nconst UnMemoizedMessageActionsBox = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  props: MessageActionsBoxProps<StreamChatGenerics>,\n) => {\n  const {\n    className,\n    getMessageActions,\n    handleDelete,\n    handleEdit,\n    handleFlag,\n    handleMarkUnread,\n    handleMute,\n    handlePin,\n    isUserMuted,\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    mine,\n    open,\n    ...restDivProps\n  } = props;\n\n  const { CustomMessageActionsList = DefaultCustomMessageActionsList } =\n    useComponentContext<StreamChatGenerics>('MessageActionsBox');\n  const { setQuotedMessage } =\n    useChannelActionContext<StreamChatGenerics>('MessageActionsBox');\n  const { customMessageActions, message, threadList } =\n    useMessageContext<StreamChatGenerics>('MessageActionsBox');\n\n  const { t } = useTranslationContext('MessageActionsBox');\n\n  const messageActions = getMessageActions();\n\n  const handleQuote = () => {\n    setQuotedMessage(message);\n\n    const elements = message.parent_id\n      ? document.querySelectorAll('.str-chat__thread .str-chat__textarea__textarea')\n      : document.getElementsByClassName('str-chat__textarea__textarea');\n    const textarea = elements.item(0);\n\n    if (textarea instanceof HTMLTextAreaElement) {\n      textarea.focus();\n    }\n  };\n\n  const rootClassName = clsx('str-chat__message-actions-box', className, {\n    'str-chat__message-actions-box--open': open,\n  });\n\n  const buttonClassName =\n    'str-chat__message-actions-list-item str-chat__message-actions-list-item-button';\n\n  return (\n    <div {...restDivProps} className={rootClassName} data-testid='message-actions-box'>\n      <div\n        aria-label={t('aria/Message Options')}\n        className='str-chat__message-actions-list'\n        role='listbox'\n      >\n        <CustomMessageActionsList\n          customMessageActions={customMessageActions}\n          message={message}\n        />\n        {messageActions.indexOf(MESSAGE_ACTIONS.quote) > -1 && (\n          <button\n            aria-selected='false'\n            className={buttonClassName}\n            onClick={handleQuote}\n            role='option'\n          >\n            {t<string>('Reply')}\n          </button>\n        )}\n        {messageActions.indexOf(MESSAGE_ACTIONS.pin) > -1 && !message.parent_id && (\n          <button\n            aria-selected='false'\n            className={buttonClassName}\n            onClick={handlePin}\n            role='option'\n          >\n            {!message.pinned ? t<string>('Pin') : t<string>('Unpin')}\n          </button>\n        )}\n        {messageActions.indexOf(MESSAGE_ACTIONS.markUnread) > -1 &&\n          !threadList &&\n          !!message.id && (\n            <button\n              aria-selected='false'\n              className={buttonClassName}\n              onClick={handleMarkUnread}\n              role='option'\n            >\n              {t<string>('Mark as unread')}\n            </button>\n          )}\n        {messageActions.indexOf(MESSAGE_ACTIONS.flag) > -1 && (\n          <button\n            aria-selected='false'\n            className={buttonClassName}\n            onClick={handleFlag}\n            role='option'\n          >\n            {t<string>('Flag')}\n          </button>\n        )}\n        {messageActions.indexOf(MESSAGE_ACTIONS.mute) > -1 && (\n          <button\n            aria-selected='false'\n            className={buttonClassName}\n            onClick={handleMute}\n            role='option'\n          >\n            {isUserMuted() ? t<string>('Unmute') : t<string>('Mute')}\n          </button>\n        )}\n        {messageActions.indexOf(MESSAGE_ACTIONS.edit) > -1 && (\n          <button\n            aria-selected='false'\n            className={buttonClassName}\n            onClick={handleEdit}\n            role='option'\n          >\n            {t<string>('Edit Message')}\n          </button>\n        )}\n        {messageActions.indexOf(MESSAGE_ACTIONS.delete) > -1 && (\n          <button\n            aria-selected='false'\n            className={buttonClassName}\n            onClick={handleDelete}\n            role='option'\n          >\n            {t<string>('Delete')}\n          </button>\n        )}\n      </div>\n    </div>\n  );\n};\n\n/**\n * A popup box that displays the available actions on a message, such as edit, delete, pin, etc.\n */\nexport const MessageActionsBox = React.memo(\n  UnMemoizedMessageActionsBox,\n) as typeof UnMemoizedMessageActionsBox;\n", "import React from 'react';\n\nimport { CustomMessageActions } from '../../context/MessageContext';\n\nimport type { StreamMessage } from '../../context/ChannelStateContext';\nimport type { DefaultStreamChatGenerics } from '../../types/types';\n\nexport type CustomMessageActionsListProps<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n  message: StreamMessage<StreamChatGenerics>;\n  customMessageActions?: CustomMessageActions<StreamChatGenerics>;\n};\n\nexport const CustomMessageActionsList = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  props: CustomMessageActionsListProps<StreamChatGenerics>,\n) => {\n  const { customMessageActions, message } = props;\n\n  if (!customMessageActions) return null;\n\n  const customActionsArray = Object.keys(customMessageActions);\n\n  return (\n    <>\n      {customActionsArray.map((customAction) => {\n        const customHandler = customMessageActions[customAction];\n\n        return (\n          <button\n            aria-selected='false'\n            className='str-chat__message-actions-list-item str-chat__message-actions-list-item-button'\n            key={customAction}\n            onClick={(event) => customHandler(message, event)}\n            role='option'\n          >\n            {customAction}\n          </button>\n        );\n      })}\n    </>\n  );\n};\n", "import clsx from 'clsx';\nimport { Placement } from '@popperjs/core';\nimport React, { ComponentProps, PropsWithChildren, useEffect, useState } from 'react';\nimport { FocusScope } from '@react-aria/focus';\nimport { usePopper } from 'react-popper';\nimport { DialogPortalEntry } from './DialogPortal';\nimport { useDialog, useDialogIsOpen } from './hooks';\n\nexport interface DialogAnchorOptions {\n  open: boolean;\n  placement: Placement;\n  referenceElement: HTMLElement | null;\n}\n\nexport function useDialogAnchor<T extends HTMLElement>({\n  open,\n  placement,\n  referenceElement,\n}: DialogAnchorOptions) {\n  const [popperElement, setPopperElement] = useState<T | null>(null);\n  const { attributes, styles, update } = usePopper(referenceElement, popperElement, {\n    modifiers: [\n      {\n        name: 'eventListeners',\n        options: {\n          // It's not safe to update popper position on resize and scroll, since popper's\n          // reference element might not be visible at the time.\n          resize: false,\n          scroll: false,\n        },\n      },\n    ],\n    placement,\n  });\n\n  useEffect(() => {\n    if (open && popperElement) {\n      // Since the popper's reference element might not be (and usually is not) visible\n      // all the time, it's safer to force popper update before showing it.\n      // update is non-null only if popperElement is non-null\n      update?.();\n    }\n  }, [open, popperElement, update]);\n\n  if (popperElement && !open) {\n    setPopperElement(null);\n  }\n\n  return {\n    attributes,\n    setPopperElement,\n    styles,\n  };\n}\n\nexport type DialogAnchorProps = PropsWithChildren<Partial<DialogAnchorOptions>> & {\n  id: string;\n  focus?: boolean;\n  trapFocus?: boolean;\n} & ComponentProps<'div'>;\n\nexport const DialogAnchor = ({\n  children,\n  className,\n  focus = true,\n  id,\n  placement = 'auto',\n  referenceElement = null,\n  trapFocus,\n  ...restDivProps\n}: DialogAnchorProps) => {\n  const dialog = useDialog({ id });\n  const open = useDialogIsOpen(id);\n  const { attributes, setPopperElement, styles } = useDialogAnchor<HTMLDivElement>({\n    open,\n    placement,\n    referenceElement,\n  });\n\n  useEffect(() => {\n    if (!open) return;\n    const hideOnEscape = (event: KeyboardEvent) => {\n      if (event.key !== 'Escape') return;\n      dialog?.close();\n    };\n\n    document.addEventListener('keyup', hideOnEscape);\n\n    return () => {\n      document.removeEventListener('keyup', hideOnEscape);\n    };\n  }, [dialog, open]);\n\n  // prevent rendering the dialog contents if the dialog should not be open / shown\n  if (!open) {\n    return null;\n  }\n\n  return (\n    <DialogPortalEntry dialogId={id}>\n      <FocusScope autoFocus={focus} contain={trapFocus} restoreFocus>\n        <div\n          {...restDivProps}\n          {...attributes.popper}\n          className={clsx('str-chat__dialog-contents', className)}\n          data-testid='str-chat__dialog-contents'\n          ref={setPopperElement}\n          style={styles.popper}\n          tabIndex={0}\n        >\n          {children}\n        </div>\n      </FocusScope>\n    </DialogPortalEntry>\n  );\n};\n", "import React, { ElementRef, useRef } from 'react';\nimport { ReactionSelector as DefaultReactionSelector } from './ReactionSelector';\nimport { DialogAnchor, useDialog, useDialogIsOpen } from '../Dialog';\nimport {\n  useComponentContext,\n  useMessageContext,\n  useTranslationContext,\n} from '../../context';\nimport type { DefaultStreamChatGenerics } from '../../types';\nimport type { IconProps } from '../../types/types';\n\ntype ReactionSelectorWithButtonProps = {\n  /* Custom component rendering the icon used in a button invoking reactions selector for a given message. */\n  ReactionIcon: React.ComponentType<IconProps>;\n};\n\n/**\n * Internal convenience component - not to be exported. It just groups the button and the dialog anchor and thus prevents\n * cluttering the parent component.\n */\nexport const ReactionSelectorWithButton = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n  ReactionIcon,\n}: ReactionSelectorWithButtonProps) => {\n  const { t } = useTranslationContext('ReactionSelectorWithButton');\n  const { isMyMessage, message } =\n    useMessageContext<StreamChatGenerics>('MessageOptions');\n  const { ReactionSelector = DefaultReactionSelector } =\n    useComponentContext('MessageOptions');\n  const buttonRef = useRef<ElementRef<'button'>>(null);\n  const dialogId = `reaction-selector--${message.id}`;\n  const dialog = useDialog({ id: dialogId });\n  const dialogIsOpen = useDialogIsOpen(dialogId);\n  return (\n    <>\n      <DialogAnchor\n        id={dialogId}\n        placement={isMyMessage() ? 'top-end' : 'top-start'}\n        referenceElement={buttonRef.current}\n        trapFocus\n      >\n        <ReactionSelector />\n      </DialogAnchor>\n      <button\n        aria-expanded={dialogIsOpen}\n        aria-label={t('aria/Open Reaction Selector')}\n        className='str-chat__message-reactions-button'\n        data-testid='message-reaction-action'\n        onClick={() => dialog?.toggle()}\n        ref={buttonRef}\n      >\n        <ReactionIcon className='str-chat__message-action-icon' />\n      </button>\n    </>\n  );\n};\n", "import React, { useCallback, useEffect, useRef, useState } from 'react';\nimport clsx from 'clsx';\n\nimport { Avatar as DefaultAvatar } from '../Avatar';\nimport { useDialog } from '../Dialog';\nimport { defaultReactionOptions } from './reactionOptions';\nimport { isMutableRef } from './utils/utils';\n\nimport { useComponentContext } from '../../context/ComponentContext';\nimport { useMessageContext } from '../../context/MessageContext';\n\nimport type { ReactionGroupResponse, ReactionResponse } from 'stream-chat';\nimport type { AvatarProps } from '../Avatar';\nimport type { DefaultStreamChatGenerics } from '../../types/types';\nimport type { ReactionOptions } from './reactionOptions';\n\nexport type ReactionSelectorProps<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n  /** Custom UI component to display user avatar, defaults to and accepts same props as: [Avatar](https://github.com/GetStream/stream-chat-react/blob/master/src/components/Avatar/Avatar.tsx) */\n  Avatar?: React.ElementType<AvatarProps>;\n  /** If true, shows the user's avatar with the reaction */\n  detailedView?: boolean;\n  /** Function that adds/removes a reaction on a message (overrides the function stored in `MessageContext`) */\n  handleReaction?: (\n    reactionType: string,\n    event: React.BaseSyntheticEvent,\n  ) => Promise<void>;\n  /** An array of the reaction objects to display in the list */\n  latest_reactions?: ReactionResponse<StreamChatGenerics>[];\n  /** An array of the own reaction objects to distinguish own reactions visually */\n  own_reactions?: ReactionResponse<StreamChatGenerics>[];\n  /**\n   * An object that keeps track of the count of each type of reaction on a message\n   * @deprecated This override value is no longer taken into account. Use `reaction_groups` to override reaction counts instead.\n   * */\n  reaction_counts?: Record<string, number>;\n  /** An object containing summary for each reaction type on a message */\n  reaction_groups?: Record<string, ReactionGroupResponse>;\n  /**\n   * @deprecated\n   * A list of the currently supported reactions on a message\n   * */\n  reactionOptions?: ReactionOptions;\n  /** If true, adds a CSS class that reverses the horizontal positioning of the selector */\n  reverse?: boolean;\n};\n\nconst UnMemoizedReactionSelector = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  props: ReactionSelectorProps<StreamChatGenerics>,\n) => {\n  const {\n    Avatar: propAvatar,\n    detailedView = true,\n    handleReaction: propHandleReaction,\n    latest_reactions: propLatestReactions,\n    own_reactions: propOwnReactions,\n    reaction_groups: propReactionGroups,\n    reactionOptions: propReactionOptions,\n    reverse = false,\n  } = props;\n\n  const {\n    Avatar: contextAvatar,\n    reactionOptions: contextReactionOptions = defaultReactionOptions,\n  } = useComponentContext<StreamChatGenerics>('ReactionSelector');\n  const {\n    closeReactionSelectorOnClick,\n    handleReaction: contextHandleReaction,\n    message,\n  } = useMessageContext<StreamChatGenerics>('ReactionSelector');\n  const dialogId = `reaction-selector--${message.id}`;\n  const dialog = useDialog({ id: dialogId });\n  const reactionOptions = propReactionOptions ?? contextReactionOptions;\n\n  const Avatar = propAvatar || contextAvatar || DefaultAvatar;\n  const handleReaction = propHandleReaction || contextHandleReaction;\n  const latestReactions = propLatestReactions || message?.latest_reactions || [];\n  const ownReactions = propOwnReactions || message?.own_reactions || [];\n  const reactionGroups = propReactionGroups || message?.reaction_groups || {};\n\n  const [tooltipReactionType, setTooltipReactionType] = useState<string | null>(null);\n  const [tooltipPositions, setTooltipPositions] = useState<{\n    arrow: number;\n    tooltip: number;\n  } | null>(null);\n\n  const rootRef = useRef<HTMLDivElement | null>(null);\n  const targetRef = useRef<HTMLDivElement | null>(null);\n  const tooltipRef = useRef<HTMLDivElement | null>(null);\n\n  const showTooltip = useCallback(\n    (event: React.MouseEvent<HTMLDivElement>, reactionType: string) => {\n      targetRef.current = event.currentTarget;\n      setTooltipReactionType(reactionType);\n    },\n    [],\n  );\n\n  const hideTooltip = useCallback(() => {\n    setTooltipReactionType(null);\n    setTooltipPositions(null);\n  }, []);\n\n  useEffect(() => {\n    if (!tooltipReactionType || !rootRef.current) return;\n    const tooltip = tooltipRef.current?.getBoundingClientRect();\n    const target = targetRef.current?.getBoundingClientRect();\n\n    const container = isMutableRef(rootRef)\n      ? rootRef.current?.getBoundingClientRect()\n      : null;\n\n    if (!tooltip || !target || !container) return;\n\n    const tooltipPosition =\n      tooltip.width === container.width || tooltip.x < container.x\n        ? 0\n        : target.left + target.width / 2 - container.left - tooltip.width / 2;\n\n    const arrowPosition = target.x - tooltip.x + target.width / 2 - tooltipPosition;\n\n    setTooltipPositions({\n      arrow: arrowPosition,\n      tooltip: tooltipPosition,\n    });\n  }, [tooltipReactionType, rootRef]);\n\n  const getUsersPerReactionType = (type: string | null) =>\n    latestReactions\n      .map((reaction) => {\n        if (reaction.type === type) {\n          return reaction.user?.name || reaction.user?.id;\n        }\n        return null;\n      })\n      .filter(Boolean);\n\n  const iHaveReactedWithReaction = (reactionType: string) =>\n    ownReactions.find((reaction) => reaction.type === reactionType);\n\n  const getLatestUserForReactionType = (type: string | null) =>\n    latestReactions.find((reaction) => reaction.type === type && !!reaction.user)?.user ||\n    undefined;\n\n  return (\n    <div\n      className={clsx(\n        'str-chat__reaction-selector str-chat__message-reaction-selector str-chat-react__message-reaction-selector',\n        {\n          'str-chat__reaction-selector--reverse': reverse,\n        },\n      )}\n      data-testid='reaction-selector'\n      ref={rootRef}\n    >\n      {!!tooltipReactionType && detailedView && (\n        <div\n          className='str-chat__reaction-selector-tooltip'\n          ref={tooltipRef}\n          style={{\n            left: tooltipPositions?.tooltip,\n            visibility: tooltipPositions ? 'visible' : 'hidden',\n          }}\n        >\n          <div className='arrow' style={{ left: tooltipPositions?.arrow }} />\n          {getUsersPerReactionType(tooltipReactionType)?.map((user, i, users) => (\n            <span className='latest-user-username' key={`key-${i}-${user}`}>\n              {`${user}${i < users.length - 1 ? ', ' : ''}`}\n            </span>\n          ))}\n        </div>\n      )}\n      <ul className='str-chat__message-reactions-list str-chat__message-reactions-options'>\n        {reactionOptions.map(({ Component, name: reactionName, type: reactionType }) => {\n          const latestUser = getLatestUserForReactionType(reactionType);\n          const count = reactionGroups[reactionType]?.count ?? 0;\n          return (\n            <li key={reactionType}>\n              <button\n                aria-label={`Select Reaction: ${reactionName || reactionType}`}\n                className={clsx(\n                  'str-chat__message-reactions-list-item str-chat__message-reactions-option',\n                  {\n                    'str-chat__message-reactions-option-selected':\n                      iHaveReactedWithReaction(reactionType),\n                  },\n                )}\n                data-testid='select-reaction-button'\n                data-text={reactionType}\n                onClick={(event) => {\n                  handleReaction(reactionType, event);\n                  if (closeReactionSelectorOnClick) {\n                    dialog.close();\n                  }\n                }}\n              >\n                {!!count && detailedView && (\n                  <div\n                    className='latest-user str-chat__message-reactions-last-user'\n                    onClick={hideTooltip}\n                    onMouseEnter={(e) => showTooltip(e, reactionType)}\n                    onMouseLeave={hideTooltip}\n                  >\n                    {latestUser ? (\n                      <Avatar\n                        image={latestUser.image}\n                        name={latestUser.name}\n                        size={20}\n                        user={latestUser}\n                      />\n                    ) : (\n                      <div className='latest-user-not-found' />\n                    )}\n                  </div>\n                )}\n                <span className='str-chat__message-reaction-emoji'>\n                  <Component />\n                </span>\n                {Boolean(count) && detailedView && (\n                  <span className='str-chat__message-reactions-list-item__count'>\n                    {count || ''}\n                  </span>\n                )}\n              </button>\n            </li>\n          );\n        })}\n      </ul>\n    </div>\n  );\n};\n\n/**\n * Component that allows a user to select a reaction.\n */\nexport const ReactionSelector = React.memo(\n  UnMemoizedReactionSelector,\n) as typeof UnMemoizedReactionSelector;\n", "/* eslint-disable sort-keys */\n\nimport React from 'react';\n\nimport { StreamEmoji } from './StreamEmoji';\n\nexport type ReactionOptions = Array<{\n  Component: React.ComponentType;\n  type: string;\n  name?: string;\n}>;\n\nexport const defaultReactionOptions: ReactionOptions = [\n  {\n    type: 'haha',\n    Component: () => <StreamEmoji fallback='\uD83D\uDE02' type='haha' />,\n    name: 'Joy',\n  },\n  {\n    type: 'like',\n    Component: () => <StreamEmoji fallback='\uD83D\uDC4D' type='like' />,\n    name: 'Thumbs up',\n  },\n  {\n    type: 'love',\n    Component: () => <StreamEmoji fallback='\u2764\uFE0F' type='love' />,\n    name: 'Heart',\n  },\n  { type: 'sad', Component: () => <StreamEmoji fallback='\uD83D\uDE14' type='sad' />, name: 'Sad' },\n  {\n    type: 'wow',\n    Component: () => <StreamEmoji fallback='\uD83D\uDE32' type='wow' />,\n    name: 'Astonished',\n  },\n];\n", "import React from 'react';\n\nimport { SpriteImage, SpriteImageProps } from './SpriteImage';\n\nimport type { Readable } from '../../types/types';\n\nconst StreamSpriteEmojiPositions = {\n  angry: [1, 1],\n  haha: [1, 0],\n  like: [0, 0],\n  love: [1, 2],\n  sad: [0, 1],\n  wow: [0, 2],\n};\n\ntype StreamEmojiType = keyof typeof StreamSpriteEmojiPositions;\n\nconst STREAM_SPRITE_URL = 'https://getstream.imgix.net/images/emoji-sprite.png';\n\nexport const StreamEmoji = ({\n  fallback,\n  type,\n}: Readable<{ type: StreamEmojiType } & Pick<SpriteImageProps, 'fallback'>>) => {\n  const position = StreamSpriteEmojiPositions[type] as [number, number];\n  return (\n    <SpriteImage\n      columns={2}\n      fallback={fallback}\n      position={position}\n      rows={3}\n      spriteUrl={STREAM_SPRITE_URL}\n      style={\n        {\n          '--str-chat__sprite-image-height': 'var(--str-chat__stream-emoji-size, 18px)',\n        } as React.CSSProperties\n      }\n    />\n  );\n};\n", "import React, { useEffect, useState } from 'react';\n\nimport { getImageDimensions } from './utils/utils';\n\nexport type SpriteImageProps = {\n  columns: number;\n  position: [number, number];\n  rows: number;\n  spriteUrl: string;\n  fallback?: React.ReactNode;\n  height?: number;\n  style?: React.CSSProperties;\n  width?: number;\n};\n\nexport const SpriteImage = ({\n  columns,\n  fallback,\n  height,\n  position,\n  rows,\n  spriteUrl,\n  style,\n  width,\n}: SpriteImageProps) => {\n  const [[spriteWidth, spriteHeight], setSpriteDimensions] = useState([0, 0]);\n\n  useEffect(() => {\n    getImageDimensions(spriteUrl).then(setSpriteDimensions).catch(console.error);\n  }, [spriteUrl]);\n\n  const [x, y] = position;\n\n  if (!spriteHeight || !spriteWidth) return <>{fallback}</>;\n\n  return (\n    <div\n      data-testid='sprite-image'\n      style={\n        {\n          ...style,\n          '--str-chat__sprite-image-resize-ratio':\n            'var(--str-chat__sprite-image-resize-ratio-x, var(--str-chat__sprite-image-resize-ratio-y, 1))',\n          '--str-chat__sprite-image-resize-ratio-x':\n            'calc(var(--str-chat__sprite-image-width) / var(--str-chat__sprite-item-width))',\n          '--str-chat__sprite-image-resize-ratio-y':\n            'calc(var(--str-chat__sprite-image-height) / var(--str-chat__sprite-item-height))',\n          '--str-chat__sprite-item-height': `${spriteHeight / rows}`,\n          '--str-chat__sprite-item-width': `${spriteWidth / columns}`,\n          ...(Number.isFinite(height)\n            ? { '--str-chat__sprite-image-height': `${height}px` }\n            : {}),\n          ...(Number.isFinite(width)\n            ? { '--str-chat__sprite-image-width': `${width}px` }\n            : {}),\n          backgroundImage: `url('${spriteUrl}')`,\n          backgroundPosition: `${x * (100 / (columns - 1))}% ${y * (100 / (rows - 1))}%`,\n          backgroundSize: `${columns * 100}% ${rows * 100}%`,\n          height:\n            'var(--str-chat__sprite-image-height, calc(var(--str-chat__sprite-item-height) * var(--str-chat__sprite-image-resize-ratio)))',\n          width:\n            'var(--str-chat__sprite-image-width, calc(var(--str-chat__sprite-item-width) * var(--str-chat__sprite-image-resize-ratio)))',\n        } as React.CSSProperties\n      }\n    />\n  );\n};\n", "import { ForwardedRef, MutableRefObject } from 'react';\n\nexport const isMutableRef = <T>(\n  ref: ForwardedRef<T> | null,\n): ref is MutableRefObject<T> => {\n  if (ref) {\n    return (ref as MutableRefObject<T>).current !== undefined;\n  }\n  return false;\n};\n\nexport const getImageDimensions = (source: string) =>\n  new Promise<[number, number]>((resolve, reject) => {\n    const image = new Image();\n\n    image.addEventListener(\n      'load',\n      () => {\n        resolve([image.width, image.height]);\n      },\n      { once: true },\n    );\n\n    image.addEventListener('error', () => reject(`Couldn't load image from ${source}`), {\n      once: true,\n    });\n\n    image.src = source;\n  });\n", "import React, { MouseEventHandler } from 'react';\nimport { useTranslationContext } from '../../context/TranslationContext';\n\nexport type MessageRepliesCountButtonProps = {\n  /* If supplied, adds custom text to the end of a multiple replies message */\n  labelPlural?: string;\n  /* If supplied, adds custom text to the end of a single reply message */\n  labelSingle?: string;\n  /* Function to navigate into an existing thread on a message */\n  onClick?: MouseEventHandler;\n  /* The amount of replies (i.e., threaded messages) on a message */\n  reply_count?: number;\n};\n\nconst UnMemoizedMessageRepliesCountButton = (props: MessageRepliesCountButtonProps) => {\n  const { labelPlural, labelSingle, onClick, reply_count = 0 } = props;\n\n  const { t } = useTranslationContext('MessageRepliesCountButton');\n\n  if (!reply_count) return null;\n\n  let replyCountText = t('replyCount', { count: reply_count });\n\n  if (labelPlural && reply_count > 1) {\n    replyCountText = `${reply_count} ${labelPlural}`;\n  } else if (labelSingle) {\n    replyCountText = `1 ${labelSingle}`;\n  }\n\n  return (\n    <div className='str-chat__message-replies-count-button-wrapper'>\n      <button\n        className='str-chat__message-replies-count-button'\n        data-testid='replies-count-button'\n        onClick={onClick}\n      >\n        {replyCountText}\n      </button>\n    </div>\n  );\n};\n\nexport const MessageRepliesCountButton = React.memo(\n  UnMemoizedMessageRepliesCountButton,\n) as typeof UnMemoizedMessageRepliesCountButton;\n", "import React, { useState } from 'react';\nimport clsx from 'clsx';\n\nimport { MessageDeliveredIcon } from './icons';\nimport { getReadByTooltipText, mapToUserNameOrId, TooltipUsernameMapper } from './utils';\n\nimport { AvatarProps, Avatar as DefaultAvatar } from '../Avatar';\nimport { LoadingIndicator } from '../Loading';\nimport { PopperTooltip } from '../Tooltip';\nimport { useEnterLeaveHandlers } from '../Tooltip/hooks';\n\nimport { useChatContext } from '../../context/ChatContext';\nimport { useComponentContext } from '../../context/ComponentContext';\nimport { useMessageContext } from '../../context/MessageContext';\nimport { useTranslationContext } from '../../context/TranslationContext';\n\nimport type { DefaultStreamChatGenerics } from '../../types/types';\n\nexport type MessageStatusProps = {\n  /* Custom UI component to display a user's avatar (overrides the value from `ComponentContext`) */\n  Avatar?: React.ComponentType<AvatarProps>;\n  /* Custom component to render when message is considered delivered, not read. The default UI renders MessageDeliveredIcon and a tooltip with string 'Delivered'. */\n  MessageDeliveredStatus?: React.ComponentType;\n  /* Custom component to render when message is considered delivered and read. The default UI renders the last reader's Avatar and a tooltip with string readers' names. */\n  MessageReadStatus?: React.ComponentType;\n  /* Custom component to render when message is considered as being the in the process of delivery. The default UI renders LoadingIndicator and a tooltip with string 'Sending'. */\n  MessageSendingStatus?: React.ComponentType;\n  /* Message type string to be added to CSS class names. */\n  messageType?: string;\n  /* Allows to customize the username(s) that appear on the message status tooltip */\n  tooltipUserNameMapper?: TooltipUsernameMapper;\n};\n\nconst UnMemoizedMessageStatus = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  props: MessageStatusProps,\n) => {\n  const {\n    Avatar: propAvatar,\n    MessageDeliveredStatus,\n    MessageReadStatus,\n    MessageSendingStatus,\n    messageType = 'simple',\n    tooltipUserNameMapper = mapToUserNameOrId,\n  } = props;\n\n  const { handleEnter, handleLeave, tooltipVisible } =\n    useEnterLeaveHandlers<HTMLSpanElement>();\n\n  const { client } = useChatContext<StreamChatGenerics>('MessageStatus');\n  const { Avatar: contextAvatar } =\n    useComponentContext<StreamChatGenerics>('MessageStatus');\n  const { isMyMessage, lastReceivedId, message, readBy, threadList } =\n    useMessageContext<StreamChatGenerics>('MessageStatus');\n  const { t } = useTranslationContext('MessageStatus');\n  const [referenceElement, setReferenceElement] = useState<HTMLSpanElement | null>(null);\n\n  const Avatar = propAvatar || contextAvatar || DefaultAvatar;\n\n  if (!isMyMessage() || message.type === 'error') return null;\n\n  const justReadByMe = readBy?.length === 1 && readBy[0].id === client.user?.id;\n  const rootClassName = `str-chat__message-${messageType}-status str-chat__message-status`;\n\n  const sending = message.status === 'sending';\n  const delivered =\n    message.status === 'received' && message.id === lastReceivedId && !threadList;\n  const deliveredAndRead = !!(readBy?.length && !threadList && !justReadByMe);\n\n  const readersWithoutOwnUser = deliveredAndRead\n    ? readBy.filter((item) => item.id !== client.user?.id)\n    : [];\n  const [lastReadUser] = readersWithoutOwnUser;\n\n  return (\n    <span\n      className={rootClassName}\n      data-testid={clsx({\n        'message-status-read-by': deliveredAndRead,\n        'message-status-received': delivered && !deliveredAndRead,\n        'message-status-sending': sending,\n      })}\n      onMouseEnter={handleEnter}\n      onMouseLeave={handleLeave}\n      ref={setReferenceElement}\n    >\n      {sending &&\n        (MessageSendingStatus ? (\n          <MessageSendingStatus />\n        ) : (\n          <>\n            <PopperTooltip\n              offset={[0, 5]}\n              referenceElement={referenceElement}\n              visible={tooltipVisible}\n            >\n              {t<string>('Sending...')}\n            </PopperTooltip>\n            <LoadingIndicator />\n          </>\n        ))}\n\n      {delivered &&\n        !deliveredAndRead &&\n        (MessageDeliveredStatus ? (\n          <MessageDeliveredStatus />\n        ) : (\n          <>\n            <PopperTooltip\n              offset={[0, 5]}\n              referenceElement={referenceElement}\n              visible={tooltipVisible}\n            >\n              {t<string>('Delivered')}\n            </PopperTooltip>\n            <MessageDeliveredIcon />\n          </>\n        ))}\n\n      {deliveredAndRead &&\n        (MessageReadStatus ? (\n          <MessageReadStatus />\n        ) : (\n          <>\n            <PopperTooltip\n              offset={[0, 5]}\n              referenceElement={referenceElement}\n              visible={tooltipVisible}\n            >\n              {getReadByTooltipText(readBy, t, client, tooltipUserNameMapper)}\n            </PopperTooltip>\n\n            <Avatar\n              className='str-chat__avatar--message-status'\n              image={lastReadUser.image}\n              name={lastReadUser.name || lastReadUser.id}\n              user={lastReadUser}\n            />\n\n            {readersWithoutOwnUser.length > 1 && (\n              <span\n                className={`str-chat__message-${messageType}-status-number`}\n                data-testid='message-status-read-by-many'\n              >\n                {readersWithoutOwnUser.length}\n              </span>\n            )}\n          </>\n        ))}\n    </span>\n  );\n};\n\nexport const MessageStatus = React.memo(\n  UnMemoizedMessageStatus,\n) as typeof UnMemoizedMessageStatus;\n", "import React, { ComponentProps, useState } from 'react';\nimport { PopperProps, usePopper } from 'react-popper';\n\nexport const Tooltip = ({ children, ...rest }: ComponentProps<'div'>) => (\n  <div className='str-chat__tooltip' {...rest}>\n    {children}\n  </div>\n);\n\nexport type PopperTooltipProps<T extends HTMLElement> = React.PropsWithChildren<{\n  /** Reference element to which the tooltip should attach to */\n  referenceElement: T | null;\n  /** Popper's modifier (offset) property - [xAxis offset, yAxis offset], default [0, 10] */\n  offset?: [number, number];\n  /** Popper's placement property defining default position of the tooltip, default 'top' */\n  placement?: PopperProps<unknown>['placement'];\n  /** Tells component whether to render its contents */\n  visible?: boolean;\n}>;\n\nexport const PopperTooltip = <T extends HTMLElement>({\n  children,\n  offset = [0, 10],\n  placement = 'top',\n  referenceElement,\n  visible = false,\n}: PopperTooltipProps<T>) => {\n  const [popperElement, setPopperElement] = useState<HTMLDivElement | null>(null);\n  const { attributes, styles } = usePopper(referenceElement, popperElement, {\n    modifiers: [\n      {\n        name: 'offset',\n        options: {\n          offset,\n        },\n      },\n    ],\n    placement,\n  });\n\n  if (!visible) return null;\n\n  return (\n    <div\n      className='str-chat__tooltip'\n      ref={setPopperElement}\n      style={styles.popper}\n      {...attributes.popper}\n    >\n      {children}\n    </div>\n  );\n};\n", "import React, { useCallback, useState } from 'react';\n\nexport const useEnterLeaveHandlers = <T extends HTMLElement>({\n  onMouseEnter,\n  onMouseLeave,\n}: Partial<Record<'onMouseEnter' | 'onMouseLeave', React.MouseEventHandler<T>>> = {}) => {\n  const [tooltipVisible, setTooltipVisible] = useState(false);\n\n  const handleEnter: React.MouseEventHandler<T> = useCallback(\n    (e) => {\n      setTooltipVisible(true);\n      onMouseEnter?.(e);\n    },\n    [onMouseEnter],\n  );\n\n  const handleLeave: React.MouseEventHandler<T> = useCallback(\n    (e) => {\n      setTooltipVisible(false);\n      onMouseLeave?.(e);\n    },\n    [onMouseLeave],\n  );\n\n  return { handleEnter, handleLeave, tooltipVisible };\n};\n", "import clsx from 'clsx';\nimport React, { useMemo } from 'react';\n\nimport { QuotedMessage as DefaultQuotedMessage } from './QuotedMessage';\nimport { isOnlyEmojis, messageHasAttachments } from './utils';\n\nimport {\n  useComponentContext,\n  useMessageContext,\n  useTranslationContext,\n} from '../../context';\nimport { renderText as defaultRenderText } from './renderText';\nimport { MessageErrorText } from './MessageErrorText';\n\nimport type { TranslationLanguages } from 'stream-chat';\nimport type { MessageContextValue, StreamMessage } from '../../context';\nimport type { DefaultStreamChatGenerics } from '../../types/types';\n\nexport type MessageTextProps<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n  /* Replaces the CSS class name placed on the component's inner `div` container */\n  customInnerClass?: string;\n  /* Adds a CSS class name to the component's outer `div` container */\n  customWrapperClass?: string;\n  /* The `StreamChat` message object, which provides necessary data to the underlying UI components (overrides the value stored in `MessageContext`) */\n  message?: StreamMessage<StreamChatGenerics>;\n  /* Theme string to be added to CSS class names */\n  theme?: string;\n} & Pick<MessageContextValue<StreamChatGenerics>, 'renderText'>;\n\nconst UnMemoizedMessageTextComponent = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  props: MessageTextProps<StreamChatGenerics>,\n) => {\n  const {\n    customInnerClass,\n    customWrapperClass = '',\n    message: propMessage,\n    renderText: propsRenderText,\n    theme = 'simple',\n  } = props;\n\n  const { QuotedMessage = DefaultQuotedMessage } =\n    useComponentContext<StreamChatGenerics>('MessageText');\n\n  const {\n    message: contextMessage,\n    onMentionsClickMessage,\n    onMentionsHoverMessage,\n    renderText: contextRenderText,\n    unsafeHTML,\n  } = useMessageContext<StreamChatGenerics>('MessageText');\n\n  const renderText = propsRenderText ?? contextRenderText ?? defaultRenderText;\n\n  const { userLanguage } = useTranslationContext('MessageText');\n  const message = propMessage || contextMessage;\n  const hasAttachment = messageHasAttachments(message);\n\n  const messageTextToRender =\n    message.i18n?.[`${userLanguage}_text` as `${TranslationLanguages}_text`] ||\n    message.text;\n\n  const messageText = useMemo(\n    () => renderText(messageTextToRender, message.mentioned_users),\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    [message.mentioned_users, messageTextToRender],\n  );\n\n  const wrapperClass = customWrapperClass || 'str-chat__message-text';\n  const innerClass =\n    customInnerClass ||\n    `str-chat__message-text-inner str-chat__message-${theme}-text-inner`;\n\n  if (!messageTextToRender && !message.quoted_message) return null;\n\n  return (\n    <div className={wrapperClass} tabIndex={0}>\n      <div\n        className={clsx(innerClass, {\n          [`str-chat__message-${theme}-text-inner--has-attachment`]: hasAttachment,\n          [` str-chat__message-${theme}-text-inner--is-emoji`]:\n            isOnlyEmojis(message.text) && !message.quoted_message,\n        })}\n        data-testid='message-text-inner-wrapper'\n        onClick={onMentionsClickMessage}\n        onMouseOver={onMentionsHoverMessage}\n      >\n        {message.quoted_message && <QuotedMessage />}\n        <MessageErrorText message={message} theme={theme} />\n        {unsafeHTML && message.html ? (\n          <div dangerouslySetInnerHTML={{ __html: message.html }} />\n        ) : (\n          <div>{messageText}</div>\n        )}\n      </div>\n    </div>\n  );\n};\n\nexport const MessageText = React.memo(\n  UnMemoizedMessageTextComponent,\n) as typeof UnMemoizedMessageTextComponent;\n", "import React, { useMemo } from 'react';\nimport clsx from 'clsx';\nimport type { TranslationLanguages } from 'stream-chat';\n\nimport { Attachment as DefaultAttachment } from '../Attachment';\nimport { Avatar as DefaultAvatar } from '../Avatar';\nimport { Poll } from '../Poll';\nimport { useChatContext } from '../../context/ChatContext';\nimport { useComponentContext } from '../../context/ComponentContext';\nimport { useMessageContext } from '../../context/MessageContext';\nimport { useTranslationContext } from '../../context/TranslationContext';\nimport { useChannelActionContext } from '../../context/ChannelActionContext';\nimport { renderText as defaultRenderText } from './renderText';\nimport type { MessageContextValue } from '../../context/MessageContext';\n\nexport type QuotedMessageProps<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Pick<MessageContextValue<StreamChatGenerics>, 'renderText'>;\n\nimport type { DefaultStreamChatGenerics } from '../../types/types';\n\nexport const QuotedMessage = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n  renderText: propsRenderText,\n}: QuotedMessageProps) => {\n  const { Attachment = DefaultAttachment, Avatar: ContextAvatar } =\n    useComponentContext<StreamChatGenerics>('QuotedMessage');\n  const { client } = useChatContext();\n  const {\n    isMyMessage,\n    message,\n    renderText: contextRenderText,\n  } = useMessageContext<StreamChatGenerics>('QuotedMessage');\n  const { t, userLanguage } = useTranslationContext('QuotedMessage');\n  const { jumpToMessage } = useChannelActionContext('QuotedMessage');\n\n  const renderText = propsRenderText ?? contextRenderText ?? defaultRenderText;\n\n  const Avatar = ContextAvatar || DefaultAvatar;\n\n  const { quoted_message } = message;\n\n  const poll = quoted_message?.poll_id && client.polls.fromState(quoted_message.poll_id);\n  const quotedMessageDeleted =\n    quoted_message?.deleted_at || quoted_message?.type === 'deleted';\n\n  const quotedMessageText = quotedMessageDeleted\n    ? t('This message was deleted...')\n    : quoted_message?.i18n?.[`${userLanguage}_text` as `${TranslationLanguages}_text`] ||\n      quoted_message?.text;\n\n  const quotedMessageAttachment =\n    quoted_message?.attachments?.length && !quotedMessageDeleted\n      ? quoted_message.attachments[0]\n      : null;\n\n  const renderedText = useMemo(\n    () => renderText(quotedMessageText, quoted_message?.mentioned_users),\n    [quotedMessageText, quoted_message?.mentioned_users, renderText],\n  );\n\n  if (!quoted_message) return null;\n  if (!quoted_message.poll && !quotedMessageText && !quotedMessageAttachment) return null;\n\n  return (\n    <>\n      <div\n        className={clsx('str-chat__quoted-message-preview', { mine: isMyMessage() })}\n        data-testid='quoted-message'\n        onClickCapture={(e) => {\n          e.stopPropagation();\n          e.preventDefault();\n          jumpToMessage(quoted_message.id);\n        }}\n      >\n        {quoted_message.user && (\n          <Avatar\n            className='str-chat__avatar--quoted-message-sender'\n            image={quoted_message.user.image}\n            name={quoted_message.user.name || quoted_message.user.id}\n            user={quoted_message.user}\n          />\n        )}\n        <div\n          className='str-chat__quoted-message-bubble'\n          data-testid='quoted-message-contents'\n        >\n          {poll ? (\n            <Poll isQuoted poll={poll} />\n          ) : (\n            <>\n              {quotedMessageAttachment && (\n                <Attachment attachments={[quotedMessageAttachment]} isQuoted />\n              )}\n              <div\n                className='str-chat__quoted-message-bubble__text'\n                data-testid='quoted-message-text'\n              >\n                {renderedText}\n              </div>\n            </>\n          )}\n        </div>\n      </div>\n      {message.attachments?.length ? (\n        <Attachment attachments={message.attachments} />\n      ) : null}\n    </>\n  );\n};\n", "import React from 'react';\nimport { PollContent as DefaultPollContent } from './PollContent';\nimport { QuotedPoll as DefaultQuotedPoll } from './QuotedPoll';\nimport { PollProvider, useComponentContext } from '../../context';\nimport type { Poll as PollClass } from 'stream-chat';\nimport type { DefaultStreamChatGenerics } from '../../types';\n\nexport const Poll = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n  isQuoted,\n  poll,\n}: {\n  poll: PollClass<StreamChatGenerics>;\n  isQuoted?: boolean;\n}) => {\n  const { PollContent = DefaultPollContent, QuotedPoll = DefaultQuotedPoll } =\n    useComponentContext();\n  return poll ? (\n    <PollProvider poll={poll}>{isQuoted ? <QuotedPoll /> : <PollContent />}</PollProvider>\n  ) : null;\n};\n", "import clsx from 'clsx';\nimport React from 'react';\nimport { PollHeader as DefaultPollHeader } from './PollHeader';\nimport { PollActions as DefaultPollActions } from './PollActions';\nimport { PollOptionList } from './PollOptionList';\nimport { MAX_OPTIONS_DISPLAYED } from './constants';\nimport { useComponentContext, usePollContext } from '../../context';\nimport { useStateStore } from '../../store';\nimport type { PollState } from 'stream-chat';\nimport type { DefaultStreamChatGenerics } from '../../types';\n\ntype PollStateSelectorPollContentReturnValue = { is_closed: boolean | undefined };\nconst pollStateSelectorPollContent = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  nextValue: PollState<StreamChatGenerics>,\n): PollStateSelectorPollContentReturnValue => ({ is_closed: nextValue.is_closed });\nexport const PollContent = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>() => {\n  const { PollActions = DefaultPollActions, PollHeader = DefaultPollHeader } =\n    useComponentContext<StreamChatGenerics>();\n  const { poll } = usePollContext<StreamChatGenerics>();\n  const { is_closed } = useStateStore(poll.state, pollStateSelectorPollContent);\n\n  return (\n    <div className={clsx('str-chat__poll', { 'str-chat__poll--closed': is_closed })}>\n      <PollHeader />\n      <PollOptionList optionsDisplayCount={MAX_OPTIONS_DISPLAYED} />\n      <PollActions />\n    </div>\n  );\n};\n", "import React, { useMemo } from 'react';\nimport { usePollContext, useTranslationContext } from '../../context';\nimport { useStateStore } from '../../store';\nimport type { PollOption, PollState } from 'stream-chat';\nimport type { DefaultStreamChatGenerics } from '../../types';\n\ntype PollStateSelectorReturnValue<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n  enforce_unique_vote: boolean;\n  is_closed: boolean | undefined;\n  max_votes_allowed: number;\n  name: string;\n  options: PollOption<StreamChatGenerics>[];\n};\nconst pollStateSelector = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  nextValue: PollState<StreamChatGenerics>,\n): PollStateSelectorReturnValue<StreamChatGenerics> => ({\n  enforce_unique_vote: nextValue.enforce_unique_vote,\n  is_closed: nextValue.is_closed,\n  max_votes_allowed: nextValue.max_votes_allowed,\n  name: nextValue.name,\n  options: nextValue.options,\n});\n\nexport const PollHeader = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>() => {\n  const { t } = useTranslationContext('PollHeader');\n\n  const { poll } = usePollContext<StreamChatGenerics>();\n  const { enforce_unique_vote, is_closed, max_votes_allowed, name, options } =\n    useStateStore(poll.state, pollStateSelector);\n\n  const selectionInstructions = useMemo(() => {\n    if (is_closed) return t<string>('Vote ended');\n    if (enforce_unique_vote) return t<string>('Select one');\n    if (max_votes_allowed)\n      return t<string>('Select up to {{count}}', {\n        count: max_votes_allowed > options.length ? options.length : max_votes_allowed,\n      });\n    return t<string>('Select one or more');\n  }, [is_closed, enforce_unique_vote, max_votes_allowed, options.length, t]);\n\n  if (!name) return;\n\n  return (\n    <div className='str-chat__poll-header'>\n      <div className='str-chat__poll-title'>{name}</div>\n      <div className='str-chat__poll-subtitle'>{selectionInstructions}</div>\n    </div>\n  );\n};\n", "import React from 'react';\nimport { FormDialog } from '../../Dialog/FormDialog';\nimport { useStateStore } from '../../../store';\nimport { usePollContext, useTranslationContext } from '../../../context';\nimport type { PollAnswer, PollState } from 'stream-chat';\nimport type { DefaultStreamChatGenerics } from '../../../types';\n\ntype PollStateSelectorReturnValue = { ownAnswer: PollAnswer | undefined };\nconst pollStateSelector = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  nextValue: PollState<StreamChatGenerics>,\n): PollStateSelectorReturnValue => ({ ownAnswer: nextValue.ownAnswer });\n\nexport type AddCommentFormProps = {\n  close: () => void;\n  messageId: string;\n};\n\nexport const AddCommentForm = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n  close,\n  messageId,\n}: AddCommentFormProps) => {\n  const { t } = useTranslationContext('AddCommentForm');\n\n  const { poll } = usePollContext<StreamChatGenerics>();\n  const { ownAnswer } = useStateStore(poll.state, pollStateSelector);\n\n  return (\n    <FormDialog<{ comment: '' }>\n      className='str-chat__prompt-dialog str-chat__modal__poll-add-comment'\n      close={close}\n      fields={{\n        comment: {\n          element: 'input',\n          props: {\n            id: 'comment',\n            name: 'comment',\n            required: true,\n            type: 'text',\n            value: ownAnswer?.answer_text ?? '',\n          },\n        },\n      }}\n      onSubmit={async (value) => {\n        await poll.addAnswer(value.comment, messageId);\n      }}\n      shouldDisableSubmitButton={(value) =>\n        !value.comment || value.comment === ownAnswer?.answer_text\n      }\n      title={ownAnswer ? t<string>('Update your comment') : t<string>('Add a comment')}\n    />\n  );\n};\n", "import React, {\n  ChangeEvent,\n  ChangeEventHandler,\n  ComponentProps,\n  useCallback,\n  useState,\n} from 'react';\nimport clsx from 'clsx';\nimport { FieldError } from '../Form/FieldError';\nimport { useTranslationContext } from '../../context';\n\ntype FormElements = 'input' | 'textarea';\ntype FieldId = string;\ntype Validator = (\n  value: string | readonly string[] | number | boolean | undefined,\n) => Error | undefined;\n\nexport type FieldConfig = {\n  element: FormElements;\n  props: ComponentProps<FormElements>;\n  label?: React.ReactNode;\n  validator?: Validator;\n};\n\ntype TextInputFormProps<F extends FormValue<Record<FieldId, FieldConfig>>> = {\n  close: () => void;\n  fields: Record<FieldId, FieldConfig>;\n  onSubmit: (formValue: F) => Promise<void>;\n  className?: string;\n  shouldDisableSubmitButton?: (formValue: F) => boolean;\n  title?: string;\n};\n\ntype FormValue<F extends Record<FieldId, FieldConfig>> = {\n  [K in keyof F]: F[K]['props']['value'];\n};\n\nexport const FormDialog = <\n  F extends FormValue<Record<FieldId, FieldConfig>> = FormValue<\n    Record<FieldId, FieldConfig>\n  >,\n>({\n  className,\n  close,\n  fields,\n  onSubmit,\n  shouldDisableSubmitButton,\n  title,\n}: TextInputFormProps<F>) => {\n  const { t } = useTranslationContext();\n  const [fieldErrors, setFieldErrors] = useState<Record<FieldId, Error>>({});\n  const [value, setValue] = useState<F>(() => {\n    let acc: Partial<F> = {};\n    for (const [id, config] of Object.entries(fields)) {\n      acc = { ...acc, [id]: config.props.value };\n    }\n    return acc as F;\n  });\n\n  const handleChange = useCallback<\n    ChangeEventHandler<HTMLInputElement | HTMLTextAreaElement>\n  >(\n    (event) => {\n      const fieldId = event.target.id;\n      const fieldConfig = fields[fieldId];\n      if (!fieldConfig) return;\n\n      const error = fieldConfig.validator?.(event.target.value);\n      if (error) {\n        setFieldErrors((prev) => ({ [fieldId]: error, ...prev }));\n      } else {\n        setFieldErrors((prev) => {\n          delete prev[fieldId];\n          return prev;\n        });\n      }\n      setValue((prev) => ({ ...prev, [fieldId]: event.target.value }));\n\n      if (!fieldConfig.props.onChange) return;\n\n      if (fieldConfig.element === 'input') {\n        (fieldConfig.props.onChange as ChangeEventHandler<HTMLInputElement>)(\n          event as ChangeEvent<HTMLInputElement>,\n        );\n      } else if (fieldConfig.element === 'textarea') {\n        (fieldConfig.props.onChange as ChangeEventHandler<HTMLTextAreaElement>)(\n          event as ChangeEvent<HTMLTextAreaElement>,\n        );\n      }\n    },\n    [fields],\n  );\n\n  const handleSubmit = async () => {\n    if (!Object.keys(value).length) return;\n    const errors: Record<FieldId, Error> = {};\n    for (const [id, fieldValue] of Object.entries(value)) {\n      const thisFieldError = fields[id].validator?.(fieldValue);\n      if (thisFieldError) {\n        errors[id] = thisFieldError;\n      }\n    }\n    if (Object.keys(errors).length) {\n      setFieldErrors(errors);\n      return;\n    }\n    await onSubmit(value);\n    close();\n  };\n\n  return (\n    <div className={clsx('str-chat__dialog str-chat__dialog--form', className)}>\n      <div className='str-chat__dialog__body'>\n        {title && <div className='str-chat__dialog__title'>{title}</div>}\n        <form autoComplete='off'>\n          {Object.entries(fields).map(([id, fieldConfig]) => (\n            <div className='str-chat__dialog__field' key={`dialog-field-${id}`}>\n              {fieldConfig.label && (\n                <label\n                  className={clsx(\n                    `str-chat__dialog__title str-chat__dialog__title--${id}`,\n                  )}\n                  htmlFor={id}\n                >\n                  {fieldConfig.label}\n                </label>\n              )}\n              {React.createElement(fieldConfig.element, {\n                id,\n                ...fieldConfig.props,\n                onChange: handleChange,\n                value: value[id],\n              })}\n              <FieldError text={fieldErrors[id]?.message} />\n            </div>\n          ))}\n        </form>\n      </div>\n      <div className='str-chat__dialog__controls'>\n        <button\n          className='str-chat__dialog__controls-button str-chat__dialog__controls-button--cancel'\n          onClick={close}\n        >\n          {t<string>('Cancel')}\n        </button>\n        <button\n          className='str-chat__dialog__controls-button str-chat__dialog__controls-button--submit'\n          disabled={\n            Object.keys(fieldErrors).length > 0 || shouldDisableSubmitButton?.(value)\n          }\n          onClick={handleSubmit}\n          type='submit'\n        >\n          {t<string>('Send')}\n        </button>\n      </div>\n    </div>\n  );\n};\n", "import clsx from 'clsx';\nimport React, { ComponentProps } from 'react';\n\ntype FieldErrorProps = ComponentProps<'div'> & {\n  text?: string;\n};\nexport const FieldError = ({ className, text, ...props }: FieldErrorProps) => (\n  <div {...props} className={clsx('str-chat__form-field-error', className)}>\n    {text}\n  </div>\n);\n", "import React, { ComponentProps } from 'react';\nimport clsx from 'clsx';\n\nexport type ConfirmationDialogProps = {\n  actions: ComponentProps<'button'>[];\n  prompt: string;\n  className?: string;\n  title?: string;\n};\n\nexport const PromptDialog = ({\n  actions,\n  className,\n  prompt,\n  title,\n}: ConfirmationDialogProps) => (\n  <div className={clsx('str-chat__dialog str-chat__dialog--prompt', className)}>\n    <div className='str-chat__dialog__body'>\n      {title && <div className='str-chat__dialog__title'>{title}</div>}\n      <div className='str-chat__dialog__prompt'>{prompt}</div>\n    </div>\n    <div className='str-chat__dialog__controls'>\n      {actions.map(({ className, ...props }, i) => (\n        <button\n          className={clsx(`str-chat__dialog__controls-button`, className)}\n          key={`prompt-dialog__controls-button--${i}`}\n          {...props}\n        />\n      ))}\n    </div>\n  </div>\n);\n", "import { PromptDialog } from '../../Dialog/PromptDialog';\nimport React from 'react';\nimport { usePollContext, useTranslationContext } from '../../../context';\nimport type { DefaultStreamChatGenerics } from '../../../types';\n\nexport type EndPollDialogProps = {\n  close: () => void;\n};\n\nexport const EndPollDialog = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n  close,\n}: EndPollDialogProps) => {\n  const { t } = useTranslationContext('SuggestPollOptionForm');\n  const { poll } = usePollContext<StreamChatGenerics>();\n\n  return (\n    <PromptDialog\n      actions={[\n        {\n          children: t<string>('Cancel'),\n          className: 'str-chat__dialog__controls-button--cancel',\n          onClick: close,\n        },\n        {\n          children: t<string>('End'),\n          className:\n            '.str-chat__dialog__controls-button--submit str-chat__dialog__controls-button--end-poll',\n          onClick: poll.close,\n        },\n      ]}\n      className='str-chat__modal__end-vote'\n      prompt={t<string>('Nobody will be able to vote in this poll anymore.')}\n      title={t<string>('End vote')}\n    />\n  );\n};\n", "import React, { useCallback, useState } from 'react';\nimport { PollAction } from './PollAction';\nimport {\n  AddCommentFormProps,\n  AddCommentForm as DefaultAddCommentForm,\n} from './AddCommentForm';\nimport {\n  SuggestPollOptionForm as DefaultSuggestPollOptionForm,\n  SuggestPollOptionFormProps,\n} from './SuggestPollOptionForm';\nimport {\n  EndPollDialog as DefaultEndPollDialog,\n  EndPollDialogProps,\n} from './EndPollDialog';\nimport {\n  PollAnswerList as DefaultPollAnswerList,\n  PollAnswerListProps,\n} from './PollAnswerList';\nimport {\n  PollOptionsFullList as DefaultPollOptionsFullList,\n  FullPollOptionsListingProps,\n} from './PollOptionsFullList';\nimport { PollResults as DefaultPollResults, PollResultsProps } from './PollResults';\nimport { MAX_OPTIONS_DISPLAYED, MAX_POLL_OPTIONS } from '../constants';\nimport {\n  useChannelStateContext,\n  useChatContext,\n  useMessageContext,\n  usePollContext,\n  useTranslationContext,\n} from '../../../context';\nimport { useStateStore } from '../../../store';\n\nimport type { PollAnswer, PollOption, PollState } from 'stream-chat';\nimport type { DefaultStreamChatGenerics } from '../../../types';\n\ntype ModalName =\n  | 'suggest-option'\n  | 'add-comment'\n  | 'view-all-options'\n  | 'view-comments'\n  | 'view-results'\n  | 'end-vote';\n\ntype PollStateSelectorReturnValue = {\n  allow_answers: boolean | undefined;\n  allow_user_suggested_options: boolean | undefined;\n  answers_count: number;\n  created_by_id: string;\n  is_closed: boolean | undefined;\n  options: PollOption[];\n  ownAnswer: PollAnswer | undefined;\n};\nconst pollStateSelector = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  nextValue: PollState<StreamChatGenerics>,\n): PollStateSelectorReturnValue => ({\n  allow_answers: nextValue.allow_answers,\n  allow_user_suggested_options: nextValue.allow_user_suggested_options,\n  answers_count: nextValue.answers_count,\n  created_by_id: nextValue.created_by_id,\n  is_closed: nextValue.is_closed,\n  options: nextValue.options,\n  ownAnswer: nextValue.ownAnswer,\n});\n\nexport type PollActionsProps = {\n  AddCommentForm?: React.ComponentType<AddCommentFormProps>;\n  EndPollDialog?: React.ComponentType<EndPollDialogProps>;\n  PollAnswerList?: React.ComponentType<PollAnswerListProps>;\n  PollOptionsFullList?: React.ComponentType<FullPollOptionsListingProps>;\n  PollResults?: React.ComponentType<PollResultsProps>;\n  SuggestPollOptionForm?: React.ComponentType<SuggestPollOptionFormProps>;\n};\n\nexport const PollActions = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n  AddCommentForm = DefaultAddCommentForm,\n  EndPollDialog = DefaultEndPollDialog,\n  PollAnswerList = DefaultPollAnswerList,\n  PollOptionsFullList = DefaultPollOptionsFullList,\n  PollResults = DefaultPollResults,\n  SuggestPollOptionForm = DefaultSuggestPollOptionForm,\n}: PollActionsProps) => {\n  const { client } = useChatContext();\n  const { t } = useTranslationContext('PollActions');\n  const { channelCapabilities = {} } =\n    useChannelStateContext<StreamChatGenerics>('PollActions');\n  const { message } = useMessageContext('PollActions');\n  const { poll } = usePollContext<StreamChatGenerics>();\n  const {\n    allow_answers,\n    allow_user_suggested_options,\n    answers_count,\n    created_by_id,\n    is_closed,\n    options,\n    ownAnswer,\n  } = useStateStore(poll.state, pollStateSelector);\n  const [modalOpen, setModalOpen] = useState<ModalName | undefined>();\n\n  const closeModal = useCallback(() => setModalOpen(undefined), []);\n  const onUpdateAnswerClick = useCallback(() => setModalOpen('add-comment'), []);\n\n  return (\n    <div className='str-chat__poll-actions'>\n      {options.length > MAX_OPTIONS_DISPLAYED && (\n        <PollAction\n          buttonText={t<string>('See all options ({{count}})', {\n            count: options.length,\n          })}\n          closeModal={closeModal}\n          modalIsOpen={modalOpen === 'view-all-options'}\n          openModal={() => setModalOpen('view-all-options')}\n        >\n          <PollOptionsFullList close={closeModal} />\n        </PollAction>\n      )}\n\n      {!is_closed &&\n        allow_user_suggested_options &&\n        options.length < MAX_POLL_OPTIONS && (\n          <PollAction\n            buttonText={t<string>('Suggest an option')}\n            closeModal={closeModal}\n            modalClassName='str-chat__suggest-poll-option-modal'\n            modalIsOpen={modalOpen === 'suggest-option'}\n            openModal={() => setModalOpen('suggest-option')}\n          >\n            <SuggestPollOptionForm close={closeModal} messageId={message.id} />\n          </PollAction>\n        )}\n\n      {!is_closed && allow_answers && (\n        <PollAction\n          buttonText={\n            ownAnswer ? t<string>('Update your comment') : t<string>('Add a comment')\n          }\n          closeModal={closeModal}\n          modalClassName='str-chat__add-poll-answer-modal'\n          modalIsOpen={modalOpen === 'add-comment'}\n          openModal={() => setModalOpen('add-comment')}\n        >\n          <AddCommentForm close={closeModal} messageId={message.id} />\n        </PollAction>\n      )}\n\n      {answers_count > 0 && channelCapabilities['query-poll-votes'] && (\n        <PollAction\n          buttonText={t<string>('View {{count}} comments', { count: answers_count })}\n          closeModal={closeModal}\n          modalClassName='str-chat__poll-answer-list-modal'\n          modalIsOpen={modalOpen === 'view-comments'}\n          openModal={() => setModalOpen('view-comments')}\n        >\n          <PollAnswerList\n            close={closeModal}\n            onUpdateOwnAnswerClick={onUpdateAnswerClick}\n          />\n        </PollAction>\n      )}\n\n      <PollAction\n        buttonText={t<string>('View results')}\n        closeModal={closeModal}\n        modalClassName='str-chat__poll-results-modal'\n        modalIsOpen={modalOpen === 'view-results'}\n        openModal={() => setModalOpen('view-results')}\n      >\n        <PollResults close={closeModal} />\n      </PollAction>\n\n      {!is_closed && created_by_id === client.user?.id && (\n        <PollAction\n          buttonText={t<string>('End vote')}\n          closeModal={closeModal}\n          modalClassName='str-chat__end-poll-modal'\n          modalIsOpen={modalOpen === 'end-vote'}\n          openModal={() => setModalOpen('end-vote')}\n        >\n          <EndPollDialog close={closeModal} />\n        </PollAction>\n      )}\n    </div>\n  );\n};\n", "import React, { PropsWithChildren } from 'react';\nimport { Modal } from '../../Modal';\n\nexport type PollActionProps = {\n  buttonText: string;\n  closeModal: () => void;\n  modalIsOpen: boolean;\n  openModal: () => void;\n  modalClassName?: string;\n};\n\nexport const PollAction = ({\n  buttonText,\n  children,\n  closeModal,\n  modalClassName,\n  modalIsOpen,\n  openModal,\n}: PropsWithChildren<PollActionProps>) => (\n  <>\n    <button className='str-chat__poll-action' onClick={openModal}>\n      {buttonText}\n    </button>\n    <Modal className={modalClassName} onClose={closeModal} open={modalIsOpen}>\n      {children}\n    </Modal>\n  </>\n);\n", "import React from 'react';\nimport { FormDialog } from '../../Dialog/FormDialog';\nimport { useChatContext, usePollContext, useTranslationContext } from '../../../context';\nimport { useStateStore } from '../../../store';\nimport type { PollOption, PollState } from 'stream-chat';\nimport type { DefaultStreamChatGenerics } from '../../../types';\n\ntype PollStateSelectorReturnValue<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = { options: PollOption<StreamChatGenerics>[] };\nconst pollStateSelector = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  nextValue: PollState<StreamChatGenerics>,\n): PollStateSelectorReturnValue<StreamChatGenerics> => ({ options: nextValue.options });\n\nexport type SuggestPollOptionFormProps = {\n  close: () => void;\n  messageId: string;\n};\n\nexport const SuggestPollOptionForm = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n  close,\n  messageId,\n}: SuggestPollOptionFormProps) => {\n  const { client } = useChatContext('SuggestPollOptionForm');\n  const { t } = useTranslationContext('SuggestPollOptionForm');\n  const { poll } = usePollContext<StreamChatGenerics>();\n  const { options } = useStateStore(poll.state, pollStateSelector);\n\n  return (\n    <FormDialog<{ optionText: '' }>\n      className='str-chat__prompt-dialog str-chat__modal__suggest-poll-option'\n      close={close}\n      fields={{\n        optionText: {\n          element: 'input',\n          props: {\n            id: 'optionText',\n            name: 'optionText',\n            required: true,\n            type: 'text',\n            value: '',\n          },\n          validator: (value) => {\n            if (!value) return;\n            const existingOption = options.find(\n              (option) => option.text === (value as string).trim(),\n            );\n            if (existingOption) {\n              return new Error(t<string>('Option already exists'));\n            }\n            return;\n          },\n        },\n      }}\n      onSubmit={async (value) => {\n        const { poll_option } = await client.createPollOption(poll.id, {\n          text: value.optionText,\n        });\n        poll.castVote(poll_option.id, messageId);\n      }}\n      shouldDisableSubmitButton={(value) => !value.optionText}\n      title={t<string>('Suggest an option')}\n    />\n  );\n};\n", "import React from 'react';\nimport { ModalHeader } from '../../Modal/ModalHeader';\nimport { PollVote } from '../PollVote';\nimport { usePollAnswerPagination } from '../hooks';\nimport { InfiniteScrollPaginator } from '../../InfiniteScrollPaginator/InfiniteScrollPaginator';\nimport { LoadingIndicator } from '../../Loading';\nimport { useStateStore } from '../../../store';\nimport { usePollContext, useTranslationContext } from '../../../context';\n\nimport type { DefaultStreamChatGenerics } from '../../../types';\nimport type { PollAnswer, PollState } from 'stream-chat';\n\ntype PollStateSelectorReturnValue = {\n  is_closed: boolean | undefined;\n  ownAnswer: PollAnswer | undefined;\n};\nconst pollStateSelector = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  nextValue: PollState<StreamChatGenerics>,\n): PollStateSelectorReturnValue => ({\n  is_closed: nextValue.is_closed,\n  ownAnswer: nextValue.ownAnswer,\n});\n\nexport type PollAnswerListProps = {\n  onUpdateOwnAnswerClick: () => void;\n  close?: () => void;\n};\n\nexport const PollAnswerList = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n  close,\n  onUpdateOwnAnswerClick,\n}: PollAnswerListProps) => {\n  const { t } = useTranslationContext();\n  const { poll } = usePollContext<StreamChatGenerics>();\n  const { is_closed, ownAnswer } = useStateStore(poll.state, pollStateSelector);\n\n  const { answers, error, hasNextPage, loading, loadMore } =\n    usePollAnswerPagination<StreamChatGenerics>();\n\n  return (\n    <div className='str-chat__modal__poll-answer-list'>\n      <ModalHeader close={close} title={t<string>('Poll comments')} />\n      <div className='str-chat__modal__poll-answer-list__body'>\n        <InfiniteScrollPaginator loadNextOnScrollToBottom={loadMore} threshold={40}>\n          <div className='str-chat__poll-answer-list'>\n            {answers.map((answer) => (\n              <div className='str-chat__poll-answer' key={`comment-${answer.id}`}>\n                {answer.answer_text && (\n                  <p className='str-chat__poll-answer__text'>{answer.answer_text}</p>\n                )}\n                <PollVote key={`poll-vote-${answer.id}`} vote={answer} />\n              </div>\n            ))}\n          </div>\n          {hasNextPage && (\n            <div className='str-chat__loading-indicator-placeholder'>\n              {loading && <LoadingIndicator />}\n            </div>\n          )}\n        </InfiniteScrollPaginator>\n        {error?.message && <div>{error?.message}</div>}\n      </div>\n      {answers.length > 0 && !is_closed && (\n        <button className='str-chat__poll-action' onClick={onUpdateOwnAnswerClick}>\n          {ownAnswer ? t<string>('Update your comment') : t<string>('Add a comment')}\n        </button>\n      )}\n    </div>\n  );\n};\n", "import React from 'react';\nimport clsx from 'clsx';\n\nexport type ModalHeaderProps = {\n  title: string;\n  className?: string;\n  close?: () => void;\n  goBack?: () => void;\n};\n\nexport const ModalHeader = ({ className, close, goBack, title }: ModalHeaderProps) => (\n  <div className={clsx('str-chat__modal-header', className)}>\n    {goBack && (\n      <button className='str-chat__modal-header__go-back-button' onClick={goBack} />\n    )}\n    <div className='str-chat__modal-header__title'>{title}</div>\n    {close && <button className='str-chat__modal-header__close-button' onClick={close} />}\n  </div>\n);\n", "import React, { useState } from 'react';\nimport { Avatar } from '../Avatar';\nimport { PopperTooltip } from '../Tooltip';\nimport { useEnterLeaveHandlers } from '../Tooltip/hooks';\nimport { useChatContext, useTranslationContext } from '../../context';\n\nimport type { PollVote as PollVoteType } from 'stream-chat';\nimport type { DefaultStreamChatGenerics } from '../../types';\n\nconst PollVoteTimestamp = ({ timestamp }: { timestamp: string }) => {\n  const { t } = useTranslationContext();\n  const { handleEnter, handleLeave, tooltipVisible } =\n    useEnterLeaveHandlers<HTMLSpanElement>();\n  const [referenceElement, setReferenceElement] = useState<HTMLSpanElement | null>(null);\n  const timestampDate = new Date(timestamp);\n  return (\n    <div\n      className='str-chat__poll-vote__timestamp'\n      onMouseEnter={handleEnter}\n      onMouseLeave={handleLeave}\n      ref={setReferenceElement}\n    >\n      {t<string>('timestamp/PollVote', { timestamp: timestampDate })}\n      <PopperTooltip\n        offset={[0, 5]}\n        placement='bottom'\n        referenceElement={referenceElement}\n        visible={tooltipVisible}\n      >\n        {t<string>('timestamp/PollVoteTooltip', { timestamp: timestampDate })}\n      </PopperTooltip>\n    </div>\n  );\n};\n\ntype PollVoteProps<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n  vote: PollVoteType<StreamChatGenerics>;\n};\n\nconst PollVoteAuthor = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n  vote,\n}: PollVoteProps<StreamChatGenerics>) => {\n  const { t } = useTranslationContext();\n  const { client } = useChatContext();\n  const { handleEnter, handleLeave, tooltipVisible } =\n    useEnterLeaveHandlers<HTMLSpanElement>();\n  const [referenceElement, setReferenceElement] = useState<HTMLSpanElement | null>(null);\n  const displayName =\n    client.user?.id && client.user.id === vote.user?.id\n      ? t<string>('You')\n      : vote.user?.name || t<string>('Anonymous');\n\n  return (\n    <div\n      className='str-chat__poll-vote__author'\n      onMouseEnter={handleEnter}\n      onMouseLeave={handleLeave}\n      ref={setReferenceElement}\n    >\n      {vote.user && (\n        <Avatar\n          className='str-chat__avatar--poll-vote-author'\n          image={vote.user.image}\n          key={`poll-vote-${vote.id}-avatar-${vote.user.id}`}\n          name={vote.user.name}\n        />\n      )}\n      <div className='str-chat__poll-vote__author__name'>{displayName}</div>\n      <PopperTooltip\n        offset={[0, 5]}\n        placement='bottom'\n        referenceElement={referenceElement}\n        visible={tooltipVisible}\n      >\n        {displayName}\n      </PopperTooltip>\n    </div>\n  );\n};\n\nexport const PollVote = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n  vote,\n}: PollVoteProps<StreamChatGenerics>) => (\n  <div className='str-chat__poll-vote'>\n    <PollVoteAuthor vote={vote} />\n    <PollVoteTimestamp timestamp={vote.created_at} />\n  </div>\n);\n\nexport type PollVoteListingProps<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n  votes: PollVoteType<StreamChatGenerics>[];\n};\n\nexport const PollVoteListing = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n  votes,\n}: PollVoteListingProps<StreamChatGenerics>) => (\n  <div className='str-chat__poll-vote-listing'>\n    {votes.map((vote) => (\n      <PollVote key={`poll-vote-${vote.id}`} vote={vote} />\n    ))}\n  </div>\n);\n", "import { useCallback } from 'react';\nimport { useManagePollVotesRealtime } from './useManagePollVotesRealtime';\nimport {\n  CursorPaginatorState,\n  PaginationFn,\n  useCursorPaginator,\n} from '../../InfiniteScrollPaginator/hooks/useCursorPaginator';\nimport { usePollContext } from '../../../context';\n\nimport { useStateStore } from '../../../store';\nimport type { PollAnswer, PollAnswersQueryParams, PollVote } from 'stream-chat';\nimport type { DefaultStreamChatGenerics } from '../../../types';\n\nconst paginationStateSelector = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  state: CursorPaginatorState<PollVote<StreamChatGenerics>>,\n): [Error | undefined, boolean, boolean] => [\n  state.error,\n  state.hasNextPage,\n  state.loading,\n];\n\ntype UsePollAnswerPaginationParams = {\n  paginationParams?: PollAnswersQueryParams;\n};\n\nexport const usePollAnswerPagination = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({ paginationParams }: UsePollAnswerPaginationParams = {}) => {\n  const { poll } = usePollContext<StreamChatGenerics>();\n\n  const paginationFn = useCallback<PaginationFn<PollAnswer>>(\n    async (next) => {\n      const { next: newNext, votes } = await poll.queryAnswers({\n        filter: paginationParams?.filter,\n        options: !next\n          ? paginationParams?.options\n          : { ...paginationParams?.options, next },\n        sort: { created_at: -1, ...paginationParams?.sort },\n      });\n      return { items: votes, next: newNext };\n    },\n    [paginationParams, poll],\n  );\n\n  const { cursorPaginatorState, loadMore } = useCursorPaginator(paginationFn, true);\n  const answers = useManagePollVotesRealtime<\n    StreamChatGenerics,\n    PollAnswer<StreamChatGenerics>\n  >('answer', cursorPaginatorState);\n  const [error, hasNextPage, loading] = useStateStore(\n    cursorPaginatorState,\n    paginationStateSelector,\n  );\n\n  return {\n    answers,\n    error,\n    hasNextPage,\n    loading,\n    loadMore,\n  };\n};\n", "import { useEffect, useState } from 'react';\nimport { isVoteAnswer } from 'stream-chat';\nimport { useChatContext } from '../../../context';\nimport type { Event, PollAnswer, PollVote } from 'stream-chat';\nimport type { DefaultStreamChatGenerics } from '../../../types';\nimport { CursorPaginatorStateStore } from '../../InfiniteScrollPaginator/hooks/useCursorPaginator';\n\nexport function useManagePollVotesRealtime<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n  T extends\n    | PollVote<StreamChatGenerics>\n    | PollAnswer<StreamChatGenerics> = PollVote<StreamChatGenerics>,\n>(\n  managedVoteType: 'answer' | 'vote',\n  cursorPaginatorState?: CursorPaginatorStateStore<T>,\n  optionId?: string,\n) {\n  const { client } = useChatContext<StreamChatGenerics>();\n  const [votesInRealtime, setVotesInRealtime] = useState<T[]>(\n    cursorPaginatorState?.getLatestValue().items ?? [],\n  );\n\n  useEffect(\n    () =>\n      cursorPaginatorState?.subscribeWithSelector(\n        (state) => [state.latestPageItems],\n        ([latestPageItems]) =>\n          setVotesInRealtime((prev) => [...prev, ...latestPageItems]),\n      ),\n    [cursorPaginatorState],\n  );\n\n  useEffect(() => {\n    const handleVoteEvent = (event: Event<StreamChatGenerics>) => {\n      if (!event.poll_vote) return;\n      const isAnswer = isVoteAnswer(event.poll_vote);\n      if (\n        (managedVoteType === 'answer' && !isAnswer) ||\n        (managedVoteType === 'vote' &&\n          (isAnswer || event.poll_vote.option_id !== optionId))\n      )\n        return;\n\n      if (event.type === 'poll.vote_removed') {\n        setVotesInRealtime((prev) =>\n          event.poll_vote\n            ? prev.filter((vote) => vote.id !== (event.poll_vote as T).id)\n            : prev,\n        );\n      }\n      if (event.type === 'poll.vote_changed') {\n        setVotesInRealtime((prev) =>\n          event.poll_vote\n            ? prev.filter((vote) => vote.id !== (event.poll_vote as T).id)\n            : prev,\n        );\n      }\n      if (['poll.vote_casted', 'poll.vote_changed'].includes(event.type)) {\n        setVotesInRealtime((prev) =>\n          event.poll_vote ? [event.poll_vote as T, ...prev] : prev,\n        );\n      }\n    };\n\n    const voteCastedSubscription = client.on('poll.vote_casted', handleVoteEvent);\n    const voteRemovedSubscription = client.on('poll.vote_removed', handleVoteEvent);\n    const voteChangedSubscription = client.on('poll.vote_changed', handleVoteEvent);\n\n    return () => {\n      voteCastedSubscription.unsubscribe();\n      voteRemovedSubscription.unsubscribe();\n      voteChangedSubscription.unsubscribe();\n    };\n  }, [client, optionId, managedVoteType]);\n\n  return votesInRealtime;\n}\n", "import uniqBy from 'lodash.uniqby';\nimport { useCallback, useEffect, useMemo } from 'react';\nimport { StateStore } from 'stream-chat';\n\nexport type CursorPaginatorState<T> = {\n  hasNextPage: boolean;\n  items: T[];\n  latestPageItems: T[];\n  loading: boolean;\n  error?: Error;\n  next?: string | null;\n};\n\nexport type CursorPaginatorStateStore<T> = StateStore<CursorPaginatorState<T>>;\n\nexport type PaginationFn<T> = (next?: string) => Promise<{ items: T[]; next?: string }>;\n\nexport const useCursorPaginator = <T>(\n  paginationFn: PaginationFn<T>,\n  loadFirstPage?: boolean,\n) => {\n  const cursorPaginatorState = useMemo(\n    () =>\n      new StateStore<CursorPaginatorState<T>>({\n        hasNextPage: true,\n        items: [],\n        latestPageItems: [],\n        loading: false,\n      }),\n    [],\n  );\n\n  const loadMore = useCallback(async () => {\n    const { loading, next: currentNext } = cursorPaginatorState.getLatestValue();\n    if (currentNext === null || loading) return;\n\n    cursorPaginatorState.partialNext({ loading: true });\n\n    try {\n      const { items, next } = await paginationFn(currentNext);\n      cursorPaginatorState.next((prev) => ({\n        ...prev,\n        hasNextPage: !!next,\n        items: uniqBy(prev.items.concat(items), 'id'),\n        latestPageItems: items,\n        next: next || null,\n      }));\n    } catch (error) {\n      cursorPaginatorState.partialNext({ error: error as Error });\n    }\n    cursorPaginatorState.partialNext({ loading: false });\n  }, [cursorPaginatorState, paginationFn]);\n\n  useEffect(() => {\n    const { items } = cursorPaginatorState.getLatestValue();\n    if (!loadFirstPage || items.length) return;\n    loadMore();\n  }, [cursorPaginatorState, loadFirstPage, loadMore]);\n\n  return {\n    cursorPaginatorState,\n    loadMore,\n  };\n};\n", "import { useCallback } from 'react';\nimport { useManagePollVotesRealtime } from './useManagePollVotesRealtime';\nimport {\n  CursorPaginatorState,\n  PaginationFn,\n  useCursorPaginator,\n} from '../../InfiniteScrollPaginator/hooks/useCursorPaginator';\nimport { useStateStore } from '../../../store';\nimport { usePollContext } from '../../../context';\n\nimport type { DefaultStreamChatGenerics } from '../../../types';\nimport type { PollOptionVotesQueryParams, PollVote } from 'stream-chat';\n\nconst paginationStateSelector = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  state: CursorPaginatorState<PollVote<StreamChatGenerics>>,\n): [Error | undefined, boolean, boolean] => [\n  state.error,\n  state.hasNextPage,\n  state.loading,\n];\n\ntype UsePollOptionVotesPaginationParams = {\n  paginationParams: PollOptionVotesQueryParams;\n};\n\nexport const usePollOptionVotesPagination = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n  paginationParams,\n}: UsePollOptionVotesPaginationParams) => {\n  const { poll } = usePollContext<StreamChatGenerics>();\n\n  const paginationFn = useCallback<PaginationFn<PollVote<StreamChatGenerics>>>(\n    async (next) => {\n      const { next: newNext, votes } = await poll.queryOptionVotes({\n        filter: paginationParams.filter,\n        options: !next\n          ? paginationParams?.options\n          : { ...paginationParams?.options, next },\n        sort: { created_at: -1, ...paginationParams?.sort },\n      });\n      return { items: votes, next: newNext };\n    },\n    [paginationParams, poll],\n  );\n\n  const { cursorPaginatorState, loadMore } = useCursorPaginator(paginationFn, true);\n  const votes = useManagePollVotesRealtime<\n    StreamChatGenerics,\n    PollVote<StreamChatGenerics>\n  >('vote', cursorPaginatorState, paginationParams.filter.option_id);\n  const [error, hasNextPage, loading] = useStateStore(\n    cursorPaginatorState,\n    paginationStateSelector,\n  );\n\n  return {\n    error,\n    hasNextPage,\n    loading,\n    loadMore,\n    votes,\n  };\n};\n", "import clsx from 'clsx';\nimport debounce from 'lodash.debounce';\nimport React, { PropsWithChildren, useEffect, useMemo, useRef } from 'react';\nimport { DEFAULT_LOAD_PAGE_SCROLL_THRESHOLD } from '../../constants/limits';\n\n/**\n * Prevents Chrome hangups\n * See: https://stackoverflow.com/questions/47524205/random-high-content-download-time-in-chrome/47684257#47684257\n */\nconst mousewheelListener = (event: Event) => {\n  if (event instanceof WheelEvent && event.deltaY === 1) {\n    event.preventDefault();\n  }\n};\n\nexport type InfiniteScrollPaginatorProps = React.ComponentProps<'div'> & {\n  listenToScroll?: (\n    distanceFromBottom: number,\n    distanceFromTop: number,\n    threshold: number,\n  ) => void;\n  loadNextDebounceMs?: number;\n  loadNextOnScrollToBottom?: () => void;\n  loadNextOnScrollToTop?: () => void;\n  /** Offset from when to start the loadNextPage call */\n  threshold?: number;\n  useCapture?: boolean;\n};\n\nexport const InfiniteScrollPaginator = (\n  props: PropsWithChildren<InfiniteScrollPaginatorProps>,\n) => {\n  const {\n    children,\n    className,\n    listenToScroll,\n    loadNextDebounceMs = 500,\n    loadNextOnScrollToBottom,\n    loadNextOnScrollToTop,\n    threshold = DEFAULT_LOAD_PAGE_SCROLL_THRESHOLD,\n    useCapture = false,\n    ...componentProps\n  } = props;\n\n  const rootRef = useRef<HTMLDivElement | null>(null);\n  const childRef = useRef<HTMLDivElement | null>(null);\n\n  const scrollListener = useMemo(\n    () =>\n      debounce(() => {\n        const root = rootRef.current;\n        const child = childRef.current;\n        if (!root || root.offsetParent === null || !child) {\n          return;\n        }\n\n        const distanceFromBottom =\n          child.scrollHeight - root.scrollTop - root.clientHeight;\n        const distanceFromTop = root.scrollTop;\n\n        if (listenToScroll) {\n          listenToScroll(distanceFromBottom, distanceFromTop, threshold);\n        }\n\n        if (distanceFromTop < Number(threshold)) {\n          loadNextOnScrollToTop?.();\n        }\n\n        if (distanceFromBottom < Number(threshold)) {\n          loadNextOnScrollToBottom?.();\n        }\n      }, loadNextDebounceMs),\n    [\n      listenToScroll,\n      loadNextDebounceMs,\n      loadNextOnScrollToBottom,\n      loadNextOnScrollToTop,\n      threshold,\n    ],\n  );\n\n  useEffect(() => {\n    const scrollElement = rootRef.current;\n    if (!scrollElement) return;\n\n    scrollElement.addEventListener('scroll', scrollListener, useCapture);\n\n    return () => {\n      scrollElement.removeEventListener('scroll', scrollListener, useCapture);\n    };\n  }, [scrollListener, useCapture]);\n\n  useEffect(() => {\n    const root = rootRef.current;\n    if (!root || typeof ResizeObserver === 'undefined' || !scrollListener) return;\n    const observer = new ResizeObserver(scrollListener);\n    observer.observe(root as Element);\n\n    return () => {\n      observer.disconnect();\n    };\n  }, [scrollListener]);\n\n  useEffect(() => {\n    const root = rootRef.current;\n    if (root) {\n      root.addEventListener('wheel', mousewheelListener, { passive: false });\n    }\n    return () => {\n      if (root) {\n        root.removeEventListener('wheel', mousewheelListener, useCapture);\n      }\n    };\n  }, [useCapture]);\n\n  return (\n    <div\n      {...componentProps}\n      className={clsx('str-chat__infinite-scroll-paginator', className)}\n      ref={rootRef}\n    >\n      <div className='str-chat__infinite-scroll-paginator__content' ref={childRef}>\n        {children}\n      </div>\n    </div>\n  );\n};\n", "import React from 'react';\nimport { ModalHeader } from '../../Modal/ModalHeader';\nimport { PollOptionList } from '../PollOptionList';\nimport { useStateStore } from '../../../store';\nimport { usePollContext, useTranslationContext } from '../../../context';\n\nimport type { PollState } from 'stream-chat';\nimport type { DefaultStreamChatGenerics } from '../../../types';\n\ntype PollStateSelectorReturnValue = { name: string };\nconst pollStateSelector = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  nextValue: PollState<StreamChatGenerics>,\n): PollStateSelectorReturnValue => ({ name: nextValue.name });\n\nexport type FullPollOptionsListingProps = {\n  close?: () => void;\n};\n\nexport const PollOptionsFullList = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n  close,\n}: FullPollOptionsListingProps) => {\n  const { t } = useTranslationContext();\n  const { poll } = usePollContext<StreamChatGenerics>();\n  const { name } = useStateStore(poll.state, pollStateSelector);\n\n  return (\n    <div className={'str-chat__modal__poll-option-list'}>\n      <ModalHeader close={close} title={t<string>('Poll options')} />\n      <div className='str-chat__modal__poll-option-list__body'>\n        <div className='str-chat__modal__poll-option-list__title'>{name}</div>\n        <PollOptionList />\n      </div>\n    </div>\n  );\n};\n", "import clsx from 'clsx';\nimport React from 'react';\nimport { PollOptionSelector as DefaultPollOptionSelector } from './PollOptionSelector';\nimport { useStateStore } from '../../store';\nimport { useComponentContext, usePollContext } from '../../context';\nimport type { PollOption, PollState } from 'stream-chat';\nimport type { DefaultStreamChatGenerics } from '../../types';\n\ntype PollStateSelectorReturnValue<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = { options: PollOption<StreamChatGenerics>[] };\n\nconst pollStateSelector = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  nextValue: PollState<StreamChatGenerics>,\n): PollStateSelectorReturnValue<StreamChatGenerics> => ({ options: nextValue.options });\n\nexport type PollOptionListProps = {\n  optionsDisplayCount?: number;\n};\n\nexport const PollOptionList = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n  optionsDisplayCount,\n}: PollOptionListProps) => {\n  const { PollOptionSelector = DefaultPollOptionSelector } =\n    useComponentContext<StreamChatGenerics>();\n  const { poll } = usePollContext<StreamChatGenerics>();\n  const { options } = useStateStore(poll.state, pollStateSelector);\n\n  return (\n    <div\n      className={clsx('str-chat__poll-option-list', {\n        'str-chat__poll-option-list--full': typeof optionsDisplayCount === 'undefined',\n      })}\n    >\n      {options.slice(0, optionsDisplayCount ?? options.length).map((option) => (\n        <PollOptionSelector\n          displayAvatarCount={3}\n          key={`poll-option-${option.id}`}\n          option={option}\n        />\n      ))}\n    </div>\n  );\n};\n", "import clsx from 'clsx';\nimport debounce from 'lodash.debounce';\nimport React, { useMemo } from 'react';\nimport { isVoteAnswer, VotingVisibility } from 'stream-chat';\nimport { Avatar } from '../Avatar';\nimport {\n  useChannelStateContext,\n  useMessageContext,\n  usePollContext,\n  useTranslationContext,\n} from '../../context';\nimport { useStateStore } from '../../store';\nimport type { PollOption, PollState, PollVote } from 'stream-chat';\nimport type { DefaultStreamChatGenerics } from '../../types';\n\ntype AmountBarProps = {\n  amount: number;\n  className?: string;\n};\n\nexport const AmountBar = ({ amount, className }: AmountBarProps) => (\n  <div\n    className={clsx('str-chat__amount-bar', className)}\n    data-testid='amount-bar'\n    role='progressbar'\n    style={\n      {\n        '--str-chat__amount-bar-fulfillment': amount + '%',\n      } as React.CSSProperties\n    }\n  />\n);\n\nexport type CheckmarkProps = { checked?: boolean };\n\nexport const Checkmark = ({ checked }: CheckmarkProps) => (\n  <div\n    className={clsx('str-chat__checkmark', { 'str-chat__checkmark--checked': checked })}\n  />\n);\n\ntype PollStateSelectorReturnValue<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n  is_closed: boolean | undefined;\n  latest_votes_by_option: Record<string, PollVote<StreamChatGenerics>[]>;\n  maxVotedOptionIds: string[];\n  ownVotesByOptionId: Record<string, PollVote<StreamChatGenerics>>;\n  vote_counts_by_option: Record<string, number>;\n  voting_visibility: VotingVisibility | undefined;\n};\nconst pollStateSelector = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  nextValue: PollState<StreamChatGenerics>,\n): PollStateSelectorReturnValue<StreamChatGenerics> => ({\n  is_closed: nextValue.is_closed,\n  latest_votes_by_option: nextValue.latest_votes_by_option,\n  maxVotedOptionIds: nextValue.maxVotedOptionIds,\n  ownVotesByOptionId: nextValue.ownVotesByOptionId,\n  vote_counts_by_option: nextValue.vote_counts_by_option,\n  voting_visibility: nextValue.voting_visibility,\n});\n\nexport type PollOptionSelectorProps<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n  option: PollOption<StreamChatGenerics>;\n  displayAvatarCount?: number;\n  voteCountVerbose?: boolean;\n};\n\nexport const PollOptionSelector = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n  displayAvatarCount,\n  option,\n  voteCountVerbose,\n}: PollOptionSelectorProps<StreamChatGenerics>) => {\n  const { t } = useTranslationContext();\n  const { channelCapabilities = {} } =\n    useChannelStateContext<StreamChatGenerics>('PollOptionsShortlist');\n  const { message } = useMessageContext();\n\n  const { poll } = usePollContext<StreamChatGenerics>();\n  const {\n    is_closed,\n    latest_votes_by_option,\n    maxVotedOptionIds,\n    ownVotesByOptionId,\n    vote_counts_by_option,\n    voting_visibility,\n  } = useStateStore(poll.state, pollStateSelector);\n  const canCastVote = channelCapabilities['cast-poll-vote'] && !is_closed;\n  const winningOptionCount = maxVotedOptionIds[0]\n    ? vote_counts_by_option[maxVotedOptionIds[0]]\n    : 0;\n\n  const toggleVote = useMemo(\n    () =>\n      debounce(() => {\n        if (!canCastVote) return;\n        const haveVotedForTheOption = !!ownVotesByOptionId[option.id];\n        return haveVotedForTheOption\n          ? poll.removeVote(ownVotesByOptionId[option.id].id, message.id)\n          : poll.castVote(option.id, message.id);\n      }, 100),\n    [canCastVote, message.id, option.id, ownVotesByOptionId, poll],\n  );\n\n  return (\n    <div\n      className={clsx('str-chat__poll-option', {\n        'str-chat__poll-option--votable': canCastVote,\n      })}\n      key={`base-poll-option-${option.id}`}\n      onClick={toggleVote}\n    >\n      {canCastVote && <Checkmark checked={!!ownVotesByOptionId[option.id]} />}\n      <div className='str-chat__poll-option-data'>\n        <p className='str-chat__poll-option-text'>{option.text}</p>\n        {displayAvatarCount && voting_visibility === 'public' && (\n          <div className='str-chat__poll-option-voters'>\n            {latest_votes_by_option?.[option.id] &&\n              (latest_votes_by_option[option.id] as PollVote<StreamChatGenerics>[])\n                .filter((vote) => !!vote.user && !isVoteAnswer(vote))\n                .slice(0, displayAvatarCount)\n                .map(({ user }) => (\n                  <Avatar\n                    image={user?.image}\n                    key={`poll-option-${option.id}-avatar-${user?.id}`}\n                    name={user?.name}\n                  />\n                ))}\n          </div>\n        )}\n        <div className='str-chat__poll-option-vote-count'>\n          {voteCountVerbose\n            ? t<string>('{{count}} votes', {\n                count: vote_counts_by_option[option.id] ?? 0,\n              })\n            : (vote_counts_by_option[option.id] ?? 0)}\n        </div>\n      </div>\n      <AmountBar\n        amount={\n          (winningOptionCount &&\n            (vote_counts_by_option[option.id] ?? 0) / winningOptionCount) * 100\n        }\n        className={clsx('str-chat__poll-option__votes-bar', {\n          'str-chat__poll-option__votes-bar--winner':\n            is_closed &&\n            maxVotedOptionIds.length === 1 &&\n            maxVotedOptionIds[0] === option.id,\n        })}\n      />\n    </div>\n  );\n};\n", "import clsx from 'clsx';\nimport React, { useCallback, useState } from 'react';\nimport { PollOptionVotesList } from './PollOptionVotesList';\nimport { PollOptionWithLatestVotes } from './PollOptionWithLatestVotes';\nimport { ModalHeader } from '../../../Modal/ModalHeader';\nimport { useStateStore } from '../../../../store';\nimport { usePollContext, useTranslationContext } from '../../../../context';\nimport type { PollOption, PollState } from 'stream-chat';\nimport type { DefaultStreamChatGenerics } from '../../../../types';\n\ntype PollStateSelectorReturnValue<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n  name: string;\n  options: PollOption<StreamChatGenerics>[];\n  vote_counts_by_option: Record<string, number>;\n};\nconst pollStateSelector = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  nextValue: PollState<StreamChatGenerics>,\n): PollStateSelectorReturnValue<StreamChatGenerics> => ({\n  name: nextValue.name,\n  options: nextValue.options,\n  vote_counts_by_option: nextValue.vote_counts_by_option,\n});\n\nexport type PollResultsProps = {\n  close?: () => void;\n};\n\nexport const PollResults = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n  close,\n}: PollResultsProps) => {\n  const { t } = useTranslationContext();\n  const { poll } = usePollContext<StreamChatGenerics>();\n  const { name, options, vote_counts_by_option } = useStateStore(\n    poll.state,\n    pollStateSelector,\n  );\n  const [optionToView, setOptionToView] = useState<PollOption<StreamChatGenerics>>();\n\n  const goBack = useCallback(() => setOptionToView(undefined), []);\n\n  return (\n    <div\n      className={clsx('str-chat__modal__poll-results', {\n        'str-chat__modal__poll-results--option-detail': optionToView,\n      })}\n    >\n      {optionToView ? (\n        <>\n          <ModalHeader close={close} goBack={goBack} title={optionToView.text} />\n          <div className='str-chat__modal__poll-results__body'>\n            <PollOptionVotesList\n              key={`poll-option-detail-${optionToView.id}`}\n              option={optionToView}\n            />\n          </div>\n        </>\n      ) : (\n        <>\n          <ModalHeader close={close} title={t<string>('Poll results')} />\n          <div className='str-chat__modal__poll-results__body'>\n            <div className='str-chat__modal__poll-results__title'>{name}</div>\n            <div className='str-chat__modal__poll-results__option-list'>\n              {options\n                .sort((next, current) =>\n                  (vote_counts_by_option[current.id] ?? 0) >=\n                  (vote_counts_by_option[next.id] ?? 0)\n                    ? 1\n                    : -1,\n                )\n                .map((option) => (\n                  <PollOptionWithLatestVotes\n                    key={`poll-option-${option.id}`}\n                    option={option}\n                    showAllVotes={() => setOptionToView(option)}\n                  />\n                ))}\n            </div>\n          </div>\n        </>\n      )}\n    </div>\n  );\n};\n", "import React, { useMemo } from 'react';\nimport { PollVoteListing } from '../../PollVote';\nimport { usePollOptionVotesPagination } from '../../hooks';\nimport { LoadingIndicator } from '../../../Loading';\nimport { InfiniteScrollPaginator } from '../../../InfiniteScrollPaginator/InfiniteScrollPaginator';\nimport { PollOptionWithVotesHeader } from './PollOptionWithVotesHeader';\nimport type { PollOption, PollOptionVotesQueryParams } from 'stream-chat';\nimport type { DefaultStreamChatGenerics } from '../../../../types';\n\nexport type PollOptionVotesListingProps<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n  option: PollOption<StreamChatGenerics>;\n};\n\nexport const PollOptionVotesList = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n  option,\n}: PollOptionVotesListingProps<StreamChatGenerics>) => {\n  const paginationParams = useMemo<PollOptionVotesQueryParams>(\n    () => ({ filter: { option_id: option.id } }),\n    [option.id],\n  );\n  const { error, hasNextPage, loading, loadMore, votes } =\n    usePollOptionVotesPagination<StreamChatGenerics>({\n      paginationParams,\n    });\n\n  return (\n    <div className='str-chat__poll-option str-chat__poll-option--full-vote-list'>\n      <PollOptionWithVotesHeader option={option} />\n      <InfiniteScrollPaginator loadNextOnScrollToBottom={loadMore} threshold={40}>\n        <PollVoteListing votes={votes} />\n        {hasNextPage && (\n          <div className='str-chat__loading-indicator-placeholder'>\n            {loading && <LoadingIndicator />}\n          </div>\n        )}\n      </InfiniteScrollPaginator>\n      {error && error.message}\n    </div>\n  );\n};\n", "import React from 'react';\nimport { useStateStore } from '../../../../store';\nimport { usePollContext, useTranslationContext } from '../../../../context';\nimport type { PollOption, PollState } from 'stream-chat';\nimport type { DefaultStreamChatGenerics } from '../../../../types';\n\ntype PollStateSelectorReturnValue = {\n  maxVotedOptionIds: string[];\n  vote_counts_by_option: Record<string, number>;\n};\nconst pollStateSelector = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  nextValue: PollState<StreamChatGenerics>,\n): PollStateSelectorReturnValue => ({\n  maxVotedOptionIds: nextValue.maxVotedOptionIds,\n  vote_counts_by_option: nextValue.vote_counts_by_option,\n});\n\nexport type PollResultOptionVoteCounterProps = {\n  optionId: string;\n};\n\nexport const PollResultOptionVoteCounter = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n  optionId,\n}: PollResultOptionVoteCounterProps) => {\n  const { t } = useTranslationContext();\n  const { poll } = usePollContext<StreamChatGenerics>();\n  const { maxVotedOptionIds, vote_counts_by_option } = useStateStore(\n    poll.state,\n    pollStateSelector,\n  );\n\n  return (\n    <div className='str-chat__poll-result-option-vote-counter'>\n      {maxVotedOptionIds.length === 1 && maxVotedOptionIds[0] === optionId && (\n        <div className='str-chat__poll-result-winning-option-icon' />\n      )}\n      <span className='str-chat__poll-result-option-vote-count'>\n        {t<string>('{{count}} votes', { count: vote_counts_by_option[optionId] ?? 0 })}\n      </span>\n    </div>\n  );\n};\n\nexport type PollOptionWithVotesHeaderProps<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n  option: PollOption<StreamChatGenerics>;\n};\n\nexport const PollOptionWithVotesHeader = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n  option,\n}: PollOptionWithVotesHeaderProps<StreamChatGenerics>) => (\n  <div className='str-chat__poll-option__header'>\n    <div className='str-chat__poll-option__option-text'>{option.text}</div>\n    <PollResultOptionVoteCounter optionId={option.id} />\n  </div>\n);\n", "import React from 'react';\nimport { PollOptionWithVotesHeader } from './PollOptionWithVotesHeader';\nimport { PollVoteListing } from '../../PollVote';\nimport { useStateStore } from '../../../../store';\nimport {\n  useChannelStateContext,\n  usePollContext,\n  useTranslationContext,\n} from '../../../../context';\nimport type { PollOption, PollState, PollVote } from 'stream-chat';\nimport type { DefaultStreamChatGenerics } from '../../../../types';\n\ntype PollStateSelectorReturnValue<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = { latest_votes_by_option: Record<string, PollVote<StreamChatGenerics>[]> };\n\nconst pollStateSelector = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  nextValue: PollState<StreamChatGenerics>,\n): PollStateSelectorReturnValue => ({\n  latest_votes_by_option: nextValue.latest_votes_by_option,\n});\n\nexport type PollOptionWithVotesProps<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n  option: PollOption<StreamChatGenerics>;\n  countVotesPreview?: number;\n  showAllVotes?: () => void;\n};\n\nexport const PollOptionWithLatestVotes = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n  countVotesPreview = 5,\n  option,\n  showAllVotes,\n}: PollOptionWithVotesProps<StreamChatGenerics>) => {\n  const { t } = useTranslationContext();\n  const { channelCapabilities = {} } = useChannelStateContext<StreamChatGenerics>(\n    'PollOptionWithLatestVotes',\n  );\n  const { poll } = usePollContext<StreamChatGenerics>();\n  const { latest_votes_by_option } = useStateStore(poll.state, pollStateSelector);\n\n  const votes = latest_votes_by_option && latest_votes_by_option[option.id];\n\n  return (\n    <div className='str-chat__poll-option'>\n      <PollOptionWithVotesHeader option={option} />\n      {votes && <PollVoteListing votes={votes.slice(0, countVotesPreview)} />}\n      {channelCapabilities['query-poll-votes'] &&\n        showAllVotes &&\n        votes?.length > countVotesPreview && (\n          <button\n            className='str-chat__poll-option__show-all-votes-button'\n            onClick={showAllVotes}\n          >\n            {t<string>('Show all')}\n          </button>\n        )}\n    </div>\n  );\n};\n", "export const MAX_POLL_OPTIONS = 100 as const;\n\nexport const VALID_MAX_VOTES_VALUE_REGEX = /^([2-9]|10)$/;\n\nexport const MAX_OPTIONS_DISPLAYED = 10 as const;\n", "import clsx from 'clsx';\nimport React from 'react';\nimport { usePollContext } from '../../context';\nimport { useStateStore } from '../../store';\nimport type { PollState } from 'stream-chat';\nimport type { DefaultStreamChatGenerics } from '../../types';\n\ntype PollStateSelectorQuotedPollReturnValue = {\n  is_closed: boolean | undefined;\n  name: string;\n};\nconst pollStateSelectorQuotedPoll = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  nextValue: PollState<StreamChatGenerics>,\n): PollStateSelectorQuotedPollReturnValue => ({\n  is_closed: nextValue.is_closed,\n  name: nextValue.name,\n});\n\nexport const QuotedPoll = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>() => {\n  const { poll } = usePollContext<StreamChatGenerics>();\n  const { is_closed, name } = useStateStore(poll.state, pollStateSelectorQuotedPoll);\n\n  return (\n    <div\n      className={clsx('str-chat__quoted-poll-preview', {\n        'str-chat__quoted-poll-preview--closed': is_closed,\n      })}\n    >\n      <div className='str-chat__quoted-poll-preview__icon'>\uD83D\uDCCA</div>\n      <div className='str-chat__quoted-poll-preview__name'>{name}</div>\n    </div>\n  );\n};\n", "import clsx from 'clsx';\nimport { nanoid } from 'nanoid';\nimport React, { useState } from 'react';\nimport { FieldError } from '../../Form/FieldError';\nimport { OptionFieldSet } from './OptionFieldSet';\nimport { PollCreationDialogControls } from './PollCreationDialogControls';\nimport { VALID_MAX_VOTES_VALUE_REGEX } from '../constants';\nimport { ModalHeader } from '../../Modal/ModalHeader';\nimport { SimpleSwitchField } from '../../Form/SwitchField';\nimport { useChatContext, useTranslationContext } from '../../../context';\n\nimport type { VotingVisibility } from 'stream-chat';\nimport type { OptionErrors, PollFormState } from './types';\n\nexport type PollCreationDialogProps = {\n  close: () => void;\n};\n\nexport const PollCreationDialog = ({ close }: PollCreationDialogProps) => {\n  const { client } = useChatContext();\n  const { t } = useTranslationContext();\n\n  const [nameError, setNameError] = useState<string>();\n  const [optionsErrors, setOptionsErrors] = useState<OptionErrors>({});\n  const [multipleAnswerCountError, setMultipleAnswerCountError] = useState<string>();\n  const [state, setState] = useState<PollFormState>(\n    () =>\n      ({\n        allow_answers: false,\n        allow_user_suggested_options: false,\n        description: '',\n        enforce_unique_vote: true,\n        id: nanoid(),\n        max_votes_allowed: '',\n        name: '',\n        options: [{ id: nanoid(), text: '' }],\n        user_id: client.user?.id,\n        voting_visibility: 'public',\n      }) as PollFormState,\n  );\n\n  return (\n    <div\n      className='str-chat__dialog str-chat__poll-creation-dialog'\n      data-testid='poll-creation-dialog'\n    >\n      <ModalHeader close={close} title={t<string>('Create poll')} />\n      <div className='str-chat__dialog__body'>\n        <form autoComplete='off'>\n          <div\n            className={clsx(\n              'str-chat__form__field str-chat__form__input-field str-chat__form__input-field--with-label',\n              {\n                'str-chat__form__input-field--has-error': nameError,\n              },\n            )}\n          >\n            <label className='str-chat__form__field-label' htmlFor='name'>\n              {t<string>('Question')}\n            </label>\n            <div className={clsx('str-chat__form__input-field__value')}>\n              <FieldError\n                className='str-chat__form__input-field__error'\n                data-testid={'poll-name-input-field-error'}\n                text={nameError}\n              />\n              <input\n                id='name'\n                onBlur={(e) => {\n                  if (!e.target.value) {\n                    setNameError('The field is required');\n                  }\n                }}\n                onChange={(e) => {\n                  setState((prev) => ({ ...prev, name: e.target.value }));\n                  if (nameError && e.target.value) {\n                    setNameError(undefined);\n                  }\n                }}\n                placeholder={t<string>('Ask a question')}\n                type='text'\n                value={state.name}\n              />\n            </div>\n          </div>\n          <OptionFieldSet\n            errors={optionsErrors}\n            options={state.options}\n            setErrors={setOptionsErrors}\n            setState={setState}\n          />\n          <div\n            className={clsx('str-chat__form__expandable-field', {\n              'str-chat__form__expandable-field--expanded': !state.enforce_unique_vote,\n            })}\n          >\n            <SimpleSwitchField\n              checked={!state.enforce_unique_vote}\n              id='enforce_unique_vote'\n              labelText={t<string>('Multiple answers')}\n              onChange={(e) => {\n                setState((prev) => ({\n                  ...prev,\n                  enforce_unique_vote: !e.target.checked,\n                  max_votes_allowed: '',\n                }));\n                setMultipleAnswerCountError(undefined);\n              }}\n            />\n            {!state.enforce_unique_vote && (\n              <div\n                className={clsx('str-chat__form__input-field', {\n                  'str-chat__form__input-field--has-error': multipleAnswerCountError,\n                })}\n              >\n                <div className={clsx('str-chat__form__input-field__value')}>\n                  <FieldError\n                    className='str-chat__form__input-field__error'\n                    data-testid={'poll-max-votes-allowed-input-field-error'}\n                    text={multipleAnswerCountError}\n                  />\n                  <input\n                    id='max_votes_allowed'\n                    onChange={(e) => {\n                      const isValidValue =\n                        !e.target.value ||\n                        e.target.value.match(VALID_MAX_VOTES_VALUE_REGEX);\n                      if (!isValidValue) {\n                        setMultipleAnswerCountError(\n                          t<string>('Type a number from 2 to 10'),\n                        );\n                      } else if (multipleAnswerCountError) {\n                        setMultipleAnswerCountError(undefined);\n                      }\n                      setState((prev) => ({\n                        ...prev,\n                        max_votes_allowed: e.target.value,\n                      }));\n                    }}\n                    placeholder={t<string>('Maximum number of votes (from 2 to 10)')}\n                    type='number'\n                    value={state.max_votes_allowed}\n                  />\n                </div>\n              </div>\n            )}\n          </div>\n          <SimpleSwitchField\n            checked={state.voting_visibility === 'anonymous'}\n            id='voting_visibility'\n            labelText={t<string>('Anonymous poll')}\n            onChange={(e) =>\n              setState((prev) => ({\n                ...prev,\n                voting_visibility: (e.target.checked\n                  ? 'anonymous'\n                  : 'public') as VotingVisibility,\n              }))\n            }\n          />\n          <SimpleSwitchField\n            checked={state.allow_user_suggested_options}\n            id='allow_user_suggested_options'\n            labelText={t<string>('Allow option suggestion')}\n            onChange={(e) =>\n              setState((prev) => ({\n                ...prev,\n                allow_user_suggested_options: e.target.checked,\n              }))\n            }\n          />\n          <SimpleSwitchField\n            checked={state.allow_answers}\n            id='allow_answers'\n            labelText={t<string>('Allow comments')}\n            onChange={(e) =>\n              setState((prev) => ({ ...prev, allow_answers: e.target.checked }))\n            }\n          />\n        </form>\n      </div>\n      <PollCreationDialogControls\n        close={close}\n        errors={[\n          ...(nameError ?? []),\n          ...(multipleAnswerCountError ?? []),\n          ...Object.keys(optionsErrors),\n        ]}\n        state={state}\n      />\n    </div>\n  );\n};\n", "import clsx from 'clsx';\nimport { MAX_POLL_OPTIONS } from '../constants';\nimport { nanoid } from 'nanoid';\nimport React, { useCallback } from 'react';\nimport { FieldError } from '../../Form/FieldError';\nimport { DragAndDropContainer } from '../../DragAndDrop/DragAndDropContainer';\nimport { useTranslationContext } from '../../../context';\nimport type { OptionErrors, PollFormState, PollOptionFormData } from './types';\n\nconst VALIDATION_ERRORS = { 'Option already exists': true } as const as Record<\n  string,\n  boolean\n>;\n\nexport type OptionFieldSetProps = {\n  errors: OptionErrors;\n  options: PollFormState['options'];\n  setErrors: (fn: (prev: OptionErrors) => OptionErrors) => void;\n  setState: (fn: (prev: PollFormState) => PollFormState) => void;\n};\n\nexport const OptionFieldSet = ({\n  errors,\n  options,\n  setErrors,\n  setState,\n}: OptionFieldSetProps) => {\n  const { t } = useTranslationContext('OptionFieldSet');\n\n  const findOptionDuplicate = (sourceOption: PollOptionFormData) => {\n    const isDuplicateFilter = (option: PollOptionFormData) =>\n      !!sourceOption.text.trim() && // do not include empty options into consideration\n      option.id !== sourceOption.id &&\n      option.text.trim() === sourceOption.text.trim();\n\n    return options.find(isDuplicateFilter);\n  };\n\n  const onSetNewOrder = useCallback(\n    (newOrder: number[]) => {\n      setState((prev) => ({\n        ...prev,\n        options: newOrder.map((index) => prev.options[index]),\n      }));\n    },\n    [setState],\n  );\n\n  const draggable = options.length > 1;\n\n  return (\n    <fieldset className='str-chat__form__field str-chat__form__input-fieldset'>\n      <legend className='str-chat__form__field-label'>{t<string>('Options')}</legend>\n      <DragAndDropContainer\n        className='str-chat__form__input-fieldset__values'\n        draggable={draggable}\n        onSetNewOrder={onSetNewOrder}\n      >\n        {options.map((option, i) => (\n          <div\n            className={clsx('str-chat__form__input-field', {\n              'str-chat__form__input-field--draggable': draggable,\n              'str-chat__form__input-field--has-error': errors[option.id],\n            })}\n            key={`new-poll-option-${i}`}\n          >\n            <div className='str-chat__form__input-field__value'>\n              <FieldError\n                className='str-chat__form__input-field__error'\n                data-testid={'poll-option-input-field-error'}\n                text={errors[option.id]}\n              />\n              <input\n                id={option.id}\n                onBlur={(e) => {\n                  if (findOptionDuplicate({ id: e.target.id, text: e.target.value })) {\n                    setErrors((prev) => ({\n                      ...prev,\n                      [e.target.id]: t<string>('Option already exists'),\n                    }));\n                  }\n                }}\n                onChange={(e) => {\n                  setState((prev) => {\n                    const shouldAddEmptyOption =\n                      prev.options.length < MAX_POLL_OPTIONS &&\n                      (!prev.options ||\n                        (prev.options.slice(i + 1).length === 0 && !!e.target.value));\n                    const shouldRemoveOption =\n                      prev.options &&\n                      prev.options.slice(i + 1).length > 0 &&\n                      !e.target.value;\n\n                    const optionListHead = prev.options ? prev.options.slice(0, i) : [];\n                    const optionListTail = shouldAddEmptyOption\n                      ? [{ id: nanoid(), text: '' }]\n                      : (prev.options || []).slice(i + 1);\n\n                    if (\n                      (errors[option.id] && !e.target.value) ||\n                      (VALIDATION_ERRORS[errors[option.id]] &&\n                        !findOptionDuplicate({ id: e.target.id, text: e.target.value }))\n                    ) {\n                      setErrors((prev) => {\n                        delete prev[option.id];\n                        return prev;\n                      });\n                    }\n\n                    return {\n                      ...prev,\n                      options: [\n                        ...optionListHead,\n                        ...(shouldRemoveOption\n                          ? []\n                          : [{ ...option, text: e.target.value }]),\n                        ...optionListTail,\n                      ],\n                    };\n                  });\n                }}\n                onKeyUp={(event) => {\n                  if (event.key === 'Enter') {\n                    const nextInputId = options[i + 1].id;\n                    document.getElementById(nextInputId)?.focus();\n                  }\n                }}\n                placeholder={t<string>('Add an option')}\n                type='text'\n                value={option.text}\n              />\n            </div>\n            {draggable && <div className='str-chat__drag-handle' />}\n          </div>\n        ))}\n      </DragAndDropContainer>\n    </fieldset>\n  );\n};\n", "import React, { PropsWithChildren, useEffect, useState } from 'react';\nimport clsx from 'clsx';\n\nexport type DragAndDropContainerProps = PropsWithChildren<{\n  className?: string;\n  draggable?: boolean;\n  onSetNewOrder?: (newOrder: number[]) => void;\n}>;\n\nexport const DragAndDropContainer = ({\n  children,\n  className,\n  draggable,\n  onSetNewOrder,\n}: DragAndDropContainerProps) => {\n  const [order, setOrder] = useState<number[]>([]);\n  const [dragStartIndex, setDragStartIndex] = useState<number | null>(null);\n  const [dragOverIndex, setDragOverIndex] = useState<number | null>(null);\n  const [container, setContainer] = useState<HTMLDivElement | null>(null);\n\n  const moveDirection =\n    dragStartIndex === null || dragOverIndex === null\n      ? undefined\n      : dragStartIndex <= dragOverIndex\n        ? 'down'\n        : 'up';\n\n  const childrenArray = React.Children.toArray(children);\n\n  useEffect(() => {\n    setOrder(React.Children.map(children, (_, index) => index) || []);\n  }, [children]);\n\n  useEffect(() => {\n    if (!container) return;\n\n    const handleDragStart = (e: DragEvent) => {\n      const target = e.target as HTMLElement;\n      const draggableItem = target.closest('.str-chat__drag-and-drop-container__item');\n      if (e.dataTransfer) {\n        e.dataTransfer.effectAllowed = 'move';\n      }\n\n      if (draggableItem instanceof HTMLElement) {\n        const index = Array.from(draggableItem.parentElement?.children || []).indexOf(\n          draggableItem,\n        );\n        setDragStartIndex(index);\n        e.dataTransfer?.setData('text/plain', index.toString());\n        draggableItem.style.opacity = '0.3';\n      }\n    };\n\n    const handleDragOver = (e: DragEvent) => {\n      e.preventDefault();\n      const target = e.target as HTMLElement;\n      const draggableItem = target.closest('.str-chat__drag-and-drop-container__item');\n      if (draggableItem instanceof HTMLElement) {\n        const index = Array.from(draggableItem.parentElement?.children || []).indexOf(\n          draggableItem,\n        );\n        setDragOverIndex(index);\n      }\n    };\n\n    const handleDragLeave = () => {\n      setDragOverIndex(null);\n    };\n\n    const handleDrop = (e: DragEvent) => {\n      e.preventDefault();\n      const draggedIndex = parseInt(e.dataTransfer?.getData('text/plain') || '-1', 10);\n      const target = e.target as HTMLElement;\n      const draggableItem = target.closest('.str-chat__drag-and-drop-container__item');\n      if (draggableItem instanceof HTMLElement) {\n        const dropIndex = Array.from(draggableItem.parentElement?.children || []).indexOf(\n          draggableItem,\n        );\n        if (draggedIndex !== -1 && draggedIndex !== dropIndex) {\n          setOrder((prevOrder) => {\n            const newOrder = [...prevOrder];\n            const [removed] = newOrder.splice(draggedIndex, 1);\n            newOrder.splice(dropIndex, 0, removed);\n            onSetNewOrder?.(newOrder);\n            return newOrder;\n          });\n        }\n      }\n      setDragStartIndex(null);\n      setDragOverIndex(null);\n    };\n\n    const handleDragEnd = (e: DragEvent) => {\n      const target = e.target as HTMLElement;\n      if (target instanceof HTMLElement) {\n        target.style.opacity = '';\n      }\n      setDragStartIndex(null);\n      setDragOverIndex(null);\n    };\n\n    container.addEventListener('dragstart', handleDragStart);\n    container.addEventListener('dragover', handleDragOver);\n    container.addEventListener('dragleave', handleDragLeave);\n    container.addEventListener('drop', handleDrop);\n    container.addEventListener('dragend', handleDragEnd);\n\n    return () => {\n      container.removeEventListener('dragstart', handleDragStart);\n      container.removeEventListener('dragover', handleDragOver);\n      container.removeEventListener('dragleave', handleDragLeave);\n      container.removeEventListener('drop', handleDrop);\n      container.removeEventListener('dragend', handleDragEnd);\n    };\n  }, [container, onSetNewOrder]);\n\n  return (\n    <div\n      className={clsx('str-chat__drag-and-drop-container', className)}\n      ref={setContainer}\n    >\n      {order.map((originalIndex, currentIndex) => {\n        const child = childrenArray[originalIndex];\n        return (\n          <div\n            className={clsx('str-chat__drag-and-drop-container__item', {\n              'str-chat__drag-and-drop-container__item--dragged-over-from-bottom':\n                moveDirection === 'up' && dragOverIndex === currentIndex,\n              'str-chat__drag-and-drop-container__item--dragged-over-from-top':\n                moveDirection === 'down' && dragOverIndex === currentIndex,\n            })}\n            draggable={draggable}\n            key={\n              React.isValidElement(child) ? child.key : `draggable-item-${originalIndex}`\n            }\n          >\n            {child}\n          </div>\n        );\n      })}\n    </div>\n  );\n};\n", "import React from 'react';\nimport { VALID_MAX_VOTES_VALUE_REGEX } from '../constants';\nimport {\n  useChatContext,\n  useMessageInputContext,\n  useTranslationContext,\n} from '../../../context';\nimport type { PollFormState } from './types';\n\nexport type PollCreationDialogControlsProps = {\n  close: () => void;\n  errors: string[];\n  state: PollFormState;\n};\n\nexport const PollCreationDialogControls = ({\n  close,\n  errors,\n  state,\n}: PollCreationDialogControlsProps) => {\n  const { client } = useChatContext();\n  const { t } = useTranslationContext('PollCreationDialogControls');\n  const { handleSubmit: handleSubmitMessage } = useMessageInputContext(\n    'PollCreationDialogControls',\n  );\n\n  const canSubmit = () => {\n    const hasAtLeastOneOption = state.options.filter((o) => !!o.text).length > 0;\n    const hasName = !!state.name;\n    const maxVotesAllowedNumber = parseInt(\n      state.max_votes_allowed?.match(VALID_MAX_VOTES_VALUE_REGEX)?.[0] || '',\n    );\n\n    const validMaxVotesAllowed =\n      state.max_votes_allowed === '' ||\n      (!!maxVotesAllowedNumber &&\n        (2 <= maxVotesAllowedNumber || maxVotesAllowedNumber <= 10));\n\n    const noErrors = errors.length === 0;\n\n    return hasAtLeastOneOption && hasName && validMaxVotesAllowed && noErrors;\n  };\n\n  return (\n    <div className='str-chat__dialog__controls'>\n      <button\n        className='str-chat__dialog__controls-button str-chat__dialog__controls-button--cancel'\n        onClick={close}\n      >\n        {t<string>('Cancel')}\n      </button>\n      <button\n        className='str-chat__dialog__controls-button str-chat__dialog__controls-button--submit'\n        disabled={!canSubmit()}\n        onClick={async (e) => {\n          let pollId: string;\n          try {\n            const { poll } = await client.createPoll({\n              ...state,\n              max_votes_allowed: state.max_votes_allowed\n                ? parseInt(state.max_votes_allowed)\n                : undefined,\n              options: state.options\n                ?.filter((o) => o.text)\n                .map((o) => ({ text: o.text })),\n            });\n            pollId = poll.id;\n          } catch (e) {\n            // todo: add notification\n            return;\n          }\n          try {\n            await handleSubmitMessage(e, { poll_id: pollId });\n          } catch (e) {\n            // todo: add notification\n            return;\n          }\n          close();\n        }}\n        type='submit'\n      >\n        {t<string>('Create')}\n      </button>\n    </div>\n  );\n};\n", "import clsx from 'clsx';\nimport React, {\n  ComponentProps,\n  ElementRef,\n  KeyboardEventHandler,\n  PropsWithChildren,\n  useRef,\n} from 'react';\n\nexport type SwitchFieldProps = PropsWithChildren<ComponentProps<'input'>>;\n\nexport const SwitchField = ({ children, ...props }: SwitchFieldProps) => {\n  const inputRef = useRef<ElementRef<'input'>>(null);\n  const handleKeyUp: KeyboardEventHandler<HTMLDivElement> = (event) => {\n    if (![' ', 'Enter'].includes(event.key) || !inputRef.current) return;\n    event.preventDefault();\n    inputRef.current.click();\n  };\n\n  return (\n    <div className='str-chat__form__field str-chat__form__switch-field'>\n      <label>\n        <div className='str-chat__form__field str-chat__form__switch-field-content'>\n          {children}\n        </div>\n        <input type='checkbox' {...props} ref={inputRef} />\n        <div\n          className={clsx('str-chat__form__switch-field__switch', {\n            'str-chat__form__switch-field__switch--on': props.checked,\n          })}\n          onKeyUp={handleKeyUp}\n          tabIndex={0}\n        >\n          <div className='str-chat__form__switch-field__switch-handle' />\n        </div>\n      </label>\n    </div>\n  );\n};\n\nexport type SimpleSwitchFieldProps = ComponentProps<'input'> & {\n  labelText: string;\n};\n\nexport const SimpleSwitchField = ({ labelText, ...props }: SimpleSwitchFieldProps) => (\n  <SwitchField {...props}>\n    <div className='str-chat__form__field str-chat__form__switch-field__text'>\n      {labelText}\n    </div>\n  </SwitchField>\n);\n", "import React from 'react';\n\nimport { StreamMessage, useTranslationContext } from '../../context';\nimport { DefaultStreamChatGenerics } from '../../types/types';\nimport { isMessageBounced } from './utils';\n\nexport interface MessageErrorTextProps<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> {\n  message: StreamMessage<StreamChatGenerics>;\n  theme: string;\n}\n\nexport function MessageErrorText<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({ message, theme }: MessageErrorTextProps<StreamChatGenerics>) {\n  const { t } = useTranslationContext('MessageText');\n\n  if (message.type === 'error' && !isMessageBounced(message)) {\n    return (\n      <div\n        className={`str-chat__${theme}-message--error-message str-chat__message--error-message`}\n      >\n        {t<string>('Error \u00B7 Unsent')}\n      </div>\n    );\n  }\n\n  if (message.status === 'failed') {\n    return (\n      <div\n        className={`str-chat__${theme}-message--error-message str-chat__message--error-message`}\n      >\n        {message.errorStatusCode !== 403\n          ? t<string>('Message Failed \u00B7 Click to try again')\n          : t<string>('Message Failed \u00B7 Unauthorized')}\n      </div>\n    );\n  }\n\n  return null;\n}\n", "import React from 'react';\nimport { useMessageContext } from '../../context/MessageContext';\nimport { Timestamp as DefaultTimestamp } from './Timestamp';\nimport { useComponentContext } from '../../context';\n\nimport type { StreamMessage } from '../../context/ChannelStateContext';\nimport type { TimestampFormatterOptions } from '../../i18n/types';\nimport type { DefaultStreamChatGenerics } from '../../types/types';\n\nexport type MessageTimestampProps<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = TimestampFormatterOptions & {\n  /* Adds a CSS class name to the component's outer `time` container. */\n  customClass?: string;\n  /* The `StreamChat` message object, which provides necessary data to the underlying UI components (overrides the value from `MessageContext`) */\n  message?: StreamMessage<StreamChatGenerics>;\n};\n\nconst UnMemoizedMessageTimestamp = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  props: MessageTimestampProps<StreamChatGenerics>,\n) => {\n  const { message: propMessage, ...timestampProps } = props;\n  const { message: contextMessage } =\n    useMessageContext<StreamChatGenerics>('MessageTimestamp');\n  const { Timestamp = DefaultTimestamp } = useComponentContext('MessageTimestamp');\n  const message = propMessage || contextMessage;\n  return <Timestamp timestamp={message.created_at} {...timestampProps} />;\n};\n\nexport const MessageTimestamp = React.memo(\n  UnMemoizedMessageTimestamp,\n) as typeof UnMemoizedMessageTimestamp;\n", "export const CUSTOM_MESSAGE_TYPE = {\n  date: 'message.date',\n  intro: 'channel.intro',\n} as const;\n", "import { nanoid } from 'nanoid';\nimport React, {\n  ElementRef,\n  useCallback,\n  useEffect,\n  useMemo,\n  useRef,\n  useState,\n} from 'react';\nimport { UploadIcon as DefaultUploadIcon } from './icons';\nimport { CHANNEL_CONTAINER_ID } from '../Channel/constants';\nimport { DialogAnchor, useDialog, useDialogIsOpen } from '../Dialog';\nimport { DialogMenuButton } from '../Dialog/DialogMenu';\nimport { Modal } from '../Modal';\nimport { PollCreationDialog as DefaultPollCreationDialog } from '../Poll';\nimport { Portal } from '../Portal/Portal';\nimport { UploadFileInput } from '../ReactFileUtilities';\nimport {\n  useChannelStateContext,\n  useComponentContext,\n  useMessageInputContext,\n  useTranslationContext,\n} from '../../context';\nimport {\n  AttachmentSelectorContextProvider,\n  useAttachmentSelectorContext,\n} from '../../context/AttachmentSelectorContext';\nimport type { DefaultStreamChatGenerics } from '../../types';\n\nexport const SimpleAttachmentSelector = () => {\n  const {\n    AttachmentSelectorInitiationButtonContents,\n    FileUploadIcon = DefaultUploadIcon,\n  } = useComponentContext();\n  const inputRef = useRef<ElementRef<'input'>>(null);\n  const [labelElement, setLabelElement] = useState<HTMLLabelElement | null>(null);\n  const id = useMemo(() => nanoid(), []);\n\n  useEffect(() => {\n    if (!labelElement) return;\n    const handleKeyUp = (event: KeyboardEvent) => {\n      if (![' ', 'Enter'].includes(event.key) || !inputRef.current) return;\n      event.preventDefault();\n      inputRef.current.click();\n    };\n    labelElement.addEventListener('keyup', handleKeyUp);\n    return () => {\n      labelElement.removeEventListener('keyup', handleKeyUp);\n    };\n  }, [labelElement]);\n\n  return (\n    <div className='str-chat__file-input-container' data-testid='file-upload-button'>\n      <UploadFileInput id={id} ref={inputRef} />\n      <label\n        className='str-chat__file-input-label'\n        htmlFor={id}\n        ref={setLabelElement}\n        tabIndex={0}\n      >\n        {AttachmentSelectorInitiationButtonContents ? (\n          <AttachmentSelectorInitiationButtonContents />\n        ) : (\n          <FileUploadIcon />\n        )}\n      </label>\n    </div>\n  );\n};\n\nconst AttachmentSelectorMenuInitButtonIcon = () => {\n  const { AttachmentSelectorInitiationButtonContents, FileUploadIcon } =\n    useComponentContext('SimpleAttachmentSelector');\n  if (AttachmentSelectorInitiationButtonContents) {\n    return <AttachmentSelectorInitiationButtonContents />;\n  }\n  if (FileUploadIcon) {\n    return <FileUploadIcon />;\n  }\n  return <div className='str-chat__attachment-selector__menu-button__icon' />;\n};\n\nexport type AttachmentSelectorModalContentProps = {\n  close: () => void;\n};\n\nexport type AttachmentSelectorActionProps = {\n  closeMenu: () => void;\n  openModalForAction: (actionType: AttachmentSelectorAction['type']) => void;\n};\n\nexport type AttachmentSelectorAction = {\n  ActionButton: React.ComponentType<AttachmentSelectorActionProps>;\n  type: 'uploadFile' | 'createPoll' | (string & {});\n  ModalContent?: React.ComponentType<AttachmentSelectorModalContentProps>;\n};\n\nexport const DefaultAttachmentSelectorComponents = {\n  File({ closeMenu }: AttachmentSelectorActionProps) {\n    const { t } = useTranslationContext();\n    const { fileInput } = useAttachmentSelectorContext();\n\n    return (\n      <DialogMenuButton\n        className='str-chat__attachment-selector-actions-menu__button str-chat__attachment-selector-actions-menu__upload-file-button'\n        onClick={() => {\n          if (fileInput) fileInput.click();\n          closeMenu();\n        }}\n      >\n        {t<string>('File')}\n      </DialogMenuButton>\n    );\n  },\n  Poll({ closeMenu, openModalForAction }: AttachmentSelectorActionProps) {\n    const { t } = useTranslationContext();\n    return (\n      <DialogMenuButton\n        className='str-chat__attachment-selector-actions-menu__button str-chat__attachment-selector-actions-menu__create-poll-button'\n        onClick={() => {\n          openModalForAction('createPoll');\n          closeMenu();\n        }}\n      >\n        {t<string>('Poll')}\n      </DialogMenuButton>\n    );\n  },\n};\n\nexport const defaultAttachmentSelectorActionSet: AttachmentSelectorAction[] = [\n  { ActionButton: DefaultAttachmentSelectorComponents.File, type: 'uploadFile' },\n  {\n    ActionButton: DefaultAttachmentSelectorComponents.Poll,\n    type: 'createPoll',\n  },\n];\n\nexport type AttachmentSelectorProps = {\n  attachmentSelectorActionSet?: AttachmentSelectorAction[];\n  getModalPortalDestination?: () => HTMLElement | null;\n};\n\nconst useAttachmentSelectorActionsFiltered = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  original: AttachmentSelectorAction[],\n) => {\n  const { PollCreationDialog = DefaultPollCreationDialog } = useComponentContext();\n  const { channelCapabilities, channelConfig } =\n    useChannelStateContext<StreamChatGenerics>();\n  const { isThreadInput } = useMessageInputContext();\n\n  return original\n    .filter((action) => {\n      if (action.type === 'uploadFile' && !channelCapabilities['upload-file'])\n        return false;\n      if (\n        action.type === 'createPoll' &&\n        (!channelConfig?.polls || isThreadInput || !channelCapabilities['send-poll'])\n      )\n        return false;\n      return true;\n    })\n    .map((action) => {\n      if (action.type === 'createPoll' && !action.ModalContent) {\n        return { ...action, ModalContent: PollCreationDialog };\n      }\n      return action;\n    });\n};\n\nexport const AttachmentSelector = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n  attachmentSelectorActionSet = defaultAttachmentSelectorActionSet,\n  getModalPortalDestination,\n}: AttachmentSelectorProps) => {\n  const { t } = useTranslationContext();\n  const { channelCapabilities } = useChannelStateContext<StreamChatGenerics>();\n  const { isThreadInput } = useMessageInputContext();\n\n  const actions = useAttachmentSelectorActionsFiltered<StreamChatGenerics>(\n    attachmentSelectorActionSet,\n  );\n\n  const menuDialogId = `attachment-actions-menu${isThreadInput ? '-thread' : ''}`;\n  const menuDialog = useDialog({ id: menuDialogId });\n  const menuDialogIsOpen = useDialogIsOpen(menuDialogId);\n\n  const [modalContentAction, setModalContentActionAction] =\n    useState<AttachmentSelectorAction>();\n  const openModal = useCallback(\n    (actionType: AttachmentSelectorAction['type']) => {\n      const action = actions.find((a) => a.type === actionType);\n      if (!action?.ModalContent) return;\n      setModalContentActionAction(action);\n    },\n    [actions],\n  );\n\n  const closeModal = useCallback(() => setModalContentActionAction(undefined), []);\n\n  const [fileInput, setFileInput] = useState<HTMLInputElement | null>(null);\n  const menuButtonRef = useRef<ElementRef<'button'>>(null);\n\n  const getDefaultPortalDestination = useCallback(\n    () => document.getElementById(CHANNEL_CONTAINER_ID),\n    [],\n  );\n\n  if (actions.length === 0) return null;\n\n  if (actions.length === 1 && actions[0].type === 'uploadFile')\n    return <SimpleAttachmentSelector />;\n\n  const ModalContent = modalContentAction?.ModalContent;\n  const modalIsOpen = !!ModalContent;\n  return (\n    <AttachmentSelectorContextProvider value={{ fileInput }}>\n      <div className='str-chat__attachment-selector'>\n        {channelCapabilities['upload-file'] && <UploadFileInput ref={setFileInput} />}\n        <button\n          aria-expanded={menuDialogIsOpen}\n          aria-haspopup='true'\n          aria-label={t('aria/Open Attachment Selector')}\n          className='str-chat__attachment-selector__menu-button'\n          data-testid='invoke-attachment-selector-button'\n          onClick={() => menuDialog?.toggle()}\n          ref={menuButtonRef}\n        >\n          <AttachmentSelectorMenuInitButtonIcon />\n        </button>\n        <DialogAnchor\n          id={menuDialogId}\n          placement='top-start'\n          referenceElement={menuButtonRef.current}\n          trapFocus\n        >\n          <div\n            className='str-chat__attachment-selector-actions-menu str-chat__dialog-menu'\n            data-testid='attachment-selector-actions-menu'\n          >\n            {actions.map(({ ActionButton, type }) => (\n              <ActionButton\n                closeMenu={menuDialog.close}\n                key={`attachment-selector-item-${type}`}\n                openModalForAction={openModal}\n              />\n            ))}\n          </div>\n        </DialogAnchor>\n        <Portal\n          getPortalDestination={getModalPortalDestination ?? getDefaultPortalDestination}\n          isOpen={modalIsOpen}\n        >\n          <Modal\n            className='str-chat__create-poll-modal'\n            onClose={closeModal}\n            open={modalIsOpen}\n          >\n            {ModalContent && <ModalContent close={closeModal} />}\n          </Modal>\n        </Portal>\n      </div>\n    </AttachmentSelectorContextProvider>\n  );\n};\n", "import React, { useMemo } from 'react';\nimport { nanoid } from 'nanoid';\n\nimport { useTranslationContext } from '../../context/TranslationContext';\n\nexport const LoadingIndicatorIcon = ({ size = 20 }: { size?: number }) => {\n  const id = useMemo(() => nanoid(), []);\n\n  return (\n    <div className='str-chat__loading-indicator'>\n      <svg\n        data-testid='loading-indicator'\n        height={size}\n        viewBox='0 0 30 30'\n        width={size}\n        xmlns='http://www.w3.org/2000/svg'\n      >\n        <defs>\n          <linearGradient\n            id={`${id}-linear-gradient`}\n            x1='50%'\n            x2='50%'\n            y1='0%'\n            y2='100%'\n          >\n            <stop offset='0%' stopColor='#FFF' stopOpacity='0' />\n            <stop data-testid='stop-color' offset='100%' stopOpacity='1' />\n          </linearGradient>\n        </defs>\n        <path\n          d='M2.518 23.321l1.664-1.11A12.988 12.988 0 0 0 15 28c7.18 0 13-5.82 13-13S22.18 2 15 2V0c8.284 0 15 6.716 15 15 0 8.284-6.716 15-15 15-5.206 0-9.792-2.652-12.482-6.679z'\n          fill={`url(#${id}-linear-gradient)`}\n          fillRule='evenodd'\n        />\n      </svg>\n    </div>\n  );\n};\n\nexport const UploadIcon = () => {\n  const { t } = useTranslationContext('UploadIcon');\n  return (\n    <svg\n      data-testid='attach-icon'\n      fill='none'\n      height='24'\n      viewBox='0 0 24 24'\n      width='24'\n      xmlns='http://www.w3.org/2000/svg'\n    >\n      <title>{t<string>('Attach files')}</title>\n      <g clipPath='url(#clip0_10878_5)'>\n        <path\n          d='M12.9997 6.99993L10.9997 6.99993L10.9997 10.9999L6.99972 10.9999L6.99972 12.9999L10.9997 12.9999L10.9997 16.9999L12.9997 16.9999L12.9997 12.9999L16.9997 12.9999L16.9997 10.9999L12.9997 10.9999L12.9997 6.99993ZM11.9997 1.99992C6.47972 1.99992 1.99972 6.47993 1.99972 11.9999C1.99972 17.5199 6.47972 21.9999 11.9997 21.9999C17.5197 21.9999 21.9997 17.5199 21.9997 11.9999C21.9997 6.47993 17.5197 1.99992 11.9997 1.99992ZM11.9997 19.9999C7.58972 19.9999 3.99972 16.4099 3.99972 11.9999C3.99972 7.58993 7.58972 3.99993 11.9997 3.99993C16.4097 3.99993 19.9997 7.58993 19.9997 11.9999C19.9997 16.4099 16.4097 19.9999 11.9997 19.9999Z'\n          fill='black'\n        />\n      </g>\n      <defs>\n        <clipPath id='clip0_10878_5'>\n          <rect fill='white' height='24' width='24' />\n        </clipPath>\n      </defs>\n    </svg>\n  );\n};\n\nexport const CloseIcon = () => (\n  <svg\n    data-testid='close-no-outline'\n    fill='none'\n    height='24'\n    viewBox='0 0 24 24'\n    width='24'\n    xmlns='http://www.w3.org/2000/svg'\n  >\n    <path\n      d='M19 6.41L17.59 5L12 10.59L6.41 5L5 6.41L10.59 12L5 17.59L6.41 19L12 13.41L17.59 19L19 17.59L13.41 12L19 6.41Z'\n      fill='black'\n    ></path>\n  </svg>\n);\n\nexport const RetryIcon = () => (\n  <svg\n    data-testid='retry'\n    fill='none'\n    height='24'\n    viewBox='0 0 24 24'\n    width='24'\n    xmlns='http://www.w3.org/2000/svg'\n  >\n    <path\n      d='M17.6449 6.35C16.1949 4.9 14.2049 4 11.9949 4C7.57488 4 4.00488 7.58 4.00488 12C4.00488 16.42 7.57488 20 11.9949 20C15.7249 20 18.8349 17.45 19.7249 14H17.6449C16.8249 16.33 14.6049 18 11.9949 18C8.68488 18 5.99488 15.31 5.99488 12C5.99488 8.69 8.68488 6 11.9949 6C13.6549 6 15.1349 6.69 16.2149 7.78L12.9949 11H19.9949V4L17.6449 6.35Z'\n      fill='black'\n    />\n  </svg>\n);\n\nexport const DownloadIcon = () => (\n  <svg\n    data-testid='download'\n    fill='none'\n    height='24'\n    viewBox='0 0 24 24'\n    width='24'\n    xmlns='http://www.w3.org/2000/svg'\n  >\n    <path\n      d='M19.35 10.04C18.67 6.59 15.64 4 12 4C9.11 4 6.6 5.64 5.35 8.04C2.34 8.36 0 10.91 0 14C0 17.31 2.69 20 6 20H19C21.76 20 24 17.76 24 15C24 12.36 21.95 10.22 19.35 10.04ZM19 18H6C3.79 18 2 16.21 2 14C2 11.95 3.53 10.24 5.56 10.03L6.63 9.92L7.13 8.97C8.08 7.14 9.94 6 12 6C14.62 6 16.88 7.86 17.39 10.43L17.69 11.93L19.22 12.04C20.78 12.14 22 13.45 22 15C22 16.65 20.65 18 19 18ZM13.45 10H10.55V13H8L12 17L16 13H13.45V10Z'\n      fill='black'\n    ></path>\n  </svg>\n);\n\nexport const LinkIcon = () => (\n  <svg\n    fill='none'\n    height='11'\n    viewBox='0 0 20 11'\n    width='20'\n    xmlns='http://www.w3.org/2000/svg'\n  >\n    <path\n      clipRule='evenodd'\n      d='M1.9 5.5C1.9 3.79 3.29 2.4 5 2.4H8.05C8.57467 2.4 9 1.97467 9 1.45C9 0.925329 8.57467 0.5 8.05 0.5H5C2.24 0.5 0 2.74 0 5.5C0 8.26 2.24 10.5 5 10.5H8.05C8.57467 10.5 9 10.0747 9 9.55C9 9.02533 8.57467 8.6 8.05 8.6H5C3.29 8.6 1.9 7.21 1.9 5.5ZM6 5.5C6 6.05228 6.44772 6.5 7 6.5H13C13.5523 6.5 14 6.05228 14 5.5C14 4.94772 13.5523 4.5 13 4.5H7C6.44772 4.5 6 4.94772 6 5.5ZM15 0.5H11.95C11.4253 0.5 11 0.925329 11 1.45C11 1.97467 11.4253 2.4 11.95 2.4H15C16.71 2.4 18.1 3.79 18.1 5.5C18.1 7.21 16.71 8.6 15 8.6H11.95C11.4253 8.6 11 9.02533 11 9.55C11 10.0747 11.4253 10.5 11.95 10.5H15C17.76 10.5 20 8.26 20 5.5C20 2.74 17.76 0.5 15 0.5Z'\n      fill='#005DFF'\n      fillRule='evenodd'\n    />\n  </svg>\n);\n\nexport const SendIcon = () => {\n  const { t } = useTranslationContext('SendButton');\n  return (\n    <svg\n      data-testid='send'\n      fill='currentColor'\n      height='24'\n      viewBox='0 0 24 24'\n      width='24'\n      xmlns='http://www.w3.org/2000/svg'\n    >\n      <title>{t<string>('Send')}</title>\n      <path d='M4.00952 22L24 12L4.00952 2L4 9.77778L18.2857 12L4 14.2222L4.00952 22Z'></path>\n    </svg>\n  );\n};\n\nexport const MicIcon = () => (\n  <svg fill='currentColor' viewBox='0 0 14 20' xmlns='http://www.w3.org/2000/svg'>\n    <path d='M7 12.5C8.66 12.5 10 11.16 10 9.5V3.5C10 1.84 8.66 0.5 7 0.5C5.34 0.5 4 1.84 4 3.5V9.5C4 11.16 5.34 12.5 7 12.5Z' />\n    <path d='M12 9.5C12 12.26 9.76 14.5 7 14.5C4.24 14.5 2 12.26 2 9.5H0C0 13.03 2.61 15.93 6 16.42V19.5H8V16.42C11.39 15.93 14 13.03 14 9.5H12Z' />\n  </svg>\n);\n\nexport const BinIcon = () => (\n  <svg fill='currentColor' viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'>\n    <path d='M8.00033 25.3333C8.00033 26.8 9.20033 28 10.667 28H21.3337C22.8003 28 24.0003 26.8 24.0003 25.3333V12C24.0003 10.5333 22.8003 9.33333 21.3337 9.33333H10.667C9.20033 9.33333 8.00033 10.5333 8.00033 12V25.3333ZM24.0003 5.33333H20.667L19.7203 4.38667C19.4803 4.14667 19.1337 4 18.787 4H13.2137C12.867 4 12.5203 4.14667 12.2803 4.38667L11.3337 5.33333H8.00033C7.26699 5.33333 6.66699 5.93333 6.66699 6.66667C6.66699 7.4 7.26699 8 8.00033 8H24.0003C24.7337 8 25.3337 7.4 25.3337 6.66667C25.3337 5.93333 24.7337 5.33333 24.0003 5.33333Z' />\n  </svg>\n);\n\nexport const PauseIcon = () => (\n  <svg\n    data-testid='str-chat__pause-icon'\n    fill='currentColor'\n    viewBox='0 0 16 20'\n    xmlns='http://www.w3.org/2000/svg'\n  >\n    <path d='M0 19.3333H5.33333V0.666626H0V19.3333ZM10.6667 0.666626V19.3333H16V0.666626H10.6667Z' />\n  </svg>\n);\n\nexport const PlayIcon = () => (\n  <svg\n    data-testid='str-chat__play-icon'\n    fill='currentColor'\n    viewBox='0 0 14 18'\n    xmlns='http://www.w3.org/2000/svg'\n  >\n    <path d='M0.236328 2.09338V15.9067C0.236328 16.9601 1.39633 17.6001 2.28966 17.0267L13.143 10.1201C13.9697 9.60005 13.9697 8.40005 13.143 7.86672L2.28966 0.973385C1.39633 0.400051 0.236328 1.04005 0.236328 2.09338Z' />\n  </svg>\n);\n\nexport const CheckSignIcon = () => (\n  <svg fill='currentColor' viewBox='0 0 18 14' xmlns='http://www.w3.org/2000/svg'>\n    <path d='M5.79457 10.875L2.32457 7.40502C1.93457 7.01502 1.30457 7.01502 0.91457 7.40502C0.52457 7.79502 0.52457 8.42502 0.91457 8.81502L5.09457 12.995C5.48457 13.385 6.11457 13.385 6.50457 12.995L17.0846 2.41502C17.4746 2.02502 17.4746 1.39502 17.0846 1.00502C16.6946 0.615024 16.0646 0.615024 15.6746 1.00502L5.79457 10.875Z' />\n  </svg>\n);\n", "import React, { ComponentProps } from 'react';\nimport clsx from 'clsx';\n\nexport type DialogMenuButtonProps = ComponentProps<'button'>;\n\nexport const DialogMenuButton = ({\n  children,\n  className,\n  ...props\n}: DialogMenuButtonProps) => (\n  <button className={clsx('str-chat__dialog-menu__button', className)} {...props}>\n    <div className='str-chat__dialog-menu__button-icon' />\n    <div className='str-chat__dialog-menu__button-text'>{children}</div>\n  </button>\n);\n", "import React, { createContext, PropsWithChildren, useContext } from 'react';\n\nexport type AttachmentSelectorContextValue = {\n  fileInput: HTMLInputElement | null;\n};\n\nconst AttachmentSelectorContext = createContext<AttachmentSelectorContextValue>({\n  fileInput: null,\n});\n\nexport const AttachmentSelectorContextProvider = ({\n  children,\n  value,\n}: PropsWithChildren<{ value: AttachmentSelectorContextValue }>) => (\n  <AttachmentSelectorContext.Provider value={value}>\n    {children}\n  </AttachmentSelectorContext.Provider>\n);\n\nexport const useAttachmentSelectorContext = () => useContext(AttachmentSelectorContext);\n", "import React, { ComponentType } from 'react';\nimport {\n  UnsupportedAttachmentPreview as DefaultUnknownAttachmentPreview,\n  UnsupportedAttachmentPreviewProps,\n} from './UnsupportedAttachmentPreview';\nimport {\n  VoiceRecordingPreview as DefaultVoiceRecordingPreview,\n  VoiceRecordingPreviewProps,\n} from './VoiceRecordingPreview';\nimport {\n  FileAttachmentPreview as DefaultFilePreview,\n  FileAttachmentPreviewProps,\n} from './FileAttachmentPreview';\nimport {\n  ImageAttachmentPreview as DefaultImagePreview,\n  ImageAttachmentPreviewProps,\n} from './ImageAttachmentPreview';\nimport {\n  isLocalAttachment,\n  isLocalAudioAttachment,\n  isLocalFileAttachment,\n  isLocalImageAttachment,\n  isLocalMediaAttachment,\n  isLocalVoiceRecordingAttachment,\n  isScrapedContent,\n} from '../../Attachment';\nimport { useMessageInputContext } from '../../../context';\n\nimport type { DefaultStreamChatGenerics } from '../../../types';\n\nexport type AttachmentPreviewListProps<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n  AudioAttachmentPreview?: ComponentType<FileAttachmentPreviewProps>;\n  FileAttachmentPreview?: ComponentType<FileAttachmentPreviewProps>;\n  ImageAttachmentPreview?: ComponentType<ImageAttachmentPreviewProps<StreamChatGenerics>>;\n  UnsupportedAttachmentPreview?: ComponentType<\n    UnsupportedAttachmentPreviewProps<StreamChatGenerics>\n  >;\n  VideoAttachmentPreview?: ComponentType<FileAttachmentPreviewProps>;\n  VoiceRecordingPreview?: ComponentType<VoiceRecordingPreviewProps<StreamChatGenerics>>;\n};\n\nexport const AttachmentPreviewList = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n  AudioAttachmentPreview = DefaultFilePreview,\n  FileAttachmentPreview = DefaultFilePreview,\n  ImageAttachmentPreview = DefaultImagePreview,\n  UnsupportedAttachmentPreview = DefaultUnknownAttachmentPreview,\n  VideoAttachmentPreview = DefaultFilePreview,\n  VoiceRecordingPreview = DefaultVoiceRecordingPreview,\n}: AttachmentPreviewListProps<StreamChatGenerics>) => {\n  const { attachments, removeAttachments, uploadAttachment } =\n    useMessageInputContext<StreamChatGenerics>('AttachmentPreviewList');\n\n  return (\n    <div className='str-chat__attachment-preview-list'>\n      <div\n        className='str-chat__attachment-list-scroll-container'\n        data-testid='attachment-list-scroll-container'\n      >\n        {attachments.map((attachment) => {\n          if (isScrapedContent(attachment)) return null;\n          if (isLocalVoiceRecordingAttachment(attachment)) {\n            return (\n              <VoiceRecordingPreview\n                attachment={attachment}\n                handleRetry={uploadAttachment}\n                key={attachment.localMetadata.id || attachment.asset_url}\n                removeAttachments={removeAttachments}\n              />\n            );\n          } else if (isLocalAudioAttachment(attachment)) {\n            return (\n              <AudioAttachmentPreview\n                attachment={attachment}\n                handleRetry={uploadAttachment}\n                key={attachment.localMetadata.id || attachment.asset_url}\n                removeAttachments={removeAttachments}\n              />\n            );\n          } else if (isLocalMediaAttachment(attachment)) {\n            return (\n              <VideoAttachmentPreview\n                attachment={attachment}\n                handleRetry={uploadAttachment}\n                key={attachment.localMetadata.id || attachment.asset_url}\n                removeAttachments={removeAttachments}\n              />\n            );\n          } else if (isLocalImageAttachment(attachment)) {\n            return (\n              <ImageAttachmentPreview\n                attachment={attachment}\n                handleRetry={uploadAttachment}\n                key={attachment.localMetadata.id || attachment.image_url}\n                removeAttachments={removeAttachments}\n              />\n            );\n          } else if (isLocalFileAttachment(attachment)) {\n            return (\n              <FileAttachmentPreview\n                attachment={attachment}\n                handleRetry={uploadAttachment}\n                key={attachment.localMetadata.id || attachment.asset_url}\n                removeAttachments={removeAttachments}\n              />\n            );\n          } else if (isLocalAttachment(attachment)) {\n            return (\n              <UnsupportedAttachmentPreview\n                attachment={attachment}\n                handleRetry={uploadAttachment}\n                key={attachment.localMetadata.id}\n                removeAttachments={removeAttachments}\n              />\n            );\n          }\n          return null;\n        })}\n      </div>\n    </div>\n  );\n};\n", "import React from 'react';\nimport { CloseIcon, DownloadIcon, LoadingIndicatorIcon, RetryIcon } from '../icons';\nimport { FileIcon } from '../../ReactFileUtilities';\nimport { useTranslationContext } from '../../../context';\nimport type { AttachmentPreviewProps } from './types';\nimport type { AnyLocalAttachment } from '../types';\nimport type { DefaultStreamChatGenerics } from '../../../types';\n\nexport type UnsupportedAttachmentPreviewProps<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n  CustomLocalMetadata = Record<string, unknown>,\n> = AttachmentPreviewProps<\n  AnyLocalAttachment<StreamChatGenerics, CustomLocalMetadata>,\n  StreamChatGenerics\n>;\n\nexport const UnsupportedAttachmentPreview = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n  attachment,\n  handleRetry,\n  removeAttachments,\n}: UnsupportedAttachmentPreviewProps<StreamChatGenerics>) => {\n  const { t } = useTranslationContext('UnsupportedAttachmentPreview');\n  const title = attachment.title ?? t('Unsupported attachment');\n  return (\n    <div\n      className='str-chat__attachment-preview-unsupported'\n      data-testid='attachment-preview-unknown'\n    >\n      <div className='str-chat__attachment-preview-file-icon'>\n        <FileIcon filename={title} mimeType={attachment.mime_type} />\n      </div>\n\n      <button\n        className='str-chat__attachment-preview-delete'\n        data-testid='file-preview-item-delete-button'\n        disabled={attachment.localMetadata?.uploadState === 'uploading'}\n        onClick={() =>\n          attachment.localMetadata?.id &&\n          removeAttachments([attachment.localMetadata?.id])\n        }\n      >\n        <CloseIcon />\n      </button>\n\n      {attachment.localMetadata?.uploadState === 'failed' && !!handleRetry && (\n        <button\n          className='str-chat__attachment-preview-error str-chat__attachment-preview-error-file'\n          data-testid='file-preview-item-retry-button'\n          onClick={() => handleRetry(attachment)}\n        >\n          <RetryIcon />\n        </button>\n      )}\n\n      <div className='str-chat__attachment-preview-metadata'>\n        <div className='str-chat__attachment-preview-title' title={title}>\n          {title}\n        </div>\n        {attachment.localMetadata?.uploadState === 'finished' &&\n          !!attachment.asset_url && (\n            <a\n              className='str-chat__attachment-preview-file-download'\n              download\n              href={attachment.asset_url}\n              rel='noreferrer'\n              target='_blank'\n            >\n              <DownloadIcon />\n            </a>\n          )}\n        {attachment.localMetadata?.uploadState === 'uploading' && (\n          <LoadingIndicatorIcon size={17} />\n        )}\n      </div>\n    </div>\n  );\n};\n", "import React from 'react';\nimport { PlayButton } from '../../Attachment';\nimport { RecordingTimer } from '../../MediaRecorder';\nimport { CloseIcon, LoadingIndicatorIcon, RetryIcon } from '../icons';\nimport { FileIcon } from '../../ReactFileUtilities';\nimport { useAudioController } from '../../Attachment/hooks/useAudioController';\nimport type { AttachmentPreviewProps } from './types';\nimport type { LocalVoiceRecordingAttachment } from '../types';\nimport type { DefaultStreamChatGenerics } from '../../../types';\n\nexport type VoiceRecordingPreviewProps<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n  CustomLocalMetadata = Record<string, unknown>,\n> = AttachmentPreviewProps<\n  LocalVoiceRecordingAttachment<StreamChatGenerics, CustomLocalMetadata>,\n  StreamChatGenerics\n>;\n\nexport const VoiceRecordingPreview = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n  attachment,\n  handleRetry,\n  removeAttachments,\n}: VoiceRecordingPreviewProps<StreamChatGenerics>) => {\n  const { audioRef, isPlaying, secondsElapsed, togglePlay } = useAudioController({\n    mimeType: attachment.mime_type,\n  });\n\n  return (\n    <div\n      className='str-chat__attachment-preview-voice-recording'\n      data-testid='attachment-preview-voice-recording'\n    >\n      <audio ref={audioRef}>\n        <source\n          data-testid='audio-source'\n          src={attachment.asset_url}\n          type={attachment.mime_type}\n        />\n      </audio>\n      <PlayButton isPlaying={isPlaying} onClick={togglePlay} />\n\n      <button\n        className='str-chat__attachment-preview-delete'\n        data-testid='file-preview-item-delete-button'\n        disabled={attachment.localMetadata?.uploadState === 'uploading'}\n        onClick={() =>\n          attachment.localMetadata?.id && removeAttachments([attachment.localMetadata.id])\n        }\n      >\n        <CloseIcon />\n      </button>\n\n      {attachment.localMetadata?.uploadState === 'failed' && !!handleRetry && (\n        <button\n          className='str-chat__attachment-preview-error str-chat__attachment-preview-error-file'\n          data-testid='file-preview-item-retry-button'\n          onClick={() => handleRetry(attachment)}\n        >\n          <RetryIcon />\n        </button>\n      )}\n\n      <div className='str-chat__attachment-preview-metadata'>\n        <div className='str-chat__attachment-preview-file-name' title={attachment.title}>\n          {attachment.title}\n        </div>\n        {typeof attachment.duration !== 'undefined' && (\n          <RecordingTimer durationSeconds={secondsElapsed || attachment.duration} />\n        )}\n        {attachment.localMetadata?.uploadState === 'uploading' && (\n          <LoadingIndicatorIcon size={17} />\n        )}\n      </div>\n      <div className='str-chat__attachment-preview-file-icon'>\n        <FileIcon filename={attachment.title} mimeType={attachment.mime_type} />\n      </div>\n    </div>\n  );\n};\n", "import React from 'react';\nimport { useTranslationContext } from '../../context';\n\nimport { RecordingPermission } from './classes/BrowserPermission';\n\nexport type RecordingPermissionDeniedNotificationProps = {\n  onClose: () => void;\n  permissionName: RecordingPermission;\n};\n\nexport const RecordingPermissionDeniedNotification = ({\n  onClose,\n  permissionName,\n}: RecordingPermissionDeniedNotificationProps) => {\n  const { t } = useTranslationContext();\n  const permissionTranslations = {\n    body: {\n      camera: t('To start recording, allow the camera access in your browser'),\n      microphone: t('To start recording, allow the microphone access in your browser'),\n    },\n    heading: {\n      camera: t('Allow access to camera'),\n      microphone: t('Allow access to microphone'),\n    },\n  };\n\n  return (\n    <div className='str-chat__recording-permission-denied-notification'>\n      <div className='str-chat__recording-permission-denied-notification__heading'>\n        {permissionTranslations.heading[permissionName]}\n      </div>\n      <p className='str-chat__recording-permission-denied-notification__message'>\n        {permissionTranslations.body[permissionName]}\n      </p>\n      <div className='str-chat__recording-permission-denied-notification__dismiss-button-container'>\n        <button\n          className='str-chat__recording-permission-denied-notification__dismiss-button'\n          onClick={onClose}\n        >\n          {t<string>('Ok')}\n        </button>\n      </div>\n    </div>\n  );\n};\n", "import React, { useMemo } from 'react';\nimport { AudioRecordingPreview } from './AudioRecordingPreview';\nimport { AudioRecordingInProgress } from './AudioRecordingInProgress';\nimport { MediaRecordingState } from '../classes';\nimport {\n  BinIcon,\n  CheckSignIcon,\n  LoadingIndicatorIcon,\n  MicIcon,\n  PauseIcon,\n  SendIcon,\n} from '../../MessageInput';\nimport { useMessageInputContext } from '../../../context';\n\nexport const AudioRecorder = () => {\n  const {\n    recordingController: { completeRecording, recorder, recording, recordingState },\n  } = useMessageInputContext();\n\n  const isUploadingFile = recording?.localMetadata?.uploadState === 'uploading';\n\n  const state = useMemo(\n    () => ({\n      paused: recordingState === MediaRecordingState.PAUSED,\n      recording: recordingState === MediaRecordingState.RECORDING,\n      stopped: recordingState === MediaRecordingState.STOPPED,\n    }),\n    [recordingState],\n  );\n\n  if (!recorder) return null;\n\n  return (\n    <div className='str-chat__audio_recorder-container'>\n      <div className='str-chat__audio_recorder' data-testid={'audio-recorder'}>\n        <button\n          className='str-chat__audio_recorder__cancel-button'\n          data-testid={'cancel-recording-audio-button'}\n          disabled={isUploadingFile}\n          onClick={recorder.cancel}\n        >\n          <BinIcon />\n        </button>\n\n        {state.stopped && recording?.asset_url ? (\n          <AudioRecordingPreview\n            durationSeconds={recording.duration ?? 0}\n            mimeType={recording.mime_type}\n            src={recording.asset_url}\n            waveformData={recording.waveform_data}\n          />\n        ) : state.paused || state.recording ? (\n          <AudioRecordingInProgress />\n        ) : null}\n\n        {state.paused && (\n          <button\n            className='str-chat__audio_recorder__resume-recording-button'\n            onClick={recorder.resume}\n          >\n            <MicIcon />\n          </button>\n        )}\n        {state.recording && (\n          <button\n            className='str-chat__audio_recorder__pause-recording-button'\n            data-testid={'pause-recording-audio-button'}\n            onClick={recorder.pause}\n          >\n            <PauseIcon />\n          </button>\n        )}\n        {state.stopped ? (\n          <button\n            className='str-chat__audio_recorder__complete-button'\n            data-testid='audio-recorder-complete-button'\n            disabled={isUploadingFile}\n            onClick={completeRecording}\n          >\n            {isUploadingFile ? <LoadingIndicatorIcon /> : <SendIcon />}\n          </button>\n        ) : (\n          <button\n            className='str-chat__audio_recorder__stop-button'\n            data-testid='audio-recorder-stop-button'\n            onClick={recorder.stop}\n          >\n            <CheckSignIcon />\n          </button>\n        )}\n      </div>\n    </div>\n  );\n};\n", "import React from 'react';\nimport { PauseIcon, PlayIcon } from '../../MessageInput/icons';\nimport { RecordingTimer } from './RecordingTimer';\nimport { useAudioController } from '../../Attachment/hooks/useAudioController';\nimport { WaveProgressBar } from '../../Attachment';\n\nexport type AudioRecordingPlayerProps = React.ComponentProps<'audio'> & {\n  durationSeconds: number;\n  mimeType?: string;\n  waveformData?: number[];\n};\n\nexport const AudioRecordingPreview = ({\n  durationSeconds,\n  mimeType,\n  waveformData,\n  ...props\n}: AudioRecordingPlayerProps) => {\n  const { audioRef, isPlaying, progress, secondsElapsed, seek, togglePlay } =\n    useAudioController({\n      durationSeconds,\n      mimeType,\n    });\n\n  const displayedDuration = secondsElapsed || durationSeconds;\n\n  return (\n    <React.Fragment>\n      <audio ref={audioRef}>\n        <source src={props.src} type={mimeType} />\n      </audio>\n      <button\n        className='str-chat__audio_recorder__toggle-playback-button'\n        data-testid='audio-recording-preview-toggle-play-btn'\n        onClick={togglePlay}\n      >\n        {isPlaying ? <PauseIcon /> : <PlayIcon />}\n      </button>\n      <RecordingTimer durationSeconds={displayedDuration} />\n      <div className='str-chat__wave-progress-bar__track-container'>\n        <WaveProgressBar\n          progress={progress}\n          seek={seek}\n          waveformData={waveformData || []}\n        />\n      </div>\n    </React.Fragment>\n  );\n};\n", "import clsx from 'clsx';\nimport { displayDuration } from '../../Attachment';\nimport React from 'react';\n\nexport type RecordingTimerProps = {\n  durationSeconds: number;\n};\n\nexport const RecordingTimer = ({ durationSeconds }: RecordingTimerProps) => (\n  <div\n    className={clsx('str-chat__recording-timer', {\n      'str-chat__recording-timer--hours': durationSeconds >= 3600,\n    })}\n  >\n    {displayDuration(durationSeconds)}\n  </div>\n);\n", "import React, { useEffect, useState } from 'react';\nimport { useTimeElapsed } from '../../MessageInput/hooks/useTimeElapsed';\nimport { useMessageInputContext } from '../../../context';\nimport { RecordingTimer } from './RecordingTimer';\n\ntype WaveformProps = {\n  maxDataPointsDrawn?: number;\n};\n\nconst AudioRecordingWaveform = ({ maxDataPointsDrawn = 100 }: WaveformProps) => {\n  const {\n    recordingController: { recorder },\n  } = useMessageInputContext();\n\n  const [amplitudes, setAmplitudes] = useState<number[]>([]);\n\n  useEffect(() => {\n    if (!recorder?.amplitudeRecorder) return;\n    const amplitudesSubscription =\n      recorder.amplitudeRecorder.amplitudes.subscribe(setAmplitudes);\n    return () => {\n      amplitudesSubscription.unsubscribe();\n    };\n  }, [recorder]);\n\n  if (!recorder) return null;\n\n  return (\n    <div className='str-chat__waveform-box-container'>\n      <div className='str-chat__audio_recorder__waveform-box'>\n        {amplitudes.slice(-maxDataPointsDrawn).map((amplitude, i) => (\n          <div\n            className='str-chat__wave-progress-bar__amplitude-bar'\n            key={`amplitude-${i}-voice-recording`}\n            style={\n              {\n                '--str-chat__wave-progress-bar__amplitude-bar-height': amplitude\n                  ? amplitude * 100 + '%'\n                  : '0%',\n              } as React.CSSProperties\n            }\n          />\n        ))}\n      </div>\n    </div>\n  );\n};\nexport const AudioRecordingInProgress = () => {\n  const { secondsElapsed, startCounter, stopCounter } = useTimeElapsed();\n  const {\n    recordingController: { recorder },\n  } = useMessageInputContext();\n\n  useEffect(() => {\n    if (!recorder?.mediaRecorder) return;\n    const { mediaRecorder } = recorder;\n\n    if (mediaRecorder.state === 'recording') {\n      startCounter();\n    }\n\n    mediaRecorder.addEventListener('start', startCounter);\n    mediaRecorder.addEventListener('resume', startCounter);\n    mediaRecorder.addEventListener('stop', stopCounter);\n    mediaRecorder.addEventListener('pause', stopCounter);\n\n    return () => {\n      mediaRecorder.removeEventListener('start', startCounter);\n      mediaRecorder.removeEventListener('resume', startCounter);\n      mediaRecorder.removeEventListener('stop', stopCounter);\n      mediaRecorder.removeEventListener('pause', stopCounter);\n    };\n  }, [recorder, startCounter, stopCounter]);\n\n  return (\n    <React.Fragment>\n      <RecordingTimer durationSeconds={secondsElapsed} />\n      <AudioRecordingWaveform />\n    </React.Fragment>\n  );\n};\n", "import { useCallback, useEffect, useRef, useState } from 'react';\n\ntype UseTimeElapsedParams = {\n  startOnMount?: boolean;\n};\n\n// todo: provide start timestamp\nexport const useTimeElapsed = ({ startOnMount }: UseTimeElapsedParams = {}) => {\n  const [secondsElapsed, setSecondsElapsed] = useState<number>(0);\n  const updateInterval = useRef<ReturnType<typeof setInterval>>(undefined);\n\n  const startCounter = useCallback(() => {\n    if (updateInterval.current) return;\n    updateInterval.current = setInterval(() => {\n      setSecondsElapsed((prev) => prev + 1);\n    }, 1000);\n  }, []);\n\n  const stopCounter = useCallback(() => {\n    clearInterval(updateInterval.current);\n    updateInterval.current = undefined;\n  }, []);\n\n  useEffect(() => {\n    if (!startOnMount) return;\n    startCounter();\n    return () => {\n      stopCounter();\n    };\n  }, [startCounter, startOnMount, stopCounter]);\n\n  return {\n    secondsElapsed,\n    startCounter,\n    stopCounter,\n  };\n};\n", "import React from 'react';\nimport { MicIcon } from '../../MessageInput/icons';\n\nexport type StartRecordingAudioButtonProps = React.ComponentProps<'button'>;\n\nexport const StartRecordingAudioButton = (props: StartRecordingAudioButtonProps) => (\n  <button\n    aria-label='Start recording audio'\n    className='str-chat__start-recording-audio-button'\n    data-testid='start-recording-audio-button'\n    {...props}\n  >\n    <MicIcon />\n  </button>\n);\n", "import React from 'react';\nimport { FileIcon } from '../../ReactFileUtilities';\nimport { CloseIcon, DownloadIcon, LoadingIndicatorIcon, RetryIcon } from '../icons';\nimport { useTranslationContext } from '../../../context';\n\nimport type { AttachmentPreviewProps } from './types';\nimport { LocalAttachmentCast, LocalAttachmentUploadMetadata } from '../types';\nimport type { DefaultStreamChatGenerics } from '../../../types';\n\ntype FileLikeAttachment = {\n  asset_url?: string;\n  file_size?: number;\n  mime_type?: string;\n  title?: string;\n};\n\nexport type FileAttachmentPreviewProps<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n  CustomLocalMetadata = Record<string, unknown>,\n> = AttachmentPreviewProps<\n  LocalAttachmentCast<\n    FileLikeAttachment,\n    LocalAttachmentUploadMetadata & CustomLocalMetadata\n  >,\n  StreamChatGenerics\n>;\n\nexport const FileAttachmentPreview = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n  attachment,\n  handleRetry,\n  removeAttachments,\n}: FileAttachmentPreviewProps<StreamChatGenerics>) => {\n  const { t } = useTranslationContext('FilePreview');\n  return (\n    <div\n      className='str-chat__attachment-preview-file'\n      data-testid='attachment-preview-file'\n    >\n      <div className='str-chat__attachment-preview-file-icon'>\n        <FileIcon filename={attachment.title} mimeType={attachment.mime_type} />\n      </div>\n\n      <button\n        aria-label={t('aria/Remove attachment')}\n        className='str-chat__attachment-preview-delete'\n        data-testid='file-preview-item-delete-button'\n        disabled={attachment.localMetadata?.uploadState === 'uploading'}\n        onClick={() =>\n          attachment.localMetadata?.id &&\n          removeAttachments([attachment.localMetadata?.id])\n        }\n      >\n        <CloseIcon />\n      </button>\n\n      {attachment.localMetadata?.uploadState === 'failed' && !!handleRetry && (\n        <button\n          className='str-chat__attachment-preview-error str-chat__attachment-preview-error-file'\n          data-testid='file-preview-item-retry-button'\n          onClick={() => handleRetry(attachment)}\n        >\n          <RetryIcon />\n        </button>\n      )}\n\n      <div className='str-chat__attachment-preview-file-end'>\n        <div className='str-chat__attachment-preview-file-name' title={attachment.title}>\n          {attachment.title}\n        </div>\n        {attachment.localMetadata?.uploadState === 'finished' &&\n          !!attachment.asset_url && (\n            <a\n              aria-label={t('aria/Download attachment')}\n              className='str-chat__attachment-preview-file-download'\n              download\n              href={attachment.asset_url}\n              rel='noreferrer'\n              target='_blank'\n              title={t('Download attachment {{ name }}', { name: attachment.title })}\n            >\n              <DownloadIcon />\n            </a>\n          )}\n        {attachment.localMetadata?.uploadState === 'uploading' && (\n          <LoadingIndicatorIcon size={17} />\n        )}\n      </div>\n    </div>\n  );\n};\n", "import clsx from 'clsx';\nimport { CloseIcon, LoadingIndicatorIcon, RetryIcon } from '../icons';\nimport React, { useCallback, useState } from 'react';\nimport { BaseImage as DefaultBaseImage } from '../../Gallery';\nimport { useComponentContext, useTranslationContext } from '../../../context';\nimport type { AttachmentPreviewProps } from './types';\nimport type { LocalImageAttachment } from '../types';\nimport type { DefaultStreamChatGenerics } from '../../../types';\n\nexport type ImageAttachmentPreviewProps<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n  CustomLocalMetadata = Record<string, unknown>,\n> = AttachmentPreviewProps<\n  LocalImageAttachment<StreamChatGenerics, CustomLocalMetadata>,\n  StreamChatGenerics\n>;\n\nexport const ImageAttachmentPreview = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n  attachment,\n  handleRetry,\n  removeAttachments,\n}: ImageAttachmentPreviewProps<StreamChatGenerics>) => {\n  const { t } = useTranslationContext('ImagePreviewItem');\n  const { BaseImage = DefaultBaseImage } = useComponentContext('ImagePreview');\n  const [previewError, setPreviewError] = useState(false);\n\n  const { id, uploadState } = attachment.localMetadata ?? {};\n\n  const handleLoadError = useCallback(() => setPreviewError(true), []);\n  const assetUrl = attachment.image_url || attachment.localMetadata.previewUri;\n\n  return (\n    <div\n      className={clsx('str-chat__attachment-preview-image', {\n        'str-chat__attachment-preview-image--error': previewError,\n      })}\n      data-testid='attachment-preview-image'\n    >\n      <button\n        aria-label={t('aria/Remove attachment')}\n        className='str-chat__attachment-preview-delete'\n        data-testid='image-preview-item-delete-button'\n        disabled={uploadState === 'uploading'}\n        onClick={() => id && removeAttachments([id])}\n      >\n        <CloseIcon />\n      </button>\n\n      {uploadState === 'failed' && (\n        <button\n          className='str-chat__attachment-preview-error str-chat__attachment-preview-error-image'\n          data-testid='image-preview-item-retry-button'\n          onClick={() => handleRetry(attachment)}\n        >\n          <RetryIcon />\n        </button>\n      )}\n\n      {uploadState === 'uploading' && (\n        <div className='str-chat__attachment-preview-image-loading'>\n          <LoadingIndicatorIcon size={17} />\n        </div>\n      )}\n\n      {assetUrl && (\n        <BaseImage\n          alt={attachment.fallback}\n          className='str-chat__attachment-preview-thumbnail'\n          onError={handleLoadError}\n          src={assetUrl}\n          title={attachment.fallback}\n        />\n      )}\n    </div>\n  );\n};\n", "import React from 'react';\nimport { useTimer } from './hooks/useTimer';\n\nexport type CooldownTimerProps = {\n  cooldownInterval: number;\n  setCooldownRemaining: React.Dispatch<React.SetStateAction<number | undefined>>;\n};\nexport const CooldownTimer = ({ cooldownInterval }: CooldownTimerProps) => {\n  const secondsLeft = useTimer({ startFrom: cooldownInterval });\n\n  return (\n    <div className='str-chat__message-input-cooldown' data-testid='cooldown-timer'>\n      {secondsLeft}\n    </div>\n  );\n};\n", "import { useEffect, useState } from 'react';\n\nexport const useTimer = ({ startFrom }: { startFrom: number }) => {\n  const [secondsLeft, setSecondsLeft] = useState<number | undefined>();\n\n  useEffect(() => {\n    let countdownTimeout: ReturnType<typeof setTimeout>;\n    if (typeof secondsLeft === 'number' && secondsLeft > 0) {\n      countdownTimeout = setTimeout(() => {\n        setSecondsLeft(secondsLeft - 1);\n      }, 1000);\n    }\n    return () => {\n      clearTimeout(countdownTimeout);\n    };\n  }, [secondsLeft]);\n\n  useEffect(() => {\n    setSecondsLeft(startFrom ?? 0);\n  }, [startFrom]);\n\n  return secondsLeft;\n};\n", "import React, { PropsWithChildren } from 'react';\n\nimport { useCommandTrigger } from './hooks/useCommandTrigger';\nimport { useEmojiTrigger } from './hooks/useEmojiTrigger';\nimport { useUserTrigger } from './hooks/useUserTrigger';\n\nimport {\n  MessageInputContextProvider,\n  useMessageInputContext,\n} from '../../context/MessageInputContext';\n\nimport type {\n  SuggestionCommand,\n  SuggestionUser,\n} from '../ChatAutoComplete/ChatAutoComplete';\nimport type { CommandItemProps } from '../CommandItem/CommandItem';\nimport type { EmoticonItemProps } from '../EmoticonItem/EmoticonItem';\nimport type { UserItemProps } from '../UserItem/UserItem';\n\nimport type {\n  CustomTrigger,\n  DefaultStreamChatGenerics,\n  UnknownType,\n} from '../../types/types';\n\nexport type AutocompleteMinimalData = {\n  id?: string;\n  name?: string;\n} & ({ id: string } | { name: string });\n\nexport type CommandTriggerSetting<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = TriggerSetting<CommandItemProps, SuggestionCommand<StreamChatGenerics>>;\n\nexport type EmojiTriggerSetting = TriggerSetting<EmoticonItemProps>;\n\nexport type UserTriggerSetting<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = TriggerSetting<UserItemProps, SuggestionUser<StreamChatGenerics>>;\n\nexport type TriggerSetting<T extends UnknownType = UnknownType, U = UnknownType> = {\n  component: string | React.ComponentType<T>;\n  dataProvider: (\n    query: string,\n    text: string,\n    onReady: (data: (U & AutocompleteMinimalData)[], token: string) => void,\n  ) => U[] | PromiseLike<void> | void;\n  output: (entity: U) =>\n    | {\n        caretPosition: 'start' | 'end' | 'next' | number;\n        text: string;\n        key?: string;\n      }\n    | string\n    | null;\n  callback?: (item: U) => void;\n};\n\nexport type TriggerSettings<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n  V extends CustomTrigger = CustomTrigger,\n> =\n  | {\n      [key in keyof V]: TriggerSetting<V[key]['componentProps'], V[key]['data']>;\n    }\n  | {\n      '/': CommandTriggerSetting<StreamChatGenerics>;\n      ':': EmojiTriggerSetting;\n      '@': UserTriggerSetting<StreamChatGenerics>;\n    };\n\nexport const DefaultTriggerProvider = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n  V extends CustomTrigger = CustomTrigger,\n>({\n  children,\n}: PropsWithChildren<Record<string, unknown>>) => {\n  const currentValue = useMessageInputContext<StreamChatGenerics, V>(\n    'DefaultTriggerProvider',\n  );\n\n  const defaultAutocompleteTriggers: TriggerSettings<StreamChatGenerics> = {\n    '/': useCommandTrigger<StreamChatGenerics>(),\n    ':': useEmojiTrigger(currentValue.emojiSearchIndex),\n    '@': useUserTrigger<StreamChatGenerics>({\n      disableMentions: currentValue.disableMentions,\n      mentionAllAppUsers: currentValue.mentionAllAppUsers,\n      mentionQueryParams: currentValue.mentionQueryParams,\n      onSelectUser: currentValue.onSelectUser,\n      useMentionsTransliteration: currentValue.useMentionsTransliteration,\n    }),\n  };\n\n  const newValue = {\n    ...currentValue,\n    autocompleteTriggers: defaultAutocompleteTriggers,\n  };\n\n  return (\n    <MessageInputContextProvider value={newValue}>{children}</MessageInputContextProvider>\n  );\n};\n", "import { CommandItem } from '../../CommandItem/CommandItem';\n\nimport { useChannelStateContext } from '../../../context/ChannelStateContext';\nimport { useTranslationContext } from '../../../context';\n\nimport type { CommandResponse } from 'stream-chat';\n\nimport type { CommandTriggerSetting } from '../DefaultTriggerProvider';\n\nimport type { DefaultStreamChatGenerics } from '../../../types/types';\n\ntype ValidCommand<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Required<Pick<CommandResponse<StreamChatGenerics>, 'name'>> &\n  Omit<CommandResponse<StreamChatGenerics>, 'name'>;\n\nexport const useCommandTrigger = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(): CommandTriggerSetting<StreamChatGenerics> => {\n  const { channelConfig } =\n    useChannelStateContext<StreamChatGenerics>('useCommandTrigger');\n  const { t } = useTranslationContext('useCommandTrigger');\n\n  const commands = channelConfig?.commands;\n\n  return {\n    component: CommandItem,\n    dataProvider: (query, text, onReady) => {\n      if (text.indexOf('/') !== 0 || !commands) {\n        return [];\n      }\n      const selectedCommands = commands.filter(\n        (command) => command.name?.indexOf(query) !== -1,\n      );\n\n      // sort alphabetically unless you're matching the first char\n      selectedCommands.sort((a, b) => {\n        let nameA = a.name?.toLowerCase();\n        let nameB = b.name?.toLowerCase();\n        if (nameA?.indexOf(query) === 0) {\n          nameA = `0${nameA}`;\n        }\n        if (nameB?.indexOf(query) === 0) {\n          nameB = `0${nameB}`;\n        }\n        // Should confirm possible null / undefined when TS is fully implemented\n        if (nameA != null && nameB != null) {\n          if (nameA < nameB) {\n            return -1;\n          }\n          if (nameA > nameB) {\n            return 1;\n          }\n        }\n\n        return 0;\n      });\n\n      const result = selectedCommands.slice(0, 5);\n      if (onReady)\n        onReady(\n          result\n            .filter(\n              (\n                result,\n              ): result is CommandResponse<StreamChatGenerics> & { name: string } =>\n                result.name !== undefined,\n            )\n            .map((commandData) => {\n              const translatedCommandData: ValidCommand<StreamChatGenerics> = {\n                name: commandData.name,\n              };\n\n              if (commandData.args)\n                translatedCommandData.args = t(`${commandData.name}-command-args`, {\n                  defaultValue: commandData.args,\n                });\n              if (commandData.description)\n                translatedCommandData.description = t(\n                  `${commandData.name}-command-description`,\n                  {\n                    defaultValue: commandData.description,\n                  },\n                );\n\n              return translatedCommandData;\n            }),\n          query,\n        );\n\n      return result;\n    },\n    output: (entity) => ({\n      caretPosition: 'next',\n      key: entity.name,\n      text: `/${entity.name}`,\n    }),\n  };\n};\n", "import React from 'react';\n\nexport type EmoticonItemProps = {\n  entity: {\n    /** The parts of the Name property of the entity (or id if no name) that can be matched to the user input value.\n     * Default is bold for matches, but can be overwritten in css.\n     * */\n    itemNameParts: { match: string; parts: string[] };\n    /** Name for emoticon */\n    name: string;\n    /** Native value or actual emoticon */\n    native: string;\n  };\n};\n\nconst UnMemoizedEmoticonItem = (props: EmoticonItemProps) => {\n  const { entity } = props;\n\n  const hasEntity = Object.keys(entity).length;\n  const itemParts = entity?.itemNameParts;\n\n  const renderName = () => {\n    if (!hasEntity) return null;\n    return (\n      hasEntity &&\n      itemParts.parts.map((part, i) =>\n        part.toLowerCase() === itemParts.match.toLowerCase() ? (\n          <span className='str-chat__emoji-item--highlight' key={`part-${i}`}>\n            {part}\n          </span>\n        ) : (\n          <span className='str-chat__emoji-item--part' key={`part-${i}`}>\n            {part}\n          </span>\n        ),\n      )\n    );\n  };\n\n  return (\n    <div className='str-chat__emoji-item'>\n      <span className='str-chat__emoji-item--entity'>{entity.native}</span>\n      <span className='str-chat__emoji-item--name'>{renderName()}</span>\n    </div>\n  );\n};\n\nexport const EmoticonItem = React.memo(\n  UnMemoizedEmoticonItem,\n) as typeof UnMemoizedEmoticonItem;\n", "import { EmoticonItem } from '../../EmoticonItem/EmoticonItem';\nimport type { EmojiTriggerSetting } from '../DefaultTriggerProvider';\nimport type { EmojiSearchIndex } from '../MessageInput';\n\nexport const useEmojiTrigger = <T extends EmojiSearchIndex>(\n  emojiSearchIndex?: T,\n): EmojiTriggerSetting => ({\n  component: EmoticonItem,\n  dataProvider: async (query, _, onReady) => {\n    if (query.length === 0 || query.charAt(0).match(/[^a-zA-Z0-9+-]/)) {\n      return onReady([], query);\n    }\n    const emojis = (await emojiSearchIndex?.search(query)) ?? [];\n\n    // emojiIndex.search sometimes returns undefined values, so filter those out first\n    const result = emojis\n      .filter(Boolean)\n      .slice(0, 7)\n      .map(({ id, name, native, skins = [] }) => {\n        const [firstSkin] = skins;\n\n        return {\n          id,\n          name,\n          native: native ?? firstSkin.native,\n        };\n      });\n\n    if (onReady) onReady(result, query);\n  },\n  output: (entity) => ({\n    caretPosition: 'next',\n    key: entity.id as string,\n    text: `${'native' in entity ? entity.native : ''}`,\n  }),\n});\n", "import { useCallback, useState } from 'react';\nimport throttle from 'lodash.throttle';\n\nimport { SearchLocalUserParams, searchLocalUsers } from './utils';\n\nimport { UserItem } from '../../UserItem/UserItem';\n\nimport { useChatContext } from '../../../context/ChatContext';\nimport { useChannelStateContext } from '../../../context/ChannelStateContext';\n\nimport type { UserResponse } from 'stream-chat';\n\nimport type { SearchQueryParams } from '../../ChannelSearch/hooks/useChannelSearch';\nimport type { UserTriggerSetting } from '../../MessageInput/DefaultTriggerProvider';\n\nimport type { DefaultStreamChatGenerics } from '../../../types/types';\n\nexport type UserTriggerParams<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n  onSelectUser: (item: UserResponse<StreamChatGenerics>) => void;\n  disableMentions?: boolean;\n  mentionAllAppUsers?: boolean;\n  mentionQueryParams?: SearchQueryParams<StreamChatGenerics>['userFilters'];\n  useMentionsTransliteration?: boolean;\n};\n\nexport const useUserTrigger = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  params: UserTriggerParams<StreamChatGenerics>,\n): UserTriggerSetting<StreamChatGenerics> => {\n  const {\n    disableMentions,\n    mentionAllAppUsers,\n    mentionQueryParams = {},\n    onSelectUser,\n    useMentionsTransliteration,\n  } = params;\n\n  const [searching, setSearching] = useState(false);\n\n  const { client, mutes } = useChatContext<StreamChatGenerics>('useUserTrigger');\n  const { channel } = useChannelStateContext<StreamChatGenerics>('useUserTrigger');\n\n  const { members } = channel.state;\n  const { watchers } = channel.state;\n\n  const getMembersAndWatchers = useCallback(() => {\n    const memberUsers = members ? Object.values(members).map(({ user }) => user) : [];\n    const watcherUsers = watchers ? Object.values(watchers) : [];\n    const users = [...memberUsers, ...watcherUsers];\n\n    // make sure we don't list users twice\n    const uniqueUsers = {} as Record<string, UserResponse<StreamChatGenerics>>;\n\n    users.forEach((user) => {\n      if (user && !uniqueUsers[user.id]) {\n        uniqueUsers[user.id] = user;\n      }\n    });\n\n    return Object.values(uniqueUsers);\n  }, [members, watchers]);\n\n  // eslint-disable-next-line react-hooks/exhaustive-deps\n  const queryMembersThrottled = useCallback(\n    throttle(\n      async (\n        query: string,\n        onReady: (users: UserResponse<StreamChatGenerics>[]) => void,\n      ) => {\n        try {\n          // @ts-expect-error valid query\n          const response = await channel.queryMembers({\n            name: { $autocomplete: query },\n          });\n\n          const users = response.members.map(\n            (member) => member.user,\n          ) as UserResponse<StreamChatGenerics>[];\n\n          if (onReady && users.length) {\n            onReady(users);\n          } else {\n            onReady([]);\n          }\n        } catch (error) {\n          console.log({ error });\n        }\n      },\n      200,\n    ),\n    [channel],\n  );\n\n  const queryUsers = async (\n    query: string,\n    onReady: (users: UserResponse<StreamChatGenerics>[]) => void,\n  ) => {\n    if (!query || searching) return;\n    setSearching(true);\n\n    try {\n      const { users } = await client.queryUsers(\n        // @ts-expect-error valid query\n        {\n          $or: [{ id: { $autocomplete: query } }, { name: { $autocomplete: query } }],\n          ...(typeof mentionQueryParams.filters === 'function'\n            ? mentionQueryParams.filters(query)\n            : mentionQueryParams.filters),\n        },\n        Array.isArray(mentionQueryParams.sort)\n          ? [{ id: 1 }, ...mentionQueryParams.sort]\n          : { id: 1, ...mentionQueryParams.sort },\n        { limit: 10, ...mentionQueryParams.options },\n      );\n\n      if (onReady && users.length) {\n        onReady(users);\n      } else {\n        onReady([]);\n      }\n    } catch (error) {\n      console.log({ error });\n    }\n\n    setSearching(false);\n  };\n\n  const queryUsersThrottled = throttle(queryUsers, 200);\n\n  return {\n    callback: (item) => onSelectUser(item),\n    component: UserItem,\n    dataProvider: (query, text, onReady) => {\n      if (disableMentions) return;\n\n      const filterMutes = (data: UserResponse<StreamChatGenerics>[]) => {\n        if (text.includes('/unmute') && !mutes.length) {\n          return [];\n        }\n        if (!mutes.length) return data;\n\n        if (text.includes('/unmute')) {\n          return data.filter((suggestion) =>\n            mutes.some((mute) => mute.target.id === suggestion.id),\n          );\n        }\n        return data.filter((suggestion) =>\n          mutes.every((mute) => mute.target.id !== suggestion.id),\n        );\n      };\n\n      if (mentionAllAppUsers) {\n        return queryUsersThrottled(query, (data: UserResponse<StreamChatGenerics>[]) => {\n          if (onReady) onReady(filterMutes(data), query);\n        });\n      }\n\n      /**\n       * By default, we return maximum 100 members via queryChannels api call.\n       * Thus it is safe to assume, that if number of members in channel.state is < 100,\n       * then all the members are already available on client side and we don't need to\n       * make any api call to queryMembers endpoint.\n       */\n      if (!query || Object.values(members || {}).length < 100) {\n        const users = getMembersAndWatchers();\n\n        const params: SearchLocalUserParams<StreamChatGenerics> = {\n          ownUserId: client.userID,\n          query,\n          text,\n          useMentionsTransliteration,\n          users,\n        };\n\n        const matchingUsers = searchLocalUsers<StreamChatGenerics>(params);\n\n        const usersToShow = mentionQueryParams.options?.limit ?? 7;\n        const data = matchingUsers.slice(0, usersToShow);\n\n        if (onReady) onReady(filterMutes(data), query);\n        return data;\n      }\n\n      return queryMembersThrottled(query, (data: UserResponse<StreamChatGenerics>[]) => {\n        if (onReady) onReady(filterMutes(data), query);\n      });\n    },\n    output: (entity) => ({\n      caretPosition: 'next',\n      key: entity.id,\n      text: `@${entity.name || entity.id}`,\n    }),\n  };\n};\n", "import React, { useEffect } from 'react';\nimport { MessageInputFlat } from './MessageInputFlat';\n\nimport { useMessageInputContext, useTranslationContext } from '../../context';\n\nimport type { CustomTrigger, DefaultStreamChatGenerics } from '../../types/types';\n\nexport const EditMessageForm = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n  V extends CustomTrigger = CustomTrigger,\n>() => {\n  const { t } = useTranslationContext('EditMessageForm');\n\n  const { clearEditingState, handleSubmit } = useMessageInputContext<\n    StreamChatGenerics,\n    V\n  >('EditMessageForm');\n\n  useEffect(() => {\n    const onKeyDown = (event: KeyboardEvent) => {\n      if (event.key === 'Escape') clearEditingState?.();\n    };\n\n    document.addEventListener('keydown', onKeyDown);\n    return () => document.removeEventListener('keydown', onKeyDown);\n  }, [clearEditingState]);\n\n  return (\n    <form\n      autoComplete='off'\n      className='str-chat__edit-message-form'\n      onSubmit={handleSubmit}\n    >\n      <MessageInputFlat />\n      <div className='str-chat__edit-message-form-options'>\n        <button\n          className='str-chat__edit-message-cancel'\n          data-testid='cancel-button'\n          onClick={clearEditingState}\n        >\n          {t<string>('Cancel')}\n        </button>\n        <button\n          className='str-chat__edit-message-send'\n          data-testid='send-button-edit-form'\n          type='submit'\n        >\n          {t<string>('Send')}\n        </button>\n      </div>\n    </form>\n  );\n};\n", "import React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport type { Event } from 'stream-chat';\nimport clsx from 'clsx';\nimport { useDropzone } from 'react-dropzone';\nimport {\n  AttachmentSelector as DefaultAttachmentSelector,\n  SimpleAttachmentSelector,\n} from './AttachmentSelector';\nimport { AttachmentPreviewList as DefaultAttachmentPreviewList } from './AttachmentPreviewList';\nimport { CooldownTimer as DefaultCooldownTimer } from './CooldownTimer';\nimport { SendButton as DefaultSendButton } from './SendButton';\nimport { StopAIGenerationButton as DefaultStopAIGenerationButton } from './StopAIGenerationButton';\nimport {\n  AudioRecorder as DefaultAudioRecorder,\n  RecordingPermissionDeniedNotification as DefaultRecordingPermissionDeniedNotification,\n  StartRecordingAudioButton as DefaultStartRecordingAudioButton,\n  RecordingPermission,\n} from '../MediaRecorder';\nimport {\n  QuotedMessagePreview as DefaultQuotedMessagePreview,\n  QuotedMessagePreviewHeader,\n} from './QuotedMessagePreview';\nimport { LinkPreviewList as DefaultLinkPreviewList } from './LinkPreviewList';\n\nimport { ChatAutoComplete } from '../ChatAutoComplete/ChatAutoComplete';\nimport { RecordingAttachmentType } from '../MediaRecorder/classes';\n\nimport { useChatContext } from '../../context/ChatContext';\nimport { useChannelActionContext } from '../../context/ChannelActionContext';\nimport { useChannelStateContext } from '../../context/ChannelStateContext';\nimport { useTranslationContext } from '../../context/TranslationContext';\nimport { useMessageInputContext } from '../../context/MessageInputContext';\nimport { useComponentContext } from '../../context/ComponentContext';\n\nimport type { DefaultStreamChatGenerics } from '../../types/types';\nimport { AIStates, useAIState } from '../AIStateIndicator';\n\nexport const MessageInputFlat = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>() => {\n  const { t } = useTranslationContext('MessageInputFlat');\n  const {\n    asyncMessagesMultiSendEnabled,\n    attachments,\n    cooldownRemaining,\n    findAndEnqueueURLsToEnrich,\n    handleSubmit,\n    hideSendButton,\n    isUploadEnabled,\n    linkPreviews,\n    maxFilesLeft,\n    message,\n    numberOfUploads,\n    parent,\n    recordingController,\n    setCooldownRemaining,\n    text,\n    uploadNewFiles,\n  } = useMessageInputContext<StreamChatGenerics>('MessageInputFlat');\n\n  const {\n    AttachmentPreviewList = DefaultAttachmentPreviewList,\n    AttachmentSelector = message ? SimpleAttachmentSelector : DefaultAttachmentSelector,\n    AudioRecorder = DefaultAudioRecorder,\n    CooldownTimer = DefaultCooldownTimer,\n    EmojiPicker,\n    LinkPreviewList = DefaultLinkPreviewList,\n    QuotedMessagePreview = DefaultQuotedMessagePreview,\n    RecordingPermissionDeniedNotification = DefaultRecordingPermissionDeniedNotification,\n    SendButton = DefaultSendButton,\n    StartRecordingAudioButton = DefaultStartRecordingAudioButton,\n    StopAIGenerationButton: StopAIGenerationButtonOverride,\n  } = useComponentContext<StreamChatGenerics>('MessageInputFlat');\n  const {\n    acceptedFiles = [],\n    multipleUploads,\n    quotedMessage,\n  } = useChannelStateContext<StreamChatGenerics>('MessageInputFlat');\n  const { setQuotedMessage } = useChannelActionContext('MessageInputFlat');\n  const { channel } = useChatContext<StreamChatGenerics>('MessageInputFlat');\n\n  const { aiState } = useAIState(channel);\n\n  const stopGenerating = useCallback(() => channel?.stopAIResponse(), [channel]);\n\n  const [\n    showRecordingPermissionDeniedNotification,\n    setShowRecordingPermissionDeniedNotification,\n  ] = useState(false);\n  const closePermissionDeniedNotification = useCallback(() => {\n    setShowRecordingPermissionDeniedNotification(false);\n  }, []);\n\n  const failedUploadsCount = useMemo(\n    () => attachments.filter((a) => a.localMetadata?.uploadState === 'failed').length,\n    [attachments],\n  );\n\n  const accept = useMemo(\n    () =>\n      acceptedFiles.reduce<Record<string, Array<string>>>((mediaTypeMap, mediaType) => {\n        mediaTypeMap[mediaType] ??= [];\n        return mediaTypeMap;\n      }, {}),\n    [acceptedFiles],\n  );\n\n  const { getRootProps, isDragActive, isDragReject } = useDropzone({\n    accept,\n    disabled: !isUploadEnabled || maxFilesLeft === 0,\n    multiple: multipleUploads,\n    noClick: true,\n    onDrop: uploadNewFiles,\n  });\n\n  useEffect(() => {\n    const handleQuotedMessageUpdate = (e: Event<StreamChatGenerics>) => {\n      if (e.message?.id !== quotedMessage?.id) return;\n      if (e.type === 'message.deleted') {\n        setQuotedMessage(undefined);\n        return;\n      }\n      setQuotedMessage(e.message);\n    };\n    channel?.on('message.deleted', handleQuotedMessageUpdate);\n    channel?.on('message.updated', handleQuotedMessageUpdate);\n\n    return () => {\n      channel?.off('message.deleted', handleQuotedMessageUpdate);\n      channel?.off('message.updated', handleQuotedMessageUpdate);\n    };\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [channel, quotedMessage]);\n\n  if (recordingController.recordingState) return <AudioRecorder />;\n\n  // TODO: \"!message\" condition is a temporary fix for shared\n  // state when editing a message (fix shared state issue)\n  const displayQuotedMessage =\n    !message && quotedMessage && quotedMessage.parent_id === parent?.id;\n  const recordingEnabled = !!(recordingController.recorder && navigator.mediaDevices); // account for requirement on iOS as per this bug report: https://bugs.webkit.org/show_bug.cgi?id=252303\n  const isRecording = !!recordingController.recordingState;\n\n  /**\n   * This bit here is needed to make sure that we can get rid of the default behaviour\n   * if need be. Essentially this allows us to pass StopAIGenerationButton={null} and\n   * completely circumvent the default logic if it's not what we want. We need it as a\n   * prop because there is no other trivial way to override the SendMessage button otherwise.\n   */\n  const StopAIGenerationButton =\n    StopAIGenerationButtonOverride === undefined\n      ? DefaultStopAIGenerationButton\n      : StopAIGenerationButtonOverride;\n  const shouldDisplayStopAIGeneration =\n    [AIStates.Thinking, AIStates.Generating].includes(aiState) &&\n    !!StopAIGenerationButton;\n\n  return (\n    <>\n      <div {...getRootProps({ className: 'str-chat__message-input' })}>\n        {recordingEnabled &&\n          recordingController.permissionState === 'denied' &&\n          showRecordingPermissionDeniedNotification && (\n            <RecordingPermissionDeniedNotification\n              onClose={closePermissionDeniedNotification}\n              permissionName={RecordingPermission.MIC}\n            />\n          )}\n        {findAndEnqueueURLsToEnrich && (\n          <LinkPreviewList linkPreviews={Array.from(linkPreviews.values())} />\n        )}\n        {isDragActive && (\n          <div\n            className={clsx('str-chat__dropzone-container', {\n              'str-chat__dropzone-container--not-accepted': isDragReject,\n            })}\n          >\n            {!isDragReject && <p>{t<string>('Drag your files here')}</p>}\n            {isDragReject && <p>{t<string>('Some of the files will not be accepted')}</p>}\n          </div>\n        )}\n        {displayQuotedMessage && <QuotedMessagePreviewHeader />}\n\n        <div className='str-chat__message-input-inner'>\n          <AttachmentSelector />\n          <div className='str-chat__message-textarea-container'>\n            {displayQuotedMessage && (\n              <QuotedMessagePreview quotedMessage={quotedMessage} />\n            )}\n            {isUploadEnabled &&\n              !!(numberOfUploads + failedUploadsCount || attachments.length > 0) && (\n                <AttachmentPreviewList />\n              )}\n\n            <div className='str-chat__message-textarea-with-emoji-picker'>\n              <ChatAutoComplete />\n\n              {EmojiPicker && <EmojiPicker />}\n            </div>\n          </div>\n          {shouldDisplayStopAIGeneration ? (\n            <StopAIGenerationButton onClick={stopGenerating} />\n          ) : (\n            !hideSendButton && (\n              <>\n                {cooldownRemaining ? (\n                  <CooldownTimer\n                    cooldownInterval={cooldownRemaining}\n                    setCooldownRemaining={setCooldownRemaining}\n                  />\n                ) : (\n                  <>\n                    <SendButton\n                      disabled={\n                        !numberOfUploads &&\n                        !text.length &&\n                        attachments.length - failedUploadsCount === 0\n                      }\n                      sendMessage={handleSubmit}\n                    />\n                    {recordingEnabled && (\n                      <StartRecordingAudioButton\n                        disabled={\n                          isRecording ||\n                          (!asyncMessagesMultiSendEnabled &&\n                            attachments.some(\n                              (a) => a.type === RecordingAttachmentType.VOICE_RECORDING,\n                            ))\n                        }\n                        onClick={() => {\n                          recordingController.recorder?.start();\n                          setShowRecordingPermissionDeniedNotification(true);\n                        }}\n                      />\n                    )}\n                  </>\n                )}\n              </>\n            )\n          )}\n        </div>\n      </div>\n    </>\n  );\n};\n", "import React from 'react';\nimport { Message } from 'stream-chat';\nimport { SendIcon } from './icons';\nimport type { DefaultStreamChatGenerics } from '../../types/types';\n\nexport type SendButtonProps<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n  sendMessage: (\n    event: React.BaseSyntheticEvent,\n    customMessageData?: Partial<Message<StreamChatGenerics>>,\n  ) => void;\n} & React.ComponentProps<'button'>;\nexport const SendButton = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n  sendMessage,\n  ...rest\n}: SendButtonProps<StreamChatGenerics>) => (\n  <button\n    aria-label='Send'\n    className='str-chat__send-button'\n    data-testid='send-button'\n    onClick={sendMessage}\n    type='button'\n    {...rest}\n  >\n    <SendIcon />\n  </button>\n);\n", "import React from 'react';\nimport { useTranslationContext } from '../../context';\n\nexport type StopAIGenerationButtonProps = React.ComponentProps<'button'>;\n\nexport const StopAIGenerationButton = ({\n  onClick,\n  ...restProps\n}: StopAIGenerationButtonProps) => {\n  const { t } = useTranslationContext();\n  return (\n    <button\n      aria-label={t('aria/Stop AI Generation')}\n      className='str-chat__stop-ai-generation-button'\n      data-testid='stop-ai-generation-button'\n      onClick={onClick}\n      {...restProps}\n    />\n  );\n};\n", "import React, { useMemo } from 'react';\n\nimport { CloseIcon } from './icons';\nimport { Attachment as DefaultAttachment } from '../Attachment';\nimport { Avatar as DefaultAvatar } from '../Avatar';\nimport { Poll } from '../Poll';\n\nimport { useChatContext } from '../../context/ChatContext';\nimport { useChannelActionContext } from '../../context/ChannelActionContext';\nimport { useComponentContext } from '../../context/ComponentContext';\nimport { useTranslationContext } from '../../context/TranslationContext';\n\nimport type { TranslationLanguages } from 'stream-chat';\nimport type { StreamMessage } from '../../context/ChannelStateContext';\nimport type { MessageContextValue } from '../../context';\nimport type { DefaultStreamChatGenerics } from '../../types/types';\nimport { renderText as defaultRenderText } from '../Message';\n\nexport const QuotedMessagePreviewHeader = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>() => {\n  const { setQuotedMessage } =\n    useChannelActionContext<StreamChatGenerics>('QuotedMessagePreview');\n  const { t } = useTranslationContext('QuotedMessagePreview');\n\n  return (\n    <div className='str-chat__quoted-message-preview-header'>\n      <div className='str-chat__quoted-message-reply-to-message'>\n        {t<string>('Reply to Message')}\n      </div>\n      <button\n        aria-label={t('aria/Cancel Reply')}\n        className='str-chat__quoted-message-remove'\n        onClick={() => setQuotedMessage(undefined)}\n      >\n        <CloseIcon />\n      </button>\n    </div>\n  );\n};\n\nexport type QuotedMessagePreviewProps<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n  quotedMessage: StreamMessage<StreamChatGenerics>;\n  renderText?: MessageContextValue<StreamChatGenerics>['renderText'];\n};\n\nexport const QuotedMessagePreview = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n  quotedMessage,\n  renderText = defaultRenderText,\n}: QuotedMessagePreviewProps<StreamChatGenerics>) => {\n  const { client } = useChatContext();\n  const { Attachment = DefaultAttachment, Avatar = DefaultAvatar } =\n    useComponentContext<StreamChatGenerics>('QuotedMessagePreview');\n  const { userLanguage } = useTranslationContext('QuotedMessagePreview');\n\n  const quotedMessageText =\n    quotedMessage.i18n?.[`${userLanguage}_text` as `${TranslationLanguages}_text`] ||\n    quotedMessage.text;\n\n  const renderedText = useMemo(\n    () => renderText(quotedMessageText, quotedMessage.mentioned_users),\n    [quotedMessage.mentioned_users, quotedMessageText, renderText],\n  );\n\n  const quotedMessageAttachment = useMemo(() => {\n    const [attachment] = quotedMessage.attachments ?? [];\n    return attachment ? [attachment] : [];\n  }, [quotedMessage.attachments]);\n\n  if (!quotedMessageText && !quotedMessageAttachment) return null;\n\n  const poll = quotedMessage.poll_id && client.polls.fromState(quotedMessage.poll_id);\n\n  return (\n    <div\n      className='str-chat__quoted-message-preview'\n      data-testid='quoted-message-preview'\n    >\n      {quotedMessage.user && (\n        <Avatar\n          className='str-chat__avatar--quoted-message-sender'\n          image={quotedMessage.user.image}\n          name={quotedMessage.user.name || quotedMessage.user.id}\n          user={quotedMessage.user}\n        />\n      )}\n      <div className='str-chat__quoted-message-bubble'>\n        {poll ? (\n          <Poll isQuoted poll={poll} />\n        ) : (\n          <>\n            {!!quotedMessageAttachment.length && (\n              <Attachment attachments={quotedMessageAttachment} isQuoted />\n            )}\n            <div\n              className='str-chat__quoted-message-text'\n              data-testid='quoted-message-text'\n            >\n              {renderedText}\n            </div>\n          </>\n        )}\n      </div>\n    </div>\n  );\n};\n", "import React, { useCallback, useMemo } from 'react';\n\nimport { useActionHandler, useDeleteHandler, useUserRole } from './hooks';\nimport { MessageDeleted as DefaultMessageDeleted } from './MessageDeleted';\nimport { MessageTimestamp } from './MessageTimestamp';\nimport { getMessageActions } from './utils';\n\nimport { Avatar } from '../Avatar';\nimport { Gallery } from '../Gallery';\nimport { MessageActions } from '../MessageActions';\nimport { MML } from '../MML';\n\nimport { useChatContext } from '../../context/ChatContext';\nimport { useComponentContext } from '../../context/ComponentContext';\nimport { useMessageContext } from '../../context/MessageContext';\nimport { useTranslationContext } from '../../context/TranslationContext';\nimport { renderText } from './renderText';\n\nimport type { TranslationLanguages } from 'stream-chat';\n\nimport type { StreamMessage } from '../../context/ChannelStateContext';\n\nimport type { DefaultStreamChatGenerics } from '../../types/types';\n\nconst selectColor = (number: number, dark: boolean) => {\n  const hue = number * 137.508; // use golden angle approximation\n  return `hsl(${hue},${dark ? '50%' : '85%'}, ${dark ? '75%' : '55%'})`;\n};\n\nconst hashUserId = (userId: string) => {\n  const hash = userId.split('').reduce((acc, c) => {\n    acc = (acc << 5) - acc + c.charCodeAt(0);\n    return acc & acc;\n  }, 0);\n  return Math.abs(hash) / 10 ** Math.ceil(Math.log10(Math.abs(hash) + 1));\n};\n\nconst getUserColor = (theme: string, userId: string) =>\n  selectColor(hashUserId(userId), theme.includes('dark'));\n\nexport type FixedHeightMessageProps<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n  groupedByUser?: boolean;\n  message?: StreamMessage<StreamChatGenerics>;\n};\n\nconst UnMemoizedFixedHeightMessage = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  props: FixedHeightMessageProps<StreamChatGenerics>,\n) => {\n  const { groupedByUser: propGroupedByUser, message: propMessage } = props;\n\n  const { theme } = useChatContext<StreamChatGenerics>('FixedHeightMessage');\n\n  const { groupedByUser: contextGroupedByUser, message: contextMessage } =\n    useMessageContext<StreamChatGenerics>('FixedHeightMessage');\n\n  const { MessageDeleted = DefaultMessageDeleted } =\n    useComponentContext<StreamChatGenerics>('FixedHeightMessage');\n\n  const { userLanguage } = useTranslationContext('FixedHeightMessage');\n\n  const groupedByUser =\n    propGroupedByUser !== undefined ? propGroupedByUser : contextGroupedByUser;\n  const message = propMessage || contextMessage;\n\n  const handleAction = useActionHandler(message);\n  const handleDelete = useDeleteHandler(message);\n  const role = useUserRole(message);\n\n  const messageTextToRender =\n    message?.i18n?.[`${userLanguage}_text` as `${TranslationLanguages}_text`] ||\n    message?.text;\n\n  const renderedText = useMemo(\n    () => renderText(messageTextToRender, message.mentioned_users),\n    [message.mentioned_users, messageTextToRender],\n  );\n\n  const userId = message.user?.id || '';\n  const userColor = useMemo(() => getUserColor(theme, userId), [userId, theme]);\n\n  const messageActionsHandler = useCallback(\n    () => getMessageActions(['delete'], { canDelete: role.canDelete }),\n    [role],\n  );\n\n  const images = message?.attachments?.filter(({ type }) => type === 'image');\n\n  return (\n    <div\n      className={`str-chat__virtual-message__wrapper ${\n        role.isMyMessage ? 'str-chat__virtual-message__wrapper--me' : ''\n      } ${groupedByUser ? 'str-chat__virtual-message__wrapper--group' : ''}`}\n      key={message.id}\n    >\n      {message.user && (\n        <Avatar\n          image={message.user.image}\n          name={message.user.name || message.user.id}\n          user={message.user}\n        />\n      )}\n      <div className='str-chat__virtual-message__content'>\n        <div className='str-chat__virtual-message__meta'>\n          <div className='str-chat__virtual-message__author' style={{ color: userColor }}>\n            <strong>{message.user?.name || 'unknown'}</strong>\n          </div>\n        </div>\n        {message.deleted_at || message.type === 'deleted' ? (\n          <MessageDeleted message={message} />\n        ) : (\n          <>\n            {images && <Gallery images={images} />}\n            <div className='str-chat__virtual-message__text' data-testid='msg-text'>\n              {renderedText}\n              {message.mml && (\n                <MML actionHandler={handleAction} align='left' source={message.mml} />\n              )}\n              <div className='str-chat__virtual-message__data'>\n                <MessageActions\n                  customWrapperClass='str-chat__virtual-message__actions'\n                  getMessageActions={messageActionsHandler}\n                  handleDelete={handleDelete}\n                  message={message}\n                  mine={() => role.isMyMessage}\n                />\n                <span className='str-chat__virtual-message__date'>\n                  <MessageTimestamp\n                    customClass='str-chat__message-simple-timestamp'\n                    message={message}\n                  />\n                </span>\n              </div>\n            </div>\n          </>\n        )}\n      </div>\n    </div>\n  );\n};\n\n/**\n * @deprecated - This UI component will be removed in the next major release.\n *\n * FixedHeightMessage - This component renders a single message.\n * It uses fixed height elements to make sure it works well in VirtualizedMessageList\n */\nexport const FixedHeightMessage = React.memo(\n  UnMemoizedFixedHeightMessage,\n) as typeof UnMemoizedFixedHeightMessage;\n", "import React, { Suspense } from 'react';\n\nimport { useChatContext } from '../../context/ChatContext';\n\nimport type { ActionHandlerReturnType } from '../Message/hooks/useActionHandler';\n\nconst MMLReact = React.lazy(async () => {\n  // eslint-disable-next-line import/no-extraneous-dependencies\n  const mml = await import('mml-react');\n  return { default: mml.MML };\n});\n\nexport type MMLProps = {\n  /** MML source string */\n  source: string;\n  /** Submit handler for mml actions */\n  actionHandler?: ActionHandlerReturnType;\n  /** Align MML components to left/right, defaults to right */\n  align?: 'left' | 'right';\n};\n\n/**\n * A wrapper component around MML-React library\n */\nexport const MML = (props: MMLProps) => {\n  const { actionHandler, align = 'right', source } = props;\n\n  const { theme } = useChatContext('MML');\n\n  return (\n    <Suspense fallback={null}>\n      <MMLReact\n        className={`mml-align-${align}`}\n        Loading={null}\n        onSubmit={actionHandler}\n        source={source}\n        Success={null}\n        theme={(theme || '').replace(' ', '-')}\n      />\n    </Suspense>\n  );\n};\n", "import React from 'react';\n\nimport { MessageText, MessageTextProps } from './MessageText';\nimport type { DefaultStreamChatGenerics } from '../../types/types';\nimport { useMessageContext } from '../../context';\nimport { useMessageTextStreaming } from './hooks';\n\nexport type StreamedMessageTextProps<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Pick<MessageTextProps<StreamChatGenerics>, 'message' | 'renderText'> & {\n  renderingLetterCount?: number;\n  streamingLetterIntervalMs?: number;\n};\n\nexport const StreamedMessageText = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  props: StreamedMessageTextProps<StreamChatGenerics>,\n) => {\n  const {\n    message: messageFromProps,\n    renderingLetterCount,\n    renderText,\n    streamingLetterIntervalMs,\n  } = props;\n  const { message: messageFromContext } =\n    useMessageContext<StreamChatGenerics>('StreamedMessageText');\n  const message = messageFromProps || messageFromContext;\n  const { text = '' } = message;\n  const { streamedMessageText } = useMessageTextStreaming({\n    renderingLetterCount,\n    streamingLetterIntervalMs,\n    text,\n  });\n\n  return (\n    <MessageText\n      message={{ ...message, text: streamedMessageText }}\n      renderText={renderText}\n    />\n  );\n};\n", "import clsx from 'clsx';\nimport React, { useState } from 'react';\nimport { useChannelStateContext, useMessageInputContext } from '../../context';\nimport type { LinkPreview } from './types';\nimport { LinkPreviewState } from './types';\nimport { CloseIcon, LinkIcon } from './icons';\nimport { PopperTooltip } from '../Tooltip';\nimport { useEnterLeaveHandlers } from '../Tooltip/hooks';\n\nexport type LinkPreviewListProps = {\n  linkPreviews: LinkPreview[];\n};\n\nexport const LinkPreviewList = ({ linkPreviews }: LinkPreviewListProps) => {\n  const { quotedMessage } = useChannelStateContext();\n  const showLinkPreviews = linkPreviews.length > 0 && !quotedMessage;\n\n  if (!showLinkPreviews) return null;\n\n  return (\n    <div className='str-chat__link-preview-list'>\n      {Array.from(linkPreviews.values()).map((linkPreview) =>\n        linkPreview.state === LinkPreviewState.LOADED ? (\n          <LinkPreviewCard key={linkPreview.og_scrape_url} linkPreview={linkPreview} />\n        ) : null,\n      )}\n    </div>\n  );\n};\n\ntype LinkPreviewProps = {\n  linkPreview: LinkPreview;\n};\n\nconst LinkPreviewCard = ({ linkPreview }: LinkPreviewProps) => {\n  const { dismissLinkPreview } = useMessageInputContext();\n  const { handleEnter, handleLeave, tooltipVisible } =\n    useEnterLeaveHandlers<HTMLDivElement>();\n  const [referenceElement, setReferenceElement] = useState<HTMLDivElement | null>(null);\n  return (\n    <div\n      className={clsx('str-chat__link-preview-card', {\n        'str-chat__link-preview-card--loading':\n          linkPreview.state === LinkPreviewState.LOADING,\n      })}\n      data-testid='link-preview-card'\n    >\n      <PopperTooltip\n        offset={[0, 5]}\n        referenceElement={referenceElement}\n        visible={tooltipVisible}\n      >\n        {linkPreview.og_scrape_url}\n      </PopperTooltip>\n      <div\n        className='str-chat__link-preview-card__icon-container'\n        onMouseEnter={handleEnter}\n        onMouseLeave={handleLeave}\n        ref={setReferenceElement}\n      >\n        <LinkIcon />\n      </div>\n      <div className='str-chat__link-preview-card__content'>\n        <div className='str-chat__link-preview-card__content-title'>\n          {linkPreview.title}\n        </div>\n        <div className='str-chat__link-preview-card__content-description'>\n          {linkPreview.text}\n        </div>\n      </div>\n      <button\n        className='str-chat__link-preview-card__dismiss-button'\n        data-testid='link-preview-card-dismiss-btn'\n        onClick={() => dismissLinkPreview(linkPreview)}\n      >\n        <CloseIcon />\n      </button>\n    </div>\n  );\n};\n", "import React, { useCallback } from 'react';\n\nimport { AutoCompleteTextarea } from '../AutoCompleteTextarea';\nimport { LoadingIndicator } from '../Loading/LoadingIndicator';\n\nimport { useMessageInputContext } from '../../context/MessageInputContext';\nimport { useTranslationContext } from '../../context/TranslationContext';\nimport { useComponentContext } from '../../context/ComponentContext';\n\nimport type { CommandResponse, UserResponse } from 'stream-chat';\n\nimport type { TriggerSettings } from '../MessageInput/DefaultTriggerProvider';\nimport type {\n  CustomTrigger,\n  DefaultStreamChatGenerics,\n  UnknownType,\n} from '../../types/types';\nimport { EmojiSearchIndex, EmojiSearchIndexResult } from '../MessageInput';\n\ntype ObjectUnion<T> = T[keyof T];\n\nexport type SuggestionCommand<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = CommandResponse<StreamChatGenerics>;\n\nexport type SuggestionUser<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = UserResponse<StreamChatGenerics>;\n\nexport type SuggestionEmoji<T extends UnknownType = UnknownType> =\n  EmojiSearchIndexResult & T;\n\nexport type SuggestionItem<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n  T extends UnknownType = UnknownType,\n> =\n  | SuggestionUser<StreamChatGenerics>\n  | SuggestionCommand<StreamChatGenerics>\n  | SuggestionEmoji<T>;\n\n// FIXME: entity type is wrong, fix\nexport type SuggestionItemProps<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n  T extends UnknownType = UnknownType,\n> = {\n  className: string;\n  component: React.ComponentType<{\n    entity: SuggestionItem<StreamChatGenerics, T>;\n    selected: boolean;\n  }>;\n  item: SuggestionItem<StreamChatGenerics, T>;\n  key: React.Key;\n  onClickHandler: (\n    event: React.BaseSyntheticEvent,\n    item: SuggestionItem<StreamChatGenerics, T>,\n  ) => void;\n  onSelectHandler: (item: SuggestionItem<StreamChatGenerics, T>) => void;\n  selected: boolean;\n  style: React.CSSProperties;\n  value: string;\n};\n\nexport interface SuggestionHeaderProps {\n  currentTrigger: string;\n  value: string;\n}\n\nexport type SuggestionListProps<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n  V extends CustomTrigger = CustomTrigger,\n> = ObjectUnion<{\n  [key in keyof TriggerSettings<StreamChatGenerics, V>]: {\n    component: TriggerSettings<StreamChatGenerics, V>[key]['component'];\n    currentTrigger: string;\n    dropdownScroll: (element: HTMLDivElement) => void;\n    getSelectedItem:\n      | ((\n          item: Parameters<TriggerSettings<StreamChatGenerics, V>[key]['output']>[0],\n        ) => void)\n      | null;\n    getTextToReplace: (\n      item: Parameters<TriggerSettings<StreamChatGenerics, V>[key]['output']>[0],\n    ) => {\n      caretPosition: 'start' | 'end' | 'next' | number;\n      text: string;\n      key?: string;\n    };\n    Header: React.ComponentType<SuggestionHeaderProps>;\n    onSelect: (newToken: {\n      caretPosition: 'start' | 'end' | 'next' | number;\n      text: string;\n    }) => void;\n    selectionEnd: number;\n    SuggestionItem: React.ComponentType<SuggestionItemProps>;\n    values: Parameters<\n      Parameters<TriggerSettings<StreamChatGenerics, V>[key]['dataProvider']>[2]\n    >[0];\n    className?: string;\n    itemClassName?: string;\n    itemStyle?: React.CSSProperties;\n    style?: React.CSSProperties;\n    value?: string;\n  };\n}>;\n\nexport type ChatAutoCompleteProps<T extends UnknownType = UnknownType> = {\n  /** Override the default disabled state of the underlying `textarea` component. */\n  disabled?: boolean;\n  /** Function to override the default submit handler on the underlying `textarea` component */\n  handleSubmit?: (event: React.BaseSyntheticEvent) => void;\n  /** Function to run on blur of the underlying `textarea` component */\n  onBlur?: React.FocusEventHandler<HTMLTextAreaElement>;\n  /** Function to override the default onChange behavior on the underlying `textarea` component */\n  onChange?: React.ChangeEventHandler<HTMLTextAreaElement>;\n  /** Function to run on focus of the underlying `textarea` component */\n  onFocus?: React.FocusEventHandler<HTMLTextAreaElement>;\n  /** Function to override the default onPaste behavior on the underlying `textarea` component */\n  onPaste?: (event: React.ClipboardEvent<HTMLTextAreaElement>) => void;\n  /** Placeholder for the underlying `textarea` component */\n  placeholder?: string;\n  /** The initial number of rows for the underlying `textarea` component */\n  rows?: number;\n  /** The text value of the underlying `textarea` component */\n  value?: string;\n  /** Function to override the default emojiReplace behavior on the `wordReplace` prop of the `textarea` component */\n  wordReplace?: (word: string, emojiIndex?: EmojiSearchIndex<T>) => string;\n};\n\nconst UnMemoizedChatAutoComplete = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n  V extends CustomTrigger = CustomTrigger,\n>(\n  props: ChatAutoCompleteProps,\n) => {\n  const {\n    AutocompleteSuggestionItem: SuggestionItem,\n    AutocompleteSuggestionList: SuggestionList,\n  } = useComponentContext<StreamChatGenerics, V>('ChatAutoComplete');\n  const { t } = useTranslationContext('ChatAutoComplete');\n\n  const messageInput = useMessageInputContext<StreamChatGenerics, V>('ChatAutoComplete');\n  const {\n    cooldownRemaining,\n    disabled,\n    emojiSearchIndex,\n    textareaRef: innerRef,\n  } = messageInput;\n\n  const placeholder = props.placeholder || t('Type your message');\n\n  const emojiReplace = props.wordReplace\n    ? (word: string) => props.wordReplace?.(word, emojiSearchIndex)\n    : async (word: string) => {\n        const found = (await emojiSearchIndex?.search(word)) || [];\n\n        const emoji = found\n          .filter(Boolean)\n          .slice(0, 10)\n          .find(({ emoticons }) => !!emoticons?.includes(word));\n\n        if (!emoji) return null;\n\n        const [firstSkin] = emoji.skins ?? [];\n\n        return emoji.native ?? firstSkin.native;\n      };\n\n  const updateInnerRef = useCallback(\n    (ref: HTMLTextAreaElement | null) => {\n      if (innerRef) {\n        innerRef.current = ref;\n      }\n    },\n    [innerRef],\n  );\n\n  return (\n    <AutoCompleteTextarea\n      additionalTextareaProps={messageInput.additionalTextareaProps}\n      aria-label={cooldownRemaining ? t('Slow Mode ON') : placeholder}\n      className='str-chat__textarea__textarea str-chat__message-textarea'\n      closeCommandsList={messageInput.closeCommandsList}\n      closeMentionsList={messageInput.closeMentionsList}\n      containerClassName='str-chat__textarea str-chat__message-textarea-react-host'\n      disabled={(props.disabled ?? disabled) || !!cooldownRemaining}\n      disableMentions={messageInput.disableMentions}\n      grow={messageInput.grow}\n      handleSubmit={props.handleSubmit || messageInput.handleSubmit}\n      innerRef={updateInnerRef}\n      loadingComponent={LoadingIndicator}\n      maxRows={messageInput.maxRows}\n      minChar={0}\n      minRows={messageInput.minRows}\n      onBlur={props.onBlur}\n      onChange={props.onChange || messageInput.handleChange}\n      onFocus={props.onFocus}\n      onPaste={props.onPaste || messageInput.onPaste}\n      placeholder={cooldownRemaining ? t('Slow Mode ON') : placeholder}\n      replaceWord={emojiReplace}\n      rows={props.rows || 1}\n      shouldSubmit={messageInput.shouldSubmit}\n      showCommandsList={messageInput.showCommandsList}\n      showMentionsList={messageInput.showMentionsList}\n      SuggestionItem={SuggestionItem}\n      SuggestionList={SuggestionList}\n      trigger={messageInput.autocompleteTriggers || {}}\n      value={props.value || messageInput.text}\n    />\n  );\n};\n\nexport const ChatAutoComplete = React.memo(\n  UnMemoizedChatAutoComplete,\n) as typeof UnMemoizedChatAutoComplete;\n", "import React from 'react';\n\nimport { Channel } from 'stream-chat';\n\nimport { AIStates, useAIState } from './hooks/useAIState';\n\nimport { useChannelStateContext, useTranslationContext } from '../../context';\nimport type { DefaultStreamChatGenerics } from '../../types/types';\n\nexport type AIStateIndicatorProps<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n  channel?: Channel<StreamChatGenerics>;\n};\n\nexport const AIStateIndicator = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n  channel: channelFromProps,\n}: AIStateIndicatorProps<StreamChatGenerics>) => {\n  const { t } = useTranslationContext();\n  const { channel: channelFromContext } =\n    useChannelStateContext<StreamChatGenerics>('AIStateIndicator');\n  const channel = channelFromProps || channelFromContext;\n  const { aiState } = useAIState(channel);\n  const allowedStates = {\n    [AIStates.Thinking]: t('Thinking...'),\n    [AIStates.Generating]: t('Generating...'),\n  };\n\n  return aiState in allowedStates ? (\n    <div className='str-chat__ai-state-indicator-container'>\n      <p className='str-chat__ai-state-indicator-text'>{allowedStates[aiState]}</p>\n    </div>\n  ) : null;\n};\n", "import { useEffect, useState } from 'react';\n\nimport { AIState, Channel, Event } from 'stream-chat';\n\nimport type { DefaultStreamChatGenerics } from '../../../types/types';\n\nexport const AIStates = {\n  Error: 'AI_STATE_ERROR',\n  ExternalSources: 'AI_STATE_EXTERNAL_SOURCES',\n  Generating: 'AI_STATE_GENERATING',\n  Idle: 'AI_STATE_IDLE',\n  Thinking: 'AI_STATE_THINKING',\n};\n\n/**\n * A hook that returns the current state of the AI.\n * @param {Channel} channel - The channel for which we want to know the AI state.\n * @returns {{ aiState: AIState }} The current AI state for the given channel.\n */\nexport const useAIState = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  channel?: Channel<StreamChatGenerics>,\n): { aiState: AIState } => {\n  const [aiState, setAiState] = useState<AIState>(AIStates.Idle);\n\n  useEffect(() => {\n    if (!channel) {\n      return;\n    }\n\n    const indicatorChangedListener = channel.on(\n      'ai_indicator.update',\n      (event: Event<StreamChatGenerics>) => {\n        const { cid } = event;\n        const state = event.ai_state as AIState;\n        if (channel.cid === cid) {\n          setAiState(state);\n        }\n      },\n    );\n\n    const indicatorClearedListener = channel.on('ai_indicator.clear', (event) => {\n      const { cid } = event;\n      if (channel.cid === cid) {\n        setAiState(AIStates.Idle);\n      }\n    });\n\n    return () => {\n      indicatorChangedListener.unsubscribe();\n      indicatorClearedListener.unsubscribe();\n    };\n  }, [channel]);\n\n  return { aiState };\n};\n", "import React, { PropsWithChildren } from 'react';\n\nimport { DefaultTriggerProvider } from './DefaultTriggerProvider';\nimport { MessageInputFlat } from './MessageInputFlat';\nimport { useCooldownTimer } from './hooks/useCooldownTimer';\nimport { useCreateMessageInputContext } from './hooks/useCreateMessageInputContext';\nimport { useMessageInputState } from './hooks/useMessageInputState';\nimport { StreamMessage, useChannelStateContext } from '../../context/ChannelStateContext';\nimport {\n  ComponentContextValue,\n  useComponentContext,\n} from '../../context/ComponentContext';\nimport { MessageInputContextProvider } from '../../context/MessageInputContext';\nimport { DialogManagerProvider } from '../../context';\n\nimport type { Channel, Message, SendFileAPIResponse } from 'stream-chat';\n\nimport type { BaseLocalAttachmentMetadata, LocalAttachmentUploadMetadata } from './types';\nimport type { SearchQueryParams } from '../ChannelSearch/hooks/useChannelSearch';\nimport type { MessageToSend } from '../../context/ChannelActionContext';\nimport type {\n  CustomTrigger,\n  DefaultStreamChatGenerics,\n  SendMessageOptions,\n  UnknownType,\n} from '../../types/types';\nimport type { URLEnrichmentConfig } from './hooks/useLinkPreviews';\nimport type { CustomAudioRecordingConfig } from '../MediaRecorder';\n\nexport type EmojiSearchIndexResult = {\n  id: string;\n  name: string;\n  skins: Array<{ native: string }>;\n  emoticons?: Array<string>;\n  native?: string;\n};\n\nexport interface EmojiSearchIndex<T extends UnknownType = UnknownType> {\n  search: (\n    query: string,\n  ) =>\n    | PromiseLike<Array<EmojiSearchIndexResult & T>>\n    | Array<EmojiSearchIndexResult & T>\n    | null;\n}\n\nexport type MessageInputProps<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n  V extends CustomTrigger = CustomTrigger,\n> = {\n  /** Additional props to be passed to the underlying `AutoCompleteTextarea` component, [available props](https://www.npmjs.com/package/react-textarea-autosize) */\n  additionalTextareaProps?: React.TextareaHTMLAttributes<HTMLTextAreaElement>;\n  /**\n   * When enabled, recorded messages won\u2019t be sent immediately.\n   * Instead, they will \u201Cstack up\u201D with other attachments in the message composer allowing the user to send multiple attachments as part of the same message.\n   */\n  asyncMessagesMultiSendEnabled?: boolean;\n  /** Allows to configure the audio recording parameters for voice messages. */\n  audioRecordingConfig?: CustomAudioRecordingConfig;\n  /** Controls whether the users will be provided with the UI to record voice messages. */\n  audioRecordingEnabled?: boolean;\n  /** Function to clear the editing state while editing a message */\n  clearEditingState?: () => void;\n  /** If true, disables the text input */\n  disabled?: boolean;\n  /** If true, the suggestion list will not display and autocomplete @mentions. Default: false. */\n  disableMentions?: boolean;\n  /** Function to override the default file upload request */\n  doFileUploadRequest?: (\n    file: LocalAttachmentUploadMetadata['file'],\n    channel: Channel<StreamChatGenerics>,\n  ) => Promise<SendFileAPIResponse>;\n  /** Function to override the default image upload request */\n  doImageUploadRequest?: (\n    file: LocalAttachmentUploadMetadata['file'],\n    channel: Channel<StreamChatGenerics>,\n  ) => Promise<SendFileAPIResponse>;\n  /** Mechanism to be used with autocomplete and text replace features of the `MessageInput` component, see [emoji-mart `SearchIndex`](https://github.com/missive/emoji-mart#%EF%B8%8F%EF%B8%8F-headless-search) */\n  emojiSearchIndex?: ComponentContextValue['emojiSearchIndex'];\n  /** Custom error handler function to be called with a file/image upload fails */\n  errorHandler?: (\n    error: Error,\n    type: string,\n    file: LocalAttachmentUploadMetadata['file'] & BaseLocalAttachmentMetadata,\n  ) => void;\n  /** If true, focuses the text input on component mount */\n  focus?: boolean;\n  /** Generates the default value for the underlying textarea element. The function's return value takes precedence before additionalTextareaProps.defaultValue. */\n  getDefaultValue?: () => string | string[];\n  /** If true, expands the text input vertically for new lines */\n  grow?: boolean;\n  /** Allows to hide MessageInput's send button. */\n  hideSendButton?: boolean;\n  /** Custom UI component handling how the message input is rendered, defaults to and accepts the same props as [MessageInputFlat](https://github.com/GetStream/stream-chat-react/blob/master/src/components/MessageInput/MessageInputFlat.tsx) */\n  Input?: React.ComponentType<MessageInputProps<StreamChatGenerics, V>>;\n  /** Signals that the MessageInput is rendered in a message thread (Thread component) */\n  isThreadInput?: boolean;\n  /** Max number of rows the underlying `textarea` component is allowed to grow */\n  maxRows?: number;\n  /** If true, the suggestion list will search all app users for an @mention, not just current channel members/watchers. Default: false. */\n  mentionAllAppUsers?: boolean;\n  /** Object containing filters/sort/options overrides for an @mention user query */\n  mentionQueryParams?: SearchQueryParams<StreamChatGenerics>['userFilters'];\n  /** If provided, the existing message will be edited on submit */\n  message?: StreamMessage<StreamChatGenerics>;\n  /** Min number of rows the underlying `textarea` will start with. The `grow` on MessageInput prop has to be enabled for `minRows` to take effect. */\n  minRows?: number;\n  /** If true, disables file uploads for all attachments except for those with type 'image'. Default: false */\n  noFiles?: boolean;\n  /** Function to override the default submit handler */\n  overrideSubmitHandler?: (\n    message: MessageToSend<StreamChatGenerics>,\n    channelCid: string,\n    customMessageData?: Partial<Message<StreamChatGenerics>>,\n    options?: SendMessageOptions,\n  ) => Promise<void> | void;\n  /** When replying in a thread, the parent message object */\n  parent?: StreamMessage<StreamChatGenerics>;\n  /** If true, triggers typing events on text input keystroke */\n  publishTypingEvent?: boolean;\n  /** If true, will use an optional dependency to support transliteration in the input for mentions, default is false. See: https://github.com/getstream/transliterate */\n  /**\n   * Currently, `Enter` is the default submission key and  `Shift`+`Enter` is the default combination for the new line.\n   * If specified, this function overrides the default behavior specified previously.\n   *\n   * Example of default behaviour:\n   * ```tsx\n   * const defaultShouldSubmit = (event) => event.key === \"Enter\" && !event.shiftKey;\n   * ```\n   */\n  shouldSubmit?: (event: KeyboardEvent) => boolean;\n  /** Configuration parameters for link previews. */\n  urlEnrichmentConfig?: URLEnrichmentConfig;\n  useMentionsTransliteration?: boolean;\n};\n\nconst MessageInputProvider = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n  V extends CustomTrigger = CustomTrigger,\n>(\n  props: PropsWithChildren<MessageInputProps<StreamChatGenerics, V>>,\n) => {\n  const cooldownTimerState = useCooldownTimer<StreamChatGenerics>();\n  const messageInputState = useMessageInputState<StreamChatGenerics, V>(props);\n  const { emojiSearchIndex } = useComponentContext('MessageInput');\n\n  const messageInputContextValue = useCreateMessageInputContext<StreamChatGenerics, V>({\n    ...cooldownTimerState,\n    ...messageInputState,\n    ...props,\n    emojiSearchIndex: props.emojiSearchIndex ?? emojiSearchIndex,\n  });\n\n  return (\n    <MessageInputContextProvider<StreamChatGenerics, V> value={messageInputContextValue}>\n      {props.children}\n    </MessageInputContextProvider>\n  );\n};\n\nconst UnMemoizedMessageInput = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n  V extends CustomTrigger = CustomTrigger,\n>(\n  props: MessageInputProps<StreamChatGenerics, V>,\n) => {\n  const { Input: PropInput } = props;\n\n  const { dragAndDropWindow } = useChannelStateContext<StreamChatGenerics>();\n  const { Input: ContextInput, TriggerProvider = DefaultTriggerProvider } =\n    useComponentContext<StreamChatGenerics, V>('MessageInput');\n\n  const Input = PropInput || ContextInput || MessageInputFlat;\n  const dialogManagerId = props.isThreadInput\n    ? 'message-input-dialog-manager-thread'\n    : 'message-input-dialog-manager';\n\n  if (dragAndDropWindow)\n    return (\n      <DialogManagerProvider id={dialogManagerId}>\n        <TriggerProvider>\n          <Input />\n        </TriggerProvider>\n      </DialogManagerProvider>\n    );\n\n  return (\n    <DialogManagerProvider id={dialogManagerId}>\n      <MessageInputProvider {...props}>\n        <TriggerProvider>\n          <Input />\n        </TriggerProvider>\n      </MessageInputProvider>\n    </DialogManagerProvider>\n  );\n};\n\n/**\n * A high level component that has provides all functionality to the Input it renders.\n */\nexport const MessageInput = React.memo(\n  UnMemoizedMessageInput,\n) as typeof UnMemoizedMessageInput;\n", "import React, { useState } from 'react';\nimport clsx from 'clsx';\n\nimport {\n  ReactionsListModal as DefaultReactionsListModal,\n  ReactionsListModalProps,\n} from './ReactionsListModal';\nimport { useProcessReactions } from './hooks/useProcessReactions';\nimport {\n  MessageContextValue,\n  useComponentContext,\n  useTranslationContext,\n} from '../../context';\n\nimport { MAX_MESSAGE_REACTIONS_TO_FETCH } from '../Message/hooks';\n\nimport type { ReactionGroupResponse, ReactionResponse, ReactionSort } from 'stream-chat';\nimport type { DefaultStreamChatGenerics } from '../../types/types';\nimport type { ReactionOptions } from './reactionOptions';\nimport type {\n  ReactionDetailsComparator,\n  ReactionsComparator,\n  ReactionType,\n} from './types';\n\nexport type ReactionsListProps<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Partial<\n  Pick<\n    MessageContextValue<StreamChatGenerics>,\n    'handleFetchReactions' | 'reactionDetailsSort'\n  >\n> & {\n  /** An array of the own reaction objects to distinguish own reactions visually */\n  own_reactions?: ReactionResponse<StreamChatGenerics>[];\n  /**\n   * An object that keeps track of the count of each type of reaction on a message\n   * @deprecated This override value is no longer taken into account. Use `reaction_groups` to override reaction counts instead.\n   * */\n  reaction_counts?: Record<string, number>;\n  /** An object containing summary for each reaction type on a message */\n  reaction_groups?: Record<string, ReactionGroupResponse>;\n  /**\n   * @deprecated\n   * A list of the currently supported reactions on a message\n   * */\n  reactionOptions?: ReactionOptions;\n  /** An array of the reaction objects to display in the list */\n  reactions?: ReactionResponse<StreamChatGenerics>[];\n  /** Display the reactions in the list in reverse order, defaults to false */\n  reverse?: boolean;\n  /** Comparator function to sort the list of reacted users\n   * @deprecated use `reactionDetailsSort` instead\n   */\n  sortReactionDetails?: ReactionDetailsComparator<StreamChatGenerics>;\n  /** Comparator function to sort reactions, defaults to chronological order */\n  sortReactions?: ReactionsComparator;\n};\n\nconst UnMemoizedReactionsList = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  props: ReactionsListProps<StreamChatGenerics>,\n) => {\n  const {\n    handleFetchReactions,\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    reactionDetailsSort,\n    reverse = false,\n    sortReactionDetails,\n    ...rest\n  } = props;\n  const { existingReactions, hasReactions, totalReactionCount } =\n    useProcessReactions(rest);\n  const [selectedReactionType, setSelectedReactionType] =\n    useState<ReactionType<StreamChatGenerics> | null>(null);\n  const { t } = useTranslationContext('ReactionsList');\n  const { ReactionsListModal = DefaultReactionsListModal } = useComponentContext();\n\n  const handleReactionButtonClick = (reactionType: string) => {\n    if (totalReactionCount > MAX_MESSAGE_REACTIONS_TO_FETCH) {\n      return;\n    }\n\n    setSelectedReactionType(reactionType as ReactionType<StreamChatGenerics>);\n  };\n\n  if (!hasReactions) return null;\n\n  return (\n    <>\n      <div\n        aria-label={t('aria/Reaction list')}\n        className={clsx('str-chat__reaction-list str-chat__message-reactions-container', {\n          // we are stuck with both classes as both are used in CSS\n          'str-chat__reaction-list--reverse': reverse,\n        })}\n        data-testid='reaction-list'\n        role='figure'\n      >\n        <ul className='str-chat__message-reactions'>\n          {existingReactions.map(\n            ({ EmojiComponent, isOwnReaction, reactionCount, reactionType }) =>\n              EmojiComponent && (\n                <li\n                  className={clsx('str-chat__message-reaction', {\n                    'str-chat__message-reaction-own': isOwnReaction,\n                  })}\n                  key={reactionType}\n                >\n                  <button\n                    aria-label={`Reactions: ${reactionType}`}\n                    data-testid={`reactions-list-button-${reactionType}`}\n                    onClick={() => handleReactionButtonClick(reactionType)}\n                    type='button'\n                  >\n                    <span className='str-chat__message-reaction-emoji'>\n                      <EmojiComponent />\n                    </span>\n                    &nbsp;\n                    <span\n                      className='str-chat__message-reaction-count'\n                      data-testclass='reaction-list-reaction-count'\n                    >\n                      {reactionCount}\n                    </span>\n                  </button>\n                </li>\n              ),\n          )}\n          <li>\n            <span className='str-chat__reaction-list--counter'>{totalReactionCount}</span>\n          </li>\n        </ul>\n      </div>\n      {selectedReactionType !== null && (\n        <ReactionsListModal\n          handleFetchReactions={\n            handleFetchReactions as (\n              reactionType?: string,\n              sort?: ReactionSort<StreamChatGenerics>,\n            ) => Promise<Array<ReactionResponse<StreamChatGenerics>>>\n          }\n          onClose={() => setSelectedReactionType(null)}\n          onSelectedReactionTypeChange={\n            setSelectedReactionType as ReactionsListModalProps['onSelectedReactionTypeChange']\n          }\n          open={selectedReactionType !== null}\n          reactions={existingReactions}\n          selectedReactionType={selectedReactionType}\n          sortReactionDetails={\n            sortReactionDetails as (\n              a: ReactionResponse<StreamChatGenerics>,\n              b: ReactionResponse<StreamChatGenerics>,\n            ) => number\n          }\n        />\n      )}\n    </>\n  );\n};\n\n/**\n * Component that displays a list of reactions on a message.\n */\nexport const ReactionsList = React.memo(\n  UnMemoizedReactionsList,\n) as typeof UnMemoizedReactionsList;\n", "import React, { useMemo } from 'react';\nimport clsx from 'clsx';\n\nimport type { ReactionDetailsComparator, ReactionSummary, ReactionType } from './types';\n\nimport { Modal, ModalProps } from '../Modal';\nimport { useFetchReactions } from './hooks/useFetchReactions';\nimport { LoadingIndicator } from '../Loading';\nimport { Avatar } from '../Avatar';\nimport { MessageContextValue, useMessageContext } from '../../context';\nimport { DefaultStreamChatGenerics } from '../../types/types';\nimport { ReactionSort } from 'stream-chat';\n\nexport type ReactionsListModalProps<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = ModalProps &\n  Partial<\n    Pick<\n      MessageContextValue<StreamChatGenerics>,\n      'handleFetchReactions' | 'reactionDetailsSort'\n    >\n  > & {\n    reactions: ReactionSummary[];\n    selectedReactionType: ReactionType<StreamChatGenerics>;\n    onSelectedReactionTypeChange?: (\n      reactionType: ReactionType<StreamChatGenerics>,\n    ) => void;\n    sort?: ReactionSort<StreamChatGenerics>;\n    /** @deprecated use `sort` instead */\n    sortReactionDetails?: ReactionDetailsComparator<StreamChatGenerics>;\n  };\n\nconst defaultReactionDetailsSort = { created_at: -1 } as const;\n\nexport function ReactionsListModal<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n  handleFetchReactions,\n  onSelectedReactionTypeChange,\n  reactionDetailsSort: propReactionDetailsSort,\n  reactions,\n  selectedReactionType,\n  sortReactionDetails: propSortReactionDetails,\n  ...modalProps\n}: ReactionsListModalProps<StreamChatGenerics>) {\n  const selectedReaction = reactions.find(\n    ({ reactionType }) => reactionType === selectedReactionType,\n  );\n  const SelectedEmojiComponent = selectedReaction?.EmojiComponent ?? null;\n  const {\n    reactionDetailsSort: contextReactionDetailsSort,\n    sortReactionDetails: contextSortReactionDetails,\n  } = useMessageContext<StreamChatGenerics>('ReactionsListModal');\n  const legacySortReactionDetails = propSortReactionDetails ?? contextSortReactionDetails;\n  const reactionDetailsSort =\n    propReactionDetailsSort ?? contextReactionDetailsSort ?? defaultReactionDetailsSort;\n  const { isLoading: areReactionsLoading, reactions: reactionDetails } =\n    useFetchReactions<StreamChatGenerics>({\n      handleFetchReactions,\n      reactionType: selectedReactionType,\n      shouldFetch: modalProps.open,\n      sort: reactionDetailsSort,\n    });\n\n  const reactionDetailsWithLegacyFallback = useMemo(\n    () =>\n      legacySortReactionDetails\n        ? [...reactionDetails].sort(legacySortReactionDetails)\n        : reactionDetails,\n    [legacySortReactionDetails, reactionDetails],\n  );\n\n  return (\n    <Modal\n      {...modalProps}\n      className={clsx('str-chat__message-reactions-details-modal', modalProps.className)}\n    >\n      <div\n        className='str-chat__message-reactions-details'\n        data-testid='reactions-list-modal'\n      >\n        <div className='str-chat__message-reactions-details-reaction-types'>\n          {reactions.map(\n            ({ EmojiComponent, reactionCount, reactionType }) =>\n              EmojiComponent && (\n                <div\n                  className={clsx('str-chat__message-reactions-details-reaction-type', {\n                    'str-chat__message-reactions-details-reaction-type--selected':\n                      selectedReactionType === reactionType,\n                  })}\n                  data-testid={`reaction-details-selector-${reactionType}`}\n                  key={reactionType}\n                  onClick={() =>\n                    onSelectedReactionTypeChange?.(\n                      reactionType as ReactionType<StreamChatGenerics>,\n                    )\n                  }\n                >\n                  <span className='str-chat__message-reaction-emoji str-chat__message-reaction-emoji--with-fallback'>\n                    <EmojiComponent />\n                  </span>\n                  &nbsp;\n                  <span className='str-chat__message-reaction-count'>\n                    {reactionCount}\n                  </span>\n                </div>\n              ),\n          )}\n        </div>\n        {SelectedEmojiComponent && (\n          <div className='str-chat__message-reaction-emoji str-chat__message-reaction-emoji--with-fallback str-chat__message-reaction-emoji-big'>\n            <SelectedEmojiComponent />\n          </div>\n        )}\n        <div\n          className='str-chat__message-reactions-details-reacting-users'\n          data-testid='all-reacting-users'\n        >\n          {areReactionsLoading ? (\n            <LoadingIndicator />\n          ) : (\n            reactionDetailsWithLegacyFallback.map(({ user }) => (\n              <div\n                className='str-chat__message-reactions-details-reacting-user'\n                key={user?.id}\n              >\n                <Avatar\n                  className='stream-chat__avatar--reaction'\n                  data-testid='avatar'\n                  image={user?.image as string | undefined}\n                  name={user?.name || user?.id}\n                />\n                <span\n                  className='str-chat__user-item--name'\n                  data-testid='reaction-user-username'\n                >\n                  {user?.name || user?.id}\n                </span>\n              </div>\n            ))\n          )}\n        </div>\n      </div>\n    </Modal>\n  );\n}\n", "import { useEffect, useState } from 'react';\nimport { ReactionResponse, ReactionSort } from 'stream-chat';\nimport { MessageContextValue, useMessageContext } from '../../../context';\nimport { DefaultStreamChatGenerics } from '../../../types/types';\nimport { ReactionType } from '../types';\n\nexport interface FetchReactionsOptions<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> {\n  reactionType: ReactionType<StreamChatGenerics>;\n  shouldFetch: boolean;\n  handleFetchReactions?: MessageContextValue<StreamChatGenerics>['handleFetchReactions'];\n  sort?: ReactionSort<StreamChatGenerics>;\n}\n\nexport function useFetchReactions<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(options: FetchReactionsOptions<StreamChatGenerics>) {\n  const { handleFetchReactions: contextHandleFetchReactions } =\n    useMessageContext<StreamChatGenerics>('useFetchReactions');\n  const [reactions, setReactions] = useState<ReactionResponse<StreamChatGenerics>[]>([]);\n  const {\n    handleFetchReactions: propHandleFetchReactions,\n    reactionType,\n    shouldFetch,\n    sort,\n  } = options;\n  const [isLoading, setIsLoading] = useState(shouldFetch);\n  const handleFetchReactions = propHandleFetchReactions ?? contextHandleFetchReactions;\n\n  useEffect(() => {\n    if (!shouldFetch) {\n      return;\n    }\n\n    let cancel = false;\n\n    (async () => {\n      try {\n        setIsLoading(true);\n        const reactions = await handleFetchReactions(reactionType, sort);\n\n        if (!cancel) {\n          setReactions(reactions);\n        }\n      } catch (e) {\n        if (!cancel) {\n          setReactions([]);\n        }\n      } finally {\n        if (!cancel) {\n          setIsLoading(false);\n        }\n      }\n    })();\n\n    return () => {\n      cancel = true;\n    };\n  }, [handleFetchReactions, reactionType, shouldFetch, sort]);\n\n  return { isLoading, reactions };\n}\n", "import { useCallback, useMemo } from 'react';\n\nimport { useComponentContext, useMessageContext } from '../../../context';\nimport { defaultReactionOptions } from '../reactionOptions';\n\nimport type { ReactionsListProps } from '../ReactionsList';\nimport type { DefaultStreamChatGenerics } from '../../../types/types';\nimport type { ReactionsComparator, ReactionSummary } from '../types';\n\ntype SharedReactionListProps =\n  | 'own_reactions'\n  | 'reaction_counts'\n  | 'reaction_groups'\n  | 'reactionOptions'\n  | 'reactions';\n\ntype UseProcessReactionsParams = Pick<ReactionsListProps, SharedReactionListProps> & {\n  sortReactions?: ReactionsComparator;\n};\n\nexport const defaultReactionsSort: ReactionsComparator = (a, b) => {\n  if (a.firstReactionAt && b.firstReactionAt) {\n    return +a.firstReactionAt - +b.firstReactionAt;\n  }\n\n  return a.reactionType.localeCompare(b.reactionType, 'en');\n};\n\nexport const useProcessReactions = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  params: UseProcessReactionsParams,\n) => {\n  const {\n    own_reactions: propOwnReactions,\n    reaction_groups: propReactionGroups,\n    reactionOptions: propReactionOptions,\n    reactions: propReactions,\n    sortReactions: propSortReactions,\n  } = params;\n  const { message, sortReactions: contextSortReactions } =\n    useMessageContext<StreamChatGenerics>('useProcessReactions');\n  const { reactionOptions: contextReactionOptions = defaultReactionOptions } =\n    useComponentContext<StreamChatGenerics>('useProcessReactions');\n\n  const reactionOptions = propReactionOptions ?? contextReactionOptions;\n  const sortReactions = propSortReactions ?? contextSortReactions ?? defaultReactionsSort;\n  const latestReactions = propReactions || message.latest_reactions;\n  const ownReactions = propOwnReactions || message?.own_reactions;\n  const reactionGroups = propReactionGroups || message?.reaction_groups;\n\n  const isOwnReaction = useCallback(\n    (reactionType: string) =>\n      ownReactions?.some((reaction) => reaction.type === reactionType) ?? false,\n    [ownReactions],\n  );\n\n  const getEmojiByReactionType = useCallback(\n    (reactionType: string) =>\n      reactionOptions.find(({ type }) => type === reactionType)?.Component ?? null,\n    [reactionOptions],\n  );\n\n  const isSupportedReaction = useCallback(\n    (reactionType: string) =>\n      reactionOptions.some((reactionOption) => reactionOption.type === reactionType),\n    [reactionOptions],\n  );\n\n  const getLatestReactedUserNames = useCallback(\n    (reactionType?: string) =>\n      latestReactions?.flatMap((reaction) => {\n        if (reactionType && reactionType === reaction.type) {\n          const username = reaction.user?.name || reaction.user?.id;\n          return username ? [username] : [];\n        }\n        return [];\n      }) ?? [],\n    [latestReactions],\n  );\n\n  const existingReactions: ReactionSummary[] = useMemo(() => {\n    if (!reactionGroups) {\n      return [];\n    }\n\n    const unsortedReactions = Object.entries(reactionGroups).flatMap(\n      ([reactionType, { count, first_reaction_at, last_reaction_at }]) => {\n        if (count === 0 || !isSupportedReaction(reactionType)) {\n          return [];\n        }\n\n        const latestReactedUserNames = getLatestReactedUserNames(reactionType);\n\n        return [\n          {\n            EmojiComponent: getEmojiByReactionType(reactionType),\n            firstReactionAt: first_reaction_at ? new Date(first_reaction_at) : null,\n            isOwnReaction: isOwnReaction(reactionType),\n            lastReactionAt: last_reaction_at ? new Date(last_reaction_at) : null,\n            latestReactedUserNames,\n            reactionCount: count,\n            reactionType,\n            unlistedReactedUserCount: count - latestReactedUserNames.length,\n          },\n        ];\n      },\n    );\n\n    return unsortedReactions.sort(sortReactions);\n  }, [\n    getEmojiByReactionType,\n    getLatestReactedUserNames,\n    isOwnReaction,\n    isSupportedReaction,\n    reactionGroups,\n    sortReactions,\n  ]);\n\n  const hasReactions = existingReactions.length > 0;\n\n  const totalReactionCount = useMemo(\n    () =>\n      existingReactions.reduce((total, { reactionCount }) => total + reactionCount, 0),\n    [existingReactions],\n  );\n\n  return {\n    existingReactions,\n    hasReactions,\n    totalReactionCount,\n  };\n};\n", "import React, { PropsWithChildren, useState } from 'react';\nimport clsx from 'clsx';\n\nimport type { ReactionGroupResponse, ReactionResponse } from 'stream-chat';\nimport { MessageContextValue, useMessageContext } from '../../context/MessageContext';\nimport { useProcessReactions } from './hooks/useProcessReactions';\nimport { useEnterLeaveHandlers } from '../Tooltip/hooks';\nimport { PopperTooltip } from '../Tooltip';\n\nimport type { DefaultStreamChatGenerics } from '../../types/types';\nimport type { ReactionOptions } from './reactionOptions';\n\ntype WithTooltipProps = {\n  title: React.ReactNode;\n  onMouseEnter?: React.MouseEventHandler;\n  onMouseLeave?: React.MouseEventHandler;\n};\n\nconst WithTooltip = ({\n  children,\n  onMouseEnter,\n  onMouseLeave,\n  title,\n}: PropsWithChildren<WithTooltipProps>) => {\n  const [referenceElement, setReferenceElement] = useState<HTMLSpanElement | null>(null);\n  const { handleEnter, handleLeave, tooltipVisible } = useEnterLeaveHandlers({\n    onMouseEnter,\n    onMouseLeave,\n  });\n\n  return (\n    <>\n      <PopperTooltip referenceElement={referenceElement} visible={tooltipVisible}>\n        {title}\n      </PopperTooltip>\n      <span\n        onMouseEnter={handleEnter}\n        onMouseLeave={handleLeave}\n        ref={setReferenceElement}\n      >\n        {children}\n      </span>\n    </>\n  );\n};\n\nexport type SimpleReactionsListProps<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Partial<Pick<MessageContextValue, 'handleFetchReactions' | 'handleReaction'>> & {\n  /** An array of the own reaction objects to distinguish own reactions visually */\n  own_reactions?: ReactionResponse<StreamChatGenerics>[];\n  /**\n   * An object that keeps track of the count of each type of reaction on a message\n   * @deprecated This override value is no longer taken into account. Use `reaction_groups` to override reaction counts instead.\n   * */\n  reaction_counts?: Record<string, number>;\n  /** An object containing summary for each reaction type on a message */\n  reaction_groups?: Record<string, ReactionGroupResponse>;\n  /** A list of the currently supported reactions on a message */\n  reactionOptions?: ReactionOptions;\n  /** An array of the reaction objects to display in the list */\n  reactions?: ReactionResponse<StreamChatGenerics>[];\n};\n\nconst UnMemoizedSimpleReactionsList = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  props: SimpleReactionsListProps<StreamChatGenerics>,\n) => {\n  const { handleReaction: propHandleReaction, ...rest } = props;\n\n  const { handleReaction: contextHandleReaction } =\n    useMessageContext<StreamChatGenerics>('SimpleReactionsList');\n\n  const { existingReactions, hasReactions, totalReactionCount } =\n    useProcessReactions(rest);\n\n  const handleReaction = propHandleReaction || contextHandleReaction;\n\n  if (!hasReactions) return null;\n\n  return (\n    <div className='str-chat__message-reactions-container'>\n      <ul\n        className='str-chat__simple-reactions-list str-chat__message-reactions'\n        data-testid='simple-reaction-list'\n      >\n        {existingReactions.map(\n          ({ EmojiComponent, isOwnReaction, latestReactedUserNames, reactionType }) => {\n            const tooltipContent = latestReactedUserNames.join(', ');\n\n            return (\n              EmojiComponent && (\n                <li\n                  className={clsx('str-chat__simple-reactions-list-item', {\n                    'str-chat__message-reaction-own': isOwnReaction,\n                  })}\n                  key={reactionType}\n                  onClick={(event) => handleReaction(reactionType, event)}\n                  onKeyUp={(event) => handleReaction(reactionType, event)}\n                >\n                  <WithTooltip title={tooltipContent}>\n                    <EmojiComponent />\n                  </WithTooltip>\n                </li>\n              )\n            );\n          },\n        )}\n        {\n          <li className='str-chat__simple-reactions-list-item--last-number'>\n            {totalReactionCount}\n          </li>\n        }\n      </ul>\n    </div>\n  );\n};\n\nexport const SimpleReactionsList = React.memo(\n  UnMemoizedSimpleReactionsList,\n) as typeof UnMemoizedSimpleReactionsList;\n", "import React from 'react';\n\nimport clsx from 'clsx';\nimport {\n  useComponentContext,\n  useMessageContext,\n  useTranslationContext,\n} from '../../context';\nimport { Timestamp as DefaultTimestamp } from './Timestamp';\nimport { isMessageEdited } from './utils';\n\nimport type { DefaultStreamChatGenerics } from '../../types';\nimport type { MessageTimestampProps } from './MessageTimestamp';\n\nexport type MessageEditedTimestampProps<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = MessageTimestampProps<StreamChatGenerics> & {\n  open: boolean;\n};\n\nexport function MessageEditedTimestamp<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n  message: propMessage,\n  open,\n  ...timestampProps\n}: MessageEditedTimestampProps<StreamChatGenerics>) {\n  const { t } = useTranslationContext('MessageEditedTimestamp');\n  const { message: contextMessage } = useMessageContext<StreamChatGenerics>(\n    'MessageEditedTimestamp',\n  );\n  const { Timestamp = DefaultTimestamp } = useComponentContext('MessageEditedTimestamp');\n  const message = propMessage || contextMessage;\n\n  if (!isMessageEdited(message)) {\n    return null;\n  }\n\n  return (\n    <div\n      className={clsx(\n        'str-chat__message-edited-timestamp',\n        open\n          ? 'str-chat__message-edited-timestamp--open'\n          : 'str-chat__message-edited-timestamp--collapsed',\n      )}\n      data-testid='message-edited-timestamp'\n    >\n      {t<string>('Edited')}{' '}\n      <Timestamp timestamp={message.message_text_updated_at} {...timestampProps} />\n    </div>\n  );\n}\n", "import clsx from 'clsx';\nimport React from 'react';\n\nimport {\n  useEnrichedMessages,\n  useMessageListElements,\n  useScrollLocationLogic,\n  useUnreadMessagesNotification,\n} from './hooks/MessageList';\nimport { useMarkRead } from './hooks/useMarkRead';\n\nimport { MessageNotification as DefaultMessageNotification } from './MessageNotification';\nimport { MessageListNotifications as DefaultMessageListNotifications } from './MessageListNotifications';\nimport { UnreadMessagesNotification as DefaultUnreadMessagesNotification } from './UnreadMessagesNotification';\n\nimport {\n  ChannelActionContextValue,\n  useChannelActionContext,\n} from '../../context/ChannelActionContext';\nimport {\n  ChannelStateContextValue,\n  useChannelStateContext,\n} from '../../context/ChannelStateContext';\nimport { DialogManagerProvider } from '../../context';\nimport { useChatContext } from '../../context/ChatContext';\nimport { useComponentContext } from '../../context/ComponentContext';\nimport { MessageListContextProvider } from '../../context/MessageListContext';\nimport { EmptyStateIndicator as DefaultEmptyStateIndicator } from '../EmptyStateIndicator';\nimport {\n  InfiniteScroll,\n  InfiniteScrollProps,\n} from '../InfiniteScrollPaginator/InfiniteScroll';\nimport { LoadingIndicator as DefaultLoadingIndicator } from '../Loading';\nimport { defaultPinPermissions, MESSAGE_ACTIONS } from '../Message/utils';\nimport { TypingIndicator as DefaultTypingIndicator } from '../TypingIndicator';\nimport { MessageListMainPanel as DefaultMessageListMainPanel } from './MessageListMainPanel';\n\nimport { defaultRenderMessages, MessageRenderer } from './renderMessages';\n\nimport type { GroupStyle, ProcessMessagesParams } from './utils';\nimport type { MessageProps } from '../Message/types';\n\nimport type { StreamMessage } from '../../context/ChannelStateContext';\n\nimport type { DefaultStreamChatGenerics } from '../../types/types';\nimport {\n  DEFAULT_LOAD_PAGE_SCROLL_THRESHOLD,\n  DEFAULT_NEXT_CHANNEL_PAGE_SIZE,\n} from '../../constants/limits';\n\ntype MessageListWithContextProps<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Omit<ChannelStateContextValue<StreamChatGenerics>, 'members' | 'mutes' | 'watchers'> &\n  MessageListProps<StreamChatGenerics>;\n\nconst MessageListWithContext = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  props: MessageListWithContextProps<StreamChatGenerics>,\n) => {\n  const {\n    channel,\n    channelUnreadUiState,\n    disableDateSeparator = false,\n    groupStyles,\n    hasMoreNewer = false,\n    headerPosition,\n    hideDeletedMessages = false,\n    hideNewMessageSeparator = false,\n    highlightedMessageId,\n    internalInfiniteScrollProps: {\n      threshold: loadMoreScrollThreshold = DEFAULT_LOAD_PAGE_SCROLL_THRESHOLD,\n      ...restInternalInfiniteScrollProps\n    } = {},\n    jumpToLatestMessage = () => Promise.resolve(),\n    loadMore: loadMoreCallback,\n    loadMoreNewer: loadMoreNewerCallback, // @deprecated in favor of `channelCapabilities` - TODO: remove in next major release\n    maxTimeBetweenGroupedMessages,\n    messageActions = Object.keys(MESSAGE_ACTIONS),\n    messageLimit = DEFAULT_NEXT_CHANNEL_PAGE_SIZE,\n    messages = [],\n    noGroupByUser = false,\n    notifications,\n    pinPermissions = defaultPinPermissions,\n    reactionDetailsSort,\n    read,\n    renderMessages = defaultRenderMessages,\n    returnAllReadData = false,\n    reviewProcessedMessage,\n    showUnreadNotificationAlways,\n    sortReactionDetails,\n    sortReactions,\n    suppressAutoscroll,\n    threadList = false,\n    unsafeHTML = false,\n  } = props;\n\n  const [listElement, setListElement] = React.useState<HTMLDivElement | null>(null);\n  const [ulElement, setUlElement] = React.useState<HTMLUListElement | null>(null);\n\n  const { customClasses } = useChatContext<StreamChatGenerics>('MessageList');\n\n  const {\n    EmptyStateIndicator = DefaultEmptyStateIndicator,\n    LoadingIndicator = DefaultLoadingIndicator,\n    MessageListMainPanel = DefaultMessageListMainPanel,\n    MessageListNotifications = DefaultMessageListNotifications,\n    MessageNotification = DefaultMessageNotification,\n    TypingIndicator = DefaultTypingIndicator,\n    UnreadMessagesNotification = DefaultUnreadMessagesNotification,\n  } = useComponentContext<StreamChatGenerics>('MessageList');\n\n  const {\n    hasNewMessages,\n    isMessageListScrolledToBottom,\n    onScroll,\n    scrollToBottom,\n    wrapperRect,\n  } = useScrollLocationLogic({\n    hasMoreNewer,\n    listElement,\n    loadMoreScrollThreshold,\n    messages,\n    scrolledUpThreshold: props.scrolledUpThreshold,\n    suppressAutoscroll,\n  });\n\n  const { show: showUnreadMessagesNotification } = useUnreadMessagesNotification({\n    isMessageListScrolledToBottom,\n    showAlways: !!showUnreadNotificationAlways,\n    unreadCount: channelUnreadUiState?.unread_messages,\n  });\n\n  useMarkRead({\n    isMessageListScrolledToBottom,\n    messageListIsThread: threadList,\n    wasMarkedUnread: !!channelUnreadUiState?.first_unread_message_id,\n  });\n\n  const { messageGroupStyles, messages: enrichedMessages } = useEnrichedMessages({\n    channel,\n    disableDateSeparator,\n    groupStyles,\n    headerPosition,\n    hideDeletedMessages,\n    hideNewMessageSeparator,\n    maxTimeBetweenGroupedMessages,\n    messages,\n    noGroupByUser,\n    reviewProcessedMessage,\n  });\n\n  const elements = useMessageListElements({\n    channelUnreadUiState,\n    enrichedMessages,\n    internalMessageProps: {\n      additionalMessageInputProps: props.additionalMessageInputProps,\n      closeReactionSelectorOnClick: props.closeReactionSelectorOnClick,\n      customMessageActions: props.customMessageActions,\n      disableQuotedMessages: props.disableQuotedMessages,\n      formatDate: props.formatDate,\n      getDeleteMessageErrorNotification: props.getDeleteMessageErrorNotification,\n      getFlagMessageErrorNotification: props.getFlagMessageErrorNotification,\n      getFlagMessageSuccessNotification: props.getFlagMessageSuccessNotification,\n      getMarkMessageUnreadErrorNotification: props.getMarkMessageUnreadErrorNotification,\n      getMarkMessageUnreadSuccessNotification:\n        props.getMarkMessageUnreadSuccessNotification,\n      getMuteUserErrorNotification: props.getMuteUserErrorNotification,\n      getMuteUserSuccessNotification: props.getMuteUserSuccessNotification,\n      getPinMessageErrorNotification: props.getPinMessageErrorNotification,\n      Message: props.Message,\n      messageActions,\n      messageListRect: wrapperRect,\n      onlySenderCanEdit: props.onlySenderCanEdit,\n      onMentionsClick: props.onMentionsClick,\n      onMentionsHover: props.onMentionsHover,\n      onUserClick: props.onUserClick,\n      onUserHover: props.onUserHover,\n      openThread: props.openThread,\n      pinPermissions,\n      reactionDetailsSort,\n      renderText: props.renderText,\n      retrySendMessage: props.retrySendMessage,\n      sortReactionDetails,\n      sortReactions,\n      unsafeHTML,\n    },\n    messageGroupStyles,\n    read,\n    renderMessages,\n    returnAllReadData,\n    threadList,\n  });\n\n  const messageListClass = customClasses?.messageList || 'str-chat__list';\n\n  const loadMore = React.useCallback(() => {\n    if (loadMoreCallback) {\n      loadMoreCallback(messageLimit);\n    }\n  }, [loadMoreCallback, messageLimit]);\n\n  const loadMoreNewer = React.useCallback(() => {\n    if (loadMoreNewerCallback) {\n      loadMoreNewerCallback(messageLimit);\n    }\n  }, [loadMoreNewerCallback, messageLimit]);\n\n  const scrollToBottomFromNotification = React.useCallback(async () => {\n    if (hasMoreNewer) {\n      await jumpToLatestMessage();\n    } else {\n      scrollToBottom();\n    }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [scrollToBottom, hasMoreNewer]);\n\n  React.useLayoutEffect(() => {\n    if (highlightedMessageId) {\n      const element = ulElement?.querySelector(\n        `[data-message-id='${highlightedMessageId}']`,\n      );\n      element?.scrollIntoView({ block: 'center' });\n    }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [highlightedMessageId]);\n\n  const showEmptyStateIndicator = elements.length === 0 && !threadList;\n  const dialogManagerId = threadList\n    ? 'message-list-dialog-manager-thread'\n    : 'message-list-dialog-manager';\n  return (\n    <MessageListContextProvider value={{ listElement, scrollToBottom }}>\n      <MessageListMainPanel>\n        <DialogManagerProvider id={dialogManagerId}>\n          {!threadList && showUnreadMessagesNotification && (\n            <UnreadMessagesNotification\n              unreadCount={channelUnreadUiState?.unread_messages}\n            />\n          )}\n          <div\n            className={clsx(messageListClass, customClasses?.threadList)}\n            onScroll={onScroll}\n            ref={setListElement}\n            tabIndex={0}\n          >\n            {showEmptyStateIndicator ? (\n              <EmptyStateIndicator listType={threadList ? 'thread' : 'message'} />\n            ) : (\n              <InfiniteScroll\n                className='str-chat__message-list-scroll'\n                data-testid='reverse-infinite-scroll'\n                hasNextPage={props.hasMoreNewer}\n                hasPreviousPage={props.hasMore}\n                head={props.head}\n                isLoading={props.loadingMore}\n                loader={\n                  <div className='str-chat__list__loading' key='loading-indicator'>\n                    {props.loadingMore && <LoadingIndicator size={20} />}\n                  </div>\n                }\n                loadNextPage={loadMoreNewer}\n                loadPreviousPage={loadMore}\n                threshold={loadMoreScrollThreshold}\n                {...restInternalInfiniteScrollProps}\n              >\n                <ul className='str-chat__ul' ref={setUlElement}>\n                  {elements}\n                </ul>\n                <TypingIndicator threadList={threadList} />\n\n                <div key='bottom' />\n              </InfiniteScroll>\n            )}\n          </div>\n        </DialogManagerProvider>\n      </MessageListMainPanel>\n      <MessageListNotifications\n        hasNewMessages={hasNewMessages}\n        isMessageListScrolledToBottom={isMessageListScrolledToBottom}\n        isNotAtLatestMessageSet={hasMoreNewer}\n        MessageNotification={MessageNotification}\n        notifications={notifications}\n        scrollToBottom={scrollToBottomFromNotification}\n        threadList={threadList}\n        unreadCount={threadList ? undefined : channelUnreadUiState?.unread_messages}\n      />\n    </MessageListContextProvider>\n  );\n};\n\ntype PropsDrilledToMessage =\n  | 'additionalMessageInputProps'\n  | 'closeReactionSelectorOnClick'\n  | 'customMessageActions'\n  | 'disableQuotedMessages'\n  | 'formatDate'\n  | 'getDeleteMessageErrorNotification'\n  | 'getFlagMessageErrorNotification'\n  | 'getFlagMessageSuccessNotification'\n  | 'getMarkMessageUnreadErrorNotification'\n  | 'getMarkMessageUnreadSuccessNotification'\n  | 'getMuteUserErrorNotification'\n  | 'getMuteUserSuccessNotification'\n  | 'getPinMessageErrorNotification'\n  | 'Message'\n  | 'messageActions'\n  | 'onlySenderCanEdit'\n  | 'onMentionsClick'\n  | 'onMentionsHover'\n  | 'onUserClick'\n  | 'onUserHover'\n  | 'openThread'\n  | 'pinPermissions' // @deprecated in favor of `channelCapabilities` - TODO: remove in next major release\n  | 'reactionDetailsSort'\n  | 'renderText'\n  | 'retrySendMessage'\n  | 'sortReactions'\n  | 'sortReactionDetails'\n  | 'unsafeHTML';\n\nexport type MessageListProps<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Partial<Pick<MessageProps<StreamChatGenerics>, PropsDrilledToMessage>> & {\n  /** Disables the injection of date separator components in MessageList, defaults to `false` */\n  disableDateSeparator?: boolean;\n  /** Callback function to set group styles for each message */\n  groupStyles?: (\n    message: StreamMessage<StreamChatGenerics>,\n    previousMessage: StreamMessage<StreamChatGenerics>,\n    nextMessage: StreamMessage<StreamChatGenerics>,\n    noGroupByUser: boolean,\n    maxTimeBetweenGroupedMessages?: number,\n  ) => GroupStyle;\n  /** Whether the list has more items to load */\n  hasMore?: boolean;\n  /** Element to be rendered at the top of the thread message list. By default, these are the Message and ThreadStart components */\n  head?: React.ReactElement;\n  /** Position to render HeaderComponent */\n  headerPosition?: number;\n  /** Hides the MessageDeleted components from the list, defaults to `false` */\n  hideDeletedMessages?: boolean;\n  /** Hides the DateSeparator component when new messages are received in a channel that's watched but not active, defaults to false */\n  hideNewMessageSeparator?: boolean;\n  /** Overrides the default props passed to [InfiniteScroll](https://github.com/GetStream/stream-chat-react/blob/master/src/components/InfiniteScrollPaginator/InfiniteScroll.tsx) */\n  internalInfiniteScrollProps?: Partial<InfiniteScrollProps>;\n  /** Function called when latest messages should be loaded, after the list has jumped at an earlier message set */\n  jumpToLatestMessage?: () => Promise<void>;\n  /** Whether or not the list is currently loading more items */\n  loadingMore?: boolean;\n  /** Whether or not the list is currently loading newer items */\n  loadingMoreNewer?: boolean;\n  /** Function called when more messages are to be loaded, defaults to function stored in [ChannelActionContext](https://getstream.io/chat/docs/sdk/react/contexts/channel_action_context/) */\n  loadMore?: ChannelActionContextValue['loadMore'] | (() => Promise<void>);\n  /** Function called when newer messages are to be loaded, defaults to function stored in [ChannelActionContext](https://getstream.io/chat/docs/sdk/react/contexts/channel_action_context/) */\n  loadMoreNewer?: ChannelActionContextValue['loadMoreNewer'] | (() => Promise<void>);\n  /** Maximum time in milliseconds that should occur between messages to still consider them grouped together */\n  maxTimeBetweenGroupedMessages?: number;\n  /** The limit to use when paginating messages */\n  messageLimit?: number;\n  /** The messages to render in the list, defaults to messages stored in [ChannelStateContext](https://getstream.io/chat/docs/sdk/react/contexts/channel_state_context/) */\n  messages?: StreamMessage<StreamChatGenerics>[];\n  /** If true, turns off message UI grouping by user */\n  noGroupByUser?: boolean;\n  /** Overrides the way MessageList renders messages */\n  renderMessages?: MessageRenderer<StreamChatGenerics>;\n  /** If true, `readBy` data supplied to the `Message` components will include all user read states per sent message */\n  returnAllReadData?: boolean;\n  /**\n   * Allows to review changes introduced to messages array on per message basis (e.g. date separator injection before a message).\n   * The array returned from the function is appended to the array of messages that are later rendered into React elements in the `MessageList`.\n   */\n  reviewProcessedMessage?: ProcessMessagesParams<StreamChatGenerics>['reviewProcessedMessage'];\n  /**\n   * The pixel threshold under which the message list is considered to be so near to the bottom,\n   * so that if a new message is delivered, the list will be scrolled to the absolute bottom.\n   * Defaults to 200px\n   */\n  scrolledUpThreshold?: number;\n  /**\n   * The floating notification informing about unread messages will be shown when the\n   * UnreadMessagesSeparator is not visible. The default is false, that means the notification\n   * is shown only when viewing unread messages.\n   */\n  showUnreadNotificationAlways?: boolean;\n  /** If true, indicates the message list is a thread  */\n  threadList?: boolean; // todo: refactor needed - message list should have a state in which among others it would be optionally flagged as thread\n};\n\n/**\n * The MessageList component renders a list of Messages.\n * It is a consumer of the following contexts:\n * - [ChannelStateContext](https://getstream.io/chat/docs/sdk/react/contexts/channel_state_context/)\n * - [ChannelActionContext](https://getstream.io/chat/docs/sdk/react/contexts/channel_action_context/)\n * - [ComponentContext](https://getstream.io/chat/docs/sdk/react/contexts/component_context/)\n * - [TypingContext](https://getstream.io/chat/docs/sdk/react/contexts/typing_context/)\n */\nexport const MessageList = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  props: MessageListProps<StreamChatGenerics>,\n) => {\n  const { jumpToLatestMessage, loadMore, loadMoreNewer } =\n    useChannelActionContext<StreamChatGenerics>('MessageList');\n\n  const {\n    members: membersPropToNotPass, // eslint-disable-line @typescript-eslint/no-unused-vars\n    mutes: mutesPropToNotPass, // eslint-disable-line @typescript-eslint/no-unused-vars\n    watchers: watchersPropToNotPass, // eslint-disable-line @typescript-eslint/no-unused-vars\n    ...restChannelStateContext\n  } = useChannelStateContext<StreamChatGenerics>('MessageList');\n\n  return (\n    <MessageListWithContext<StreamChatGenerics>\n      jumpToLatestMessage={jumpToLatestMessage}\n      loadMore={loadMore}\n      loadMoreNewer={loadMoreNewer}\n      {...restChannelStateContext}\n      {...props}\n    />\n  );\n};\n", "import { useMemo } from 'react';\n\nimport {\n  getGroupStyles,\n  GroupStyle,\n  insertIntro,\n  processMessages,\n  ProcessMessagesParams,\n} from '../../utils';\n\nimport { useChatContext } from '../../../../context/ChatContext';\nimport { useComponentContext } from '../../../../context/ComponentContext';\n\nimport type { Channel } from 'stream-chat';\n\nimport type { StreamMessage } from '../../../../context/ChannelStateContext';\n\nimport type { DefaultStreamChatGenerics } from '../../../../types/types';\n\nexport const useEnrichedMessages = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(args: {\n  channel: Channel<StreamChatGenerics>;\n  disableDateSeparator: boolean;\n  hideDeletedMessages: boolean;\n  hideNewMessageSeparator: boolean;\n  messages: StreamMessage<StreamChatGenerics>[];\n  noGroupByUser: boolean;\n  groupStyles?: (\n    message: StreamMessage<StreamChatGenerics>,\n    previousMessage: StreamMessage<StreamChatGenerics>,\n    nextMessage: StreamMessage<StreamChatGenerics>,\n    noGroupByUser: boolean,\n    maxTimeBetweenGroupedMessages?: number,\n  ) => GroupStyle;\n  headerPosition?: number;\n  maxTimeBetweenGroupedMessages?: number;\n  reviewProcessedMessage?: ProcessMessagesParams<StreamChatGenerics>['reviewProcessedMessage'];\n}) => {\n  const {\n    channel,\n    disableDateSeparator,\n    groupStyles,\n    headerPosition,\n    hideDeletedMessages,\n    hideNewMessageSeparator,\n    maxTimeBetweenGroupedMessages,\n    messages,\n    noGroupByUser,\n    reviewProcessedMessage,\n  } = args;\n\n  const { client } = useChatContext<StreamChatGenerics>('useEnrichedMessages');\n  const { HeaderComponent } =\n    useComponentContext<StreamChatGenerics>('useEnrichedMessages');\n\n  const lastRead = useMemo(() => channel.lastRead?.(), [channel]);\n\n  const enableDateSeparator = !disableDateSeparator;\n\n  let messagesWithDates =\n    !enableDateSeparator && !hideDeletedMessages && hideNewMessageSeparator\n      ? messages\n      : processMessages<StreamChatGenerics>({\n          enableDateSeparator,\n          hideDeletedMessages,\n          hideNewMessageSeparator,\n          lastRead,\n          messages,\n          reviewProcessedMessage,\n          userId: client.userID || '',\n        });\n\n  if (HeaderComponent) {\n    messagesWithDates = insertIntro(messagesWithDates, headerPosition);\n  }\n\n  const groupStylesFn = groupStyles || getGroupStyles;\n  const messageGroupStyles = useMemo(\n    () =>\n      messagesWithDates.reduce<Record<string, GroupStyle>>((acc, message, i) => {\n        const style = groupStylesFn(\n          message,\n          messagesWithDates[i - 1],\n          messagesWithDates[i + 1],\n          noGroupByUser,\n          maxTimeBetweenGroupedMessages,\n        );\n        if (style) acc[message.id] = style;\n        return acc;\n      }, {}),\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    [maxTimeBetweenGroupedMessages, messagesWithDates, noGroupByUser],\n  );\n\n  return { messageGroupStyles, messages: messagesWithDates };\n};\n", "import { nanoid } from 'nanoid';\n\nimport { CUSTOM_MESSAGE_TYPE } from '../../constants/messageTypes';\nimport { isMessageEdited } from '../Message/utils';\nimport { isDate } from '../../i18n';\n\nimport type { MessageLabel, UserResponse } from 'stream-chat';\nimport type { DefaultStreamChatGenerics } from '../../types/types';\nimport type { StreamMessage } from '../../context/ChannelStateContext';\n\ntype ProcessMessagesContext = {\n  /** the connected user ID */\n  userId: string;\n  /** Enable date separator */\n  enableDateSeparator?: boolean;\n  /** Enable deleted messages to be filtered out of resulting message list */\n  hideDeletedMessages?: boolean;\n  /** Disable date separator display for unread incoming messages */\n  hideNewMessageSeparator?: boolean;\n  /** Sets the threshold after everything is considered unread */\n  lastRead?: Date | null;\n};\n\nexport type ProcessMessagesParams<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = ProcessMessagesContext & {\n  messages: StreamMessage<StreamChatGenerics>[];\n  reviewProcessedMessage?: (params: {\n    /** array of messages representing the changes applied around a given processed message */\n    changes: StreamMessage<StreamChatGenerics>[];\n    /** configuration params and information forwarded from `processMessages` */\n    context: ProcessMessagesContext;\n    /** index of the processed message in the original messages array */\n    index: number;\n    /** array of messages retrieved from the back-end */\n    messages: StreamMessage<StreamChatGenerics>[];\n    /** newly built array of messages to be later rendered */\n    processedMessages: StreamMessage<StreamChatGenerics>[];\n  }) => StreamMessage<StreamChatGenerics>[];\n  /** Signals whether to separate giphy preview as well as used to set the giphy preview state */\n  setGiphyPreviewMessage?: React.Dispatch<\n    React.SetStateAction<StreamMessage<StreamChatGenerics> | undefined>\n  >;\n};\n\n/**\n * processMessages - Transform the input message list according to config parameters\n *\n * Inserts date separators btw. messages created on different dates or before unread incoming messages. By default:\n * - enabled in main message list\n * - disabled in virtualized message list\n * - disabled in thread\n *\n * Allows to filter out deleted messages, contolled by hideDeletedMessages param. This is disabled by default.\n *\n * Sets Giphy preview message for VirtualizedMessageList\n *\n * The only required params are messages and userId, the rest are config params:\n *\n * @return {StreamMessage<StreamChatGenerics>[]} Transformed list of messages\n */\nexport const processMessages = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  params: ProcessMessagesParams<StreamChatGenerics>,\n) => {\n  const { messages, reviewProcessedMessage, setGiphyPreviewMessage, ...context } = params;\n  const {\n    enableDateSeparator,\n    hideDeletedMessages,\n    hideNewMessageSeparator,\n    lastRead,\n    userId,\n  } = context;\n\n  let unread = false;\n  let ephemeralMessagePresent = false;\n  let lastDateSeparator;\n  const newMessages: StreamMessage<StreamChatGenerics>[] = [];\n\n  for (let i = 0; i < messages.length; i += 1) {\n    const message = messages[i];\n\n    if (hideDeletedMessages && message.type === 'deleted') {\n      continue;\n    }\n\n    if (\n      setGiphyPreviewMessage &&\n      message.type === 'ephemeral' &&\n      message.command === 'giphy'\n    ) {\n      ephemeralMessagePresent = true;\n      setGiphyPreviewMessage(message);\n      continue;\n    }\n\n    const changes: StreamMessage<StreamChatGenerics>[] = [];\n    const messageDate =\n      (message.created_at &&\n        isDate(message.created_at) &&\n        message.created_at.toDateString()) ||\n      '';\n    const previousMessage = messages[i - 1];\n    let prevMessageDate = messageDate;\n\n    if (\n      enableDateSeparator &&\n      previousMessage?.created_at &&\n      isDate(previousMessage.created_at)\n    ) {\n      prevMessageDate = previousMessage.created_at.toDateString();\n    }\n\n    if (!unread && !hideNewMessageSeparator) {\n      unread =\n        (lastRead && message.created_at && new Date(lastRead) < message.created_at) ||\n        false;\n\n      // do not show date separator for current user's messages\n      if (enableDateSeparator && unread && message.user?.id !== userId) {\n        changes.push({\n          customType: CUSTOM_MESSAGE_TYPE.date,\n          date: message.created_at,\n          id: makeDateMessageId(message.created_at),\n          unread,\n        } as StreamMessage<StreamChatGenerics>);\n      }\n    }\n\n    if (\n      enableDateSeparator &&\n      (i === 0 || // always put date separator before the first message\n        messageDate !== prevMessageDate || // add date separator btw. 2 messages created on different date\n        // if hiding deleted messages replace the previous deleted message(s) with A separator if the last rendered message was created on different date\n        (hideDeletedMessages &&\n          previousMessage?.type === 'deleted' &&\n          lastDateSeparator !== messageDate)) &&\n      changes[changes.length - 1]?.customType !== CUSTOM_MESSAGE_TYPE.date // do not show two date separators in a row)\n    ) {\n      lastDateSeparator = messageDate;\n\n      changes.push(\n        {\n          customType: CUSTOM_MESSAGE_TYPE.date,\n          date: message.created_at,\n          id: makeDateMessageId(message.created_at),\n        } as StreamMessage<StreamChatGenerics>,\n        message,\n      );\n    } else {\n      changes.push(message);\n    }\n\n    newMessages.push(\n      ...(reviewProcessedMessage?.({\n        changes,\n        context,\n        index: i,\n        messages,\n        processedMessages: newMessages,\n      }) || changes),\n    );\n  }\n\n  // clean up the giphy preview component state after a Cancel action\n  if (setGiphyPreviewMessage && !ephemeralMessagePresent) {\n    setGiphyPreviewMessage(undefined);\n  }\n\n  return newMessages;\n};\n\nexport const makeDateMessageId = (date?: string | Date) => {\n  let idSuffix;\n  try {\n    idSuffix = !date ? nanoid() : date instanceof Date ? date.toISOString() : date;\n  } catch (e) {\n    idSuffix = nanoid();\n  }\n  return `${CUSTOM_MESSAGE_TYPE.date}-${idSuffix}`;\n};\n\n// fast since it usually iterates just the last few messages\nexport const getLastReceived = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  messages: StreamMessage<StreamChatGenerics>[],\n) => {\n  for (let i = messages.length - 1; i > 0; i -= 1) {\n    if (messages[i].status === 'received') {\n      return messages[i].id;\n    }\n  }\n\n  return null;\n};\n\nexport const getReadStates = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  messages: StreamMessage<StreamChatGenerics>[],\n  read: Record<string, { last_read: Date; user: UserResponse<StreamChatGenerics> }> = {},\n  returnAllReadData: boolean,\n) => {\n  // create object with empty array for each message id\n  const readData: Record<string, Array<UserResponse<StreamChatGenerics>>> = {};\n\n  Object.values(read).forEach((readState) => {\n    if (!readState.last_read) return;\n\n    let userLastReadMsgId: string | undefined;\n\n    // loop messages sent by current user and add read data for other users in channel\n    messages.forEach((msg) => {\n      if (msg.created_at && msg.created_at < readState.last_read) {\n        userLastReadMsgId = msg.id;\n\n        // if true, save other user's read data for all messages they've read\n        if (returnAllReadData) {\n          if (!readData[userLastReadMsgId]) {\n            readData[userLastReadMsgId] = [];\n          }\n\n          readData[userLastReadMsgId].push(readState.user);\n        }\n      }\n    });\n\n    // if true, only save read data for other user's last read message\n    if (userLastReadMsgId && !returnAllReadData) {\n      if (!readData[userLastReadMsgId]) {\n        readData[userLastReadMsgId] = [];\n      }\n\n      readData[userLastReadMsgId].push(readState.user);\n    }\n  });\n\n  return readData;\n};\n\nexport const insertIntro = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  messages: StreamMessage<StreamChatGenerics>[],\n  headerPosition?: number,\n) => {\n  const newMessages = messages;\n  const intro = {\n    customType: CUSTOM_MESSAGE_TYPE.intro,\n  } as unknown as StreamMessage<StreamChatGenerics>;\n\n  // if no headerPosition is set, HeaderComponent will go at the top\n  if (!headerPosition) {\n    newMessages.unshift(intro);\n    return newMessages;\n  }\n\n  // if no messages, intro gets inserted\n  if (!newMessages.length) {\n    newMessages.unshift(intro);\n    return newMessages;\n  }\n\n  // else loop over the messages\n  for (let i = 0; i < messages.length; i += 1) {\n    const message = messages[i];\n    const messageTime =\n      message.created_at && isDate(message.created_at)\n        ? message.created_at.getTime()\n        : null;\n\n    const nextMessage = messages[i + 1];\n    const nextMessageTime =\n      nextMessage.created_at && isDate(nextMessage.created_at)\n        ? nextMessage.created_at.getTime()\n        : null;\n\n    // header position is smaller than message time so comes after;\n    if (messageTime && messageTime < headerPosition) {\n      // if header position is also smaller than message time continue;\n      if (nextMessageTime && nextMessageTime < headerPosition) {\n        if (messages[i + 1] && messages[i + 1].customType === CUSTOM_MESSAGE_TYPE.date)\n          continue;\n        if (!nextMessageTime) {\n          newMessages.push(intro);\n          return newMessages;\n        }\n      } else {\n        newMessages.splice(i + 1, 0, intro);\n        return newMessages;\n      }\n    }\n  }\n\n  return newMessages;\n};\n\nexport type GroupStyle = '' | 'middle' | 'top' | 'bottom' | 'single';\n\nexport const getGroupStyles = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  message: StreamMessage<StreamChatGenerics>,\n  previousMessage: StreamMessage<StreamChatGenerics>,\n  nextMessage: StreamMessage<StreamChatGenerics>,\n  noGroupByUser: boolean,\n  maxTimeBetweenGroupedMessages?: number,\n): GroupStyle => {\n  if (message.customType === CUSTOM_MESSAGE_TYPE.date) return '';\n  if (message.customType === CUSTOM_MESSAGE_TYPE.intro) return '';\n\n  if (noGroupByUser || message.attachments?.length !== 0) return 'single';\n\n  const isTopMessage =\n    !previousMessage ||\n    previousMessage.customType === CUSTOM_MESSAGE_TYPE.intro ||\n    previousMessage.customType === CUSTOM_MESSAGE_TYPE.date ||\n    previousMessage.type === 'system' ||\n    previousMessage.type === 'error' ||\n    previousMessage.attachments?.length !== 0 ||\n    message.user?.id !== previousMessage.user?.id ||\n    previousMessage.deleted_at ||\n    (message.reaction_groups && Object.keys(message.reaction_groups).length > 0) ||\n    isMessageEdited(previousMessage) ||\n    (maxTimeBetweenGroupedMessages !== undefined &&\n      previousMessage.created_at &&\n      message.created_at &&\n      new Date(message.created_at).getTime() -\n        new Date(previousMessage.created_at).getTime() >\n        maxTimeBetweenGroupedMessages);\n\n  const isBottomMessage =\n    !nextMessage ||\n    nextMessage.customType === CUSTOM_MESSAGE_TYPE.intro ||\n    nextMessage.customType === CUSTOM_MESSAGE_TYPE.date ||\n    nextMessage.type === 'system' ||\n    nextMessage.type === 'error' ||\n    nextMessage.attachments?.length !== 0 ||\n    message.user?.id !== nextMessage.user?.id ||\n    nextMessage.deleted_at ||\n    (nextMessage.reaction_groups &&\n      Object.keys(nextMessage.reaction_groups).length > 0) ||\n    isMessageEdited(message) ||\n    (maxTimeBetweenGroupedMessages !== undefined &&\n      nextMessage.created_at &&\n      message.created_at &&\n      new Date(nextMessage.created_at).getTime() -\n        new Date(message.created_at).getTime() >\n        maxTimeBetweenGroupedMessages);\n\n  if (!isTopMessage && !isBottomMessage) {\n    if (message.deleted_at || message.type === 'error') return 'single';\n    return 'middle';\n  }\n\n  if (isBottomMessage) {\n    if (isTopMessage || message.deleted_at || message.type === 'error') return 'single';\n    return 'bottom';\n  }\n\n  if (isTopMessage) return 'top';\n\n  return '';\n};\n\n// \"Probably\" included, because it may happen that the last page was returned and it has exactly the size of the limit\n// but the back-end cannot provide us with information on whether it has still more messages in the DB\n// FIXME: once the pagination state is moved from Channel to MessageList, these should be moved as well.\n//  The MessageList should have configurable the limit for performing the requests.\n//  This parameter would then be used within these functions\nexport const hasMoreMessagesProbably = (returnedCountMessages: number, limit: number) =>\n  returnedCountMessages >= limit;\n\n// @deprecated\nexport const hasNotMoreMessages = (returnedCountMessages: number, limit: number) =>\n  returnedCountMessages < limit;\n\ntype DateSeparatorMessage = {\n  customType: typeof CUSTOM_MESSAGE_TYPE.date;\n  date: Date;\n  id: string;\n  type: MessageLabel;\n  unread: boolean;\n};\n\nexport function isDateSeparatorMessage<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(message: StreamMessage<StreamChatGenerics>): message is DateSeparatorMessage {\n  return (\n    message.customType === CUSTOM_MESSAGE_TYPE.date &&\n    !!message.date &&\n    isDate(message.date)\n  );\n}\n\nexport const getIsFirstUnreadMessage = ({\n  firstUnreadMessageId,\n  isFirstMessage,\n  lastReadDate,\n  lastReadMessageId,\n  message,\n  previousMessage,\n  unreadMessageCount = 0,\n}: {\n  isFirstMessage: boolean;\n  message: StreamMessage;\n  firstUnreadMessageId?: string;\n  lastReadDate?: Date;\n  lastReadMessageId?: string;\n  previousMessage?: StreamMessage;\n  unreadMessageCount?: number;\n}) => {\n  // prevent showing unread indicator in threads\n  if (message.parent_id) return false;\n\n  const createdAtTimestamp = message.created_at && new Date(message.created_at).getTime();\n  const lastReadTimestamp = lastReadDate?.getTime();\n\n  const messageIsUnread =\n    !!createdAtTimestamp && !!lastReadTimestamp && createdAtTimestamp > lastReadTimestamp;\n\n  const previousMessageIsLastRead =\n    !!lastReadMessageId && lastReadMessageId === previousMessage?.id;\n\n  return (\n    firstUnreadMessageId === message.id ||\n    (!!unreadMessageCount &&\n      messageIsUnread &&\n      (isFirstMessage || previousMessageIsLastRead))\n  );\n};\n", "import React, { useMemo } from 'react';\n\nimport { useLastReadData } from '../useLastReadData';\nimport { getLastReceived, GroupStyle } from '../../utils';\n\nimport { useChatContext } from '../../../../context/ChatContext';\nimport { useComponentContext } from '../../../../context/ComponentContext';\n\nimport type { ChannelState as StreamChannelState } from 'stream-chat';\nimport type { StreamMessage } from '../../../../context/ChannelStateContext';\n\nimport type {\n  ChannelUnreadUiState,\n  DefaultStreamChatGenerics,\n} from '../../../../types/types';\nimport { MessageRenderer, SharedMessageProps } from '../../renderMessages';\n\ntype UseMessageListElementsProps<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n  enrichedMessages: StreamMessage<StreamChatGenerics>[];\n  internalMessageProps: SharedMessageProps<StreamChatGenerics>;\n  messageGroupStyles: Record<string, GroupStyle>;\n  renderMessages: MessageRenderer<StreamChatGenerics>;\n  returnAllReadData: boolean;\n  threadList: boolean;\n  channelUnreadUiState?: ChannelUnreadUiState<StreamChatGenerics>;\n  read?: StreamChannelState<StreamChatGenerics>['read'];\n};\n\nexport const useMessageListElements = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  props: UseMessageListElementsProps<StreamChatGenerics>,\n) => {\n  const {\n    channelUnreadUiState,\n    enrichedMessages,\n    internalMessageProps,\n    messageGroupStyles,\n    read,\n    renderMessages,\n    returnAllReadData,\n    threadList,\n  } = props;\n\n  const { client, customClasses } = useChatContext<StreamChatGenerics>(\n    'useMessageListElements',\n  );\n  const components = useComponentContext<StreamChatGenerics>('useMessageListElements');\n\n  // get the readData, but only for messages submitted by the user themselves\n  const readData = useLastReadData({\n    messages: enrichedMessages,\n    read,\n    returnAllReadData,\n    userID: client.userID,\n  });\n\n  const lastReceivedMessageId = useMemo(\n    () => getLastReceived(enrichedMessages),\n    [enrichedMessages],\n  );\n\n  const elements: React.ReactNode[] = useMemo(\n    () =>\n      renderMessages({\n        channelUnreadUiState,\n        components,\n        customClasses,\n        lastReceivedMessageId,\n        messageGroupStyles,\n        messages: enrichedMessages,\n        readData,\n        sharedMessageProps: { ...internalMessageProps, threadList },\n      }),\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    [\n      enrichedMessages,\n      internalMessageProps,\n      lastReceivedMessageId,\n      messageGroupStyles,\n      channelUnreadUiState,\n      readData,\n      renderMessages,\n      threadList,\n    ],\n  );\n\n  return elements;\n};\n", "import { useMemo } from 'react';\n\nimport { getReadStates } from '../utils';\n\nimport type { UserResponse } from 'stream-chat';\n\nimport type { StreamMessage } from '../../../context/ChannelStateContext';\n\nimport type { DefaultStreamChatGenerics } from '../../../types/types';\n\ntype UseLastReadDataParams<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n  messages: StreamMessage<StreamChatGenerics>[];\n  returnAllReadData: boolean;\n  userID: string | undefined;\n  read?: Record<string, { last_read: Date; user: UserResponse<StreamChatGenerics> }>;\n};\n\nexport const useLastReadData = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  props: UseLastReadDataParams<StreamChatGenerics>,\n) => {\n  const { messages, read, returnAllReadData, userID } = props;\n\n  return useMemo(\n    () =>\n      getReadStates(\n        messages.filter(({ user }) => user?.id === userID),\n        read,\n        returnAllReadData,\n      ),\n    [messages, read, returnAllReadData, userID],\n  );\n};\n", "import { useLayoutEffect, useRef } from 'react';\n\nimport { useChatContext } from '../../../../context/ChatContext';\n\nimport type { StreamMessage } from '../../../../context/ChannelStateContext';\n\nimport type { DefaultStreamChatGenerics } from '../../../../types/types';\n\nexport type ContainerMeasures = {\n  offsetHeight: number;\n  scrollHeight: number;\n};\n\nexport type UseMessageListScrollManagerParams<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n  loadMoreScrollThreshold: number;\n  messages: StreamMessage<StreamChatGenerics>[];\n  onScrollBy: (scrollBy: number) => void;\n  scrollContainerMeasures: () => ContainerMeasures;\n  scrolledUpThreshold: number;\n  scrollToBottom: () => void;\n  showNewMessages: () => void;\n};\n\n// FIXME: change this generic name to something like useAdjustScrollPositionToListSize\nexport function useMessageListScrollManager<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(params: UseMessageListScrollManagerParams<StreamChatGenerics>) {\n  const {\n    loadMoreScrollThreshold,\n    onScrollBy,\n    scrollContainerMeasures,\n    scrolledUpThreshold,\n    scrollToBottom,\n    showNewMessages,\n  } = params;\n\n  const { client } = useChatContext<StreamChatGenerics>('useMessageListScrollManager');\n\n  const measures = useRef<ContainerMeasures>({\n    offsetHeight: 0,\n    scrollHeight: 0,\n  });\n  const messages = useRef<StreamMessage<StreamChatGenerics>[]>(undefined);\n  const scrollTop = useRef(0);\n\n  useLayoutEffect(() => {\n    const prevMeasures = measures.current;\n    const prevMessages = messages.current;\n    const newMessages = params.messages;\n    const lastNewMessage = newMessages[newMessages.length - 1] || {};\n    const lastPrevMessage = prevMessages?.[prevMessages.length - 1];\n    const newMeasures = scrollContainerMeasures();\n\n    const wasAtBottom =\n      prevMeasures.scrollHeight - prevMeasures.offsetHeight - scrollTop.current <\n      scrolledUpThreshold;\n\n    if (typeof prevMessages !== 'undefined') {\n      if (prevMessages.length < newMessages.length) {\n        // messages added to the top\n        if (lastPrevMessage?.id === lastNewMessage.id) {\n          if (scrollTop.current < loadMoreScrollThreshold) {\n            const listHeightDelta = newMeasures.scrollHeight - prevMeasures.scrollHeight;\n            onScrollBy(listHeightDelta);\n          }\n        }\n        // messages added to the bottom\n        else {\n          const lastMessageIsFromCurrentUser = lastNewMessage.user?.id === client.userID;\n\n          if (lastMessageIsFromCurrentUser || wasAtBottom) {\n            scrollToBottom();\n          } else {\n            showNewMessages();\n          }\n        }\n      }\n      // message list length didn't change, but check if last message had reaction/reply update\n      else {\n        const hasNewReactions =\n          lastPrevMessage?.latest_reactions?.length !==\n          lastNewMessage.latest_reactions?.length;\n        const hasNewReplies = lastPrevMessage?.reply_count !== lastNewMessage.reply_count;\n\n        if ((hasNewReactions || hasNewReplies) && wasAtBottom) {\n          scrollToBottom();\n        }\n      }\n    }\n\n    messages.current = newMessages;\n    measures.current = newMeasures;\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [measures, messages, params.messages]);\n\n  return (scrollTopValue: number) => {\n    scrollTop.current = scrollTopValue;\n  };\n}\n", "import React, { useCallback, useLayoutEffect, useRef, useState } from 'react';\n\nimport { useMessageListScrollManager } from './useMessageListScrollManager';\n\nimport type { StreamMessage } from '../../../../context/ChannelStateContext';\n\nimport type { DefaultStreamChatGenerics } from '../../../../types/types';\n\nexport type UseScrollLocationLogicParams<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n  hasMoreNewer: boolean;\n  listElement: HTMLDivElement | null;\n  loadMoreScrollThreshold: number;\n  suppressAutoscroll: boolean;\n  messages?: StreamMessage<StreamChatGenerics>[];\n  scrolledUpThreshold?: number;\n};\n\nexport const useScrollLocationLogic = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  params: UseScrollLocationLogicParams<StreamChatGenerics>,\n) => {\n  const {\n    hasMoreNewer,\n    listElement,\n    loadMoreScrollThreshold,\n    messages = [],\n    scrolledUpThreshold = 200,\n    suppressAutoscroll,\n  } = params;\n\n  const [hasNewMessages, setHasNewMessages] = useState(false);\n  const [wrapperRect, setWrapperRect] = useState<DOMRect>();\n\n  const [isMessageListScrolledToBottom, setIsMessageListScrolledToBottom] =\n    useState(true);\n  const closeToBottom = useRef(false);\n  const closeToTop = useRef(false);\n\n  const scrollToBottom = useCallback(() => {\n    if (!listElement?.scrollTo || hasMoreNewer || suppressAutoscroll) {\n      return;\n    }\n\n    listElement.scrollTo({\n      top: listElement.scrollHeight,\n    });\n    setHasNewMessages(false);\n  }, [listElement, hasMoreNewer, suppressAutoscroll]);\n\n  useLayoutEffect(() => {\n    if (listElement) {\n      setWrapperRect(listElement.getBoundingClientRect());\n      scrollToBottom();\n    }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [listElement, hasMoreNewer]);\n\n  const updateScrollTop = useMessageListScrollManager({\n    loadMoreScrollThreshold,\n    messages,\n    onScrollBy: (scrollBy) => {\n      listElement?.scrollBy({ top: scrollBy });\n    },\n\n    scrollContainerMeasures: () => ({\n      offsetHeight: listElement?.offsetHeight || 0,\n      scrollHeight: listElement?.scrollHeight || 0,\n    }),\n    scrolledUpThreshold,\n    scrollToBottom,\n    showNewMessages: () => setHasNewMessages(true),\n  });\n\n  const onScroll = useCallback(\n    (event: React.UIEvent<HTMLDivElement>) => {\n      const element = event.target as HTMLDivElement;\n      const scrollTop = element.scrollTop;\n\n      updateScrollTop(scrollTop);\n\n      const offsetHeight = element.offsetHeight;\n      const scrollHeight = element.scrollHeight;\n\n      const prevCloseToBottom = closeToBottom.current;\n      closeToBottom.current =\n        scrollHeight - (scrollTop + offsetHeight) < scrolledUpThreshold;\n      closeToTop.current = scrollTop < scrolledUpThreshold;\n\n      if (closeToBottom.current) {\n        setHasNewMessages(false);\n      }\n      if (prevCloseToBottom && !closeToBottom.current) {\n        setIsMessageListScrolledToBottom(false);\n      } else if (!prevCloseToBottom && closeToBottom.current) {\n        setIsMessageListScrolledToBottom(true);\n      }\n    },\n    [updateScrollTop, closeToTop, closeToBottom, scrolledUpThreshold],\n  );\n\n  return {\n    hasNewMessages,\n    isMessageListScrolledToBottom,\n    onScroll,\n    scrollToBottom,\n    wrapperRect,\n  };\n};\n", "import { useChannelStateContext } from '../../../../context';\nimport { useEffect, useRef, useState } from 'react';\nimport { MESSAGE_LIST_MAIN_PANEL_CLASS } from '../../MessageListMainPanel';\nimport { UNREAD_MESSAGE_SEPARATOR_CLASS } from '../../UnreadMessagesSeparator';\n\nconst targetScrolledAboveVisibleContainerArea = (element: Element) => {\n  const { bottom: targetBottom } = element.getBoundingClientRect();\n  return targetBottom < 0;\n};\n\nconst targetScrolledBelowVisibleContainerArea = (\n  element: Element,\n  container: Element,\n) => {\n  const { top: targetTop } = element.getBoundingClientRect();\n  const { top: containerBottom } = container.getBoundingClientRect();\n  return targetTop > containerBottom;\n};\n\nexport type UseUnreadMessagesNotificationParams = {\n  isMessageListScrolledToBottom: boolean;\n  showAlways: boolean;\n  unreadCount?: number;\n};\n\nexport const useUnreadMessagesNotification = ({\n  isMessageListScrolledToBottom,\n  showAlways,\n  unreadCount,\n}: UseUnreadMessagesNotificationParams) => {\n  const { messages } = useChannelStateContext('UnreadMessagesNotification');\n  const [show, setShow] = useState(false);\n  const isScrolledAboveTargetTop = useRef(false);\n  const intersectionObserverIsSupported = typeof IntersectionObserver !== 'undefined';\n\n  useEffect(() => {\n    if (!(unreadCount && intersectionObserverIsSupported)) {\n      setShow(false);\n      return;\n    }\n\n    const [msgListPanel] = document.getElementsByClassName(MESSAGE_LIST_MAIN_PANEL_CLASS);\n    if (!msgListPanel) return;\n\n    const [observedTarget] = document.getElementsByClassName(\n      UNREAD_MESSAGE_SEPARATOR_CLASS,\n    );\n    if (!observedTarget) {\n      setShow(true);\n      return;\n    }\n\n    const scrolledBelowSeparator =\n      targetScrolledAboveVisibleContainerArea(observedTarget);\n    const scrolledAboveSeparator = targetScrolledBelowVisibleContainerArea(\n      observedTarget,\n      msgListPanel,\n    );\n\n    setShow(\n      showAlways\n        ? scrolledBelowSeparator || scrolledAboveSeparator\n        : scrolledBelowSeparator,\n    );\n\n    const observer = new IntersectionObserver(\n      (elements) => {\n        if (!elements.length) return;\n        const { boundingClientRect, isIntersecting } = elements[0];\n        if (isIntersecting) {\n          setShow(false);\n          return;\n        }\n        const separatorIsAboveContainerTop = boundingClientRect.bottom < 0;\n        setShow(showAlways || separatorIsAboveContainerTop);\n        isScrolledAboveTargetTop.current = separatorIsAboveContainerTop;\n      },\n      { root: msgListPanel },\n    );\n    observer.observe(observedTarget);\n\n    return () => {\n      observer.disconnect();\n    };\n  }, [\n    intersectionObserverIsSupported,\n    isMessageListScrolledToBottom,\n    messages,\n    showAlways,\n    unreadCount,\n  ]);\n\n  useEffect(() => {\n    /**\n     * Handle situation when scrollToBottom is called from another component when the msg list is scrolled above the observed target (unread separator).\n     * The intersection observer is not triggered when Element.scrollTo() is called. So we end up in a situation when we are scrolled to the bottom\n     * and at the same time scrolled above the observed target.\n     */\n\n    if (\n      unreadCount &&\n      isMessageListScrolledToBottom &&\n      isScrolledAboveTargetTop.current\n    ) {\n      setShow(true);\n      isScrolledAboveTargetTop.current = false;\n    }\n  }, [isMessageListScrolledToBottom, unreadCount]);\n\n  return { show: show && intersectionObserverIsSupported };\n};\n", "import React from 'react';\nimport type { PropsWithChildrenOnly } from '../../types/types';\n\nexport const MESSAGE_LIST_MAIN_PANEL_CLASS =\n  'str-chat__main-panel-inner str-chat__message-list-main-panel' as const;\n\nexport const MessageListMainPanel = ({ children }: PropsWithChildrenOnly) => (\n  <div className={MESSAGE_LIST_MAIN_PANEL_CLASS}>{children}</div>\n);\n", "import React from 'react';\nimport { useTranslationContext } from '../../context';\n\nexport const UNREAD_MESSAGE_SEPARATOR_CLASS = 'str-chat__unread-messages-separator';\n\nexport type UnreadMessagesSeparatorProps = {\n  /**\n   * Configuration parameter to determine, whether the unread count is to be shown on the component. Disabled by default.\n   */\n  showCount?: boolean;\n  /**\n   * The count of unread messages to be displayed if enabled.\n   */\n  unreadCount?: number;\n};\n\nexport const UnreadMessagesSeparator = ({\n  showCount,\n  unreadCount,\n}: UnreadMessagesSeparatorProps) => {\n  const { t } = useTranslationContext('UnreadMessagesSeparator');\n  return (\n    <div\n      className={UNREAD_MESSAGE_SEPARATOR_CLASS}\n      data-testid='unread-messages-separator'\n    >\n      {unreadCount && showCount\n        ? t<string>('unreadMessagesSeparatorText', { count: unreadCount })\n        : t<string>('Unread messages')}\n    </div>\n  );\n};\n", "import { useEffect } from 'react';\nimport {\n  StreamMessage,\n  useChannelActionContext,\n  useChannelStateContext,\n  useChatContext,\n} from '../../../context';\nimport type { Channel, Event, MessageResponse } from 'stream-chat';\nimport type { DefaultStreamChatGenerics } from '../../../types';\n\nconst hasReadLastMessage = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  channel: Channel<StreamChatGenerics>,\n  userId: string,\n) => {\n  const latestMessageIdInChannel = channel.state.latestMessages.slice(-1)[0]?.id;\n  const lastReadMessageIdServer = channel.state.read[userId]?.last_read_message_id;\n  return latestMessageIdInChannel === lastReadMessageIdServer;\n};\n\ntype UseMarkReadParams = {\n  isMessageListScrolledToBottom: boolean;\n  messageListIsThread: boolean;\n  wasMarkedUnread?: boolean;\n};\n\n/**\n * Takes care of marking a channel read. The channel is read only if all the following applies:\n * 1. the message list is not rendered in a thread\n * 2. the message list is scrolled to the bottom\n * 3. the channel was not marked unread by the user\n * @param isMessageListScrolledToBottom\n * @param messageListIsThread\n * @param wasChannelMarkedUnread\n */\nexport const useMarkRead = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n  isMessageListScrolledToBottom,\n  messageListIsThread,\n  wasMarkedUnread,\n}: UseMarkReadParams) => {\n  const { client } = useChatContext<StreamChatGenerics>('useMarkRead');\n  const { markRead, setChannelUnreadUiState } = useChannelActionContext('useMarkRead');\n  const { channel } = useChannelStateContext<StreamChatGenerics>('useMarkRead');\n\n  useEffect(() => {\n    const shouldMarkRead = () =>\n      !document.hidden &&\n      !wasMarkedUnread &&\n      !messageListIsThread &&\n      isMessageListScrolledToBottom &&\n      client.user?.id &&\n      !hasReadLastMessage(channel, client.user.id);\n\n    const onVisibilityChange = () => {\n      if (shouldMarkRead()) markRead();\n    };\n\n    const handleMessageNew = (event: Event<StreamChatGenerics>) => {\n      const mainChannelUpdated =\n        !event.message?.parent_id || event.message?.show_in_channel;\n\n      if (!isMessageListScrolledToBottom || wasMarkedUnread || document.hidden) {\n        setChannelUnreadUiState((prev) => {\n          const previousUnreadCount = prev?.unread_messages ?? 0;\n          const previousLastMessage = getPreviousLastMessage<StreamChatGenerics>(\n            channel.state.messages,\n            event.message,\n          );\n          return {\n            ...(prev || {}),\n            last_read:\n              prev?.last_read ??\n              (previousUnreadCount === 0 && previousLastMessage?.created_at\n                ? new Date(previousLastMessage.created_at)\n                : new Date(0)), // not having information about the last read message means the whole channel is unread,\n            unread_messages: previousUnreadCount + 1,\n          };\n        });\n      } else if (mainChannelUpdated && shouldMarkRead()) {\n        markRead();\n      }\n    };\n\n    channel.on('message.new', handleMessageNew);\n    document.addEventListener('visibilitychange', onVisibilityChange);\n\n    if (shouldMarkRead()) {\n      markRead();\n    }\n\n    return () => {\n      channel.off('message.new', handleMessageNew);\n      document.removeEventListener('visibilitychange', onVisibilityChange);\n    };\n  }, [\n    channel,\n    client,\n    isMessageListScrolledToBottom,\n    markRead,\n    messageListIsThread,\n    setChannelUnreadUiState,\n    wasMarkedUnread,\n  ]);\n};\n\nfunction getPreviousLastMessage<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  messages: StreamMessage<StreamChatGenerics>[],\n  newMessage?: MessageResponse<StreamChatGenerics>,\n) {\n  if (!newMessage) return;\n  let previousLastMessage;\n  for (let i = messages.length - 1; i >= 0; i--) {\n    const msg = messages[i];\n    if (!msg?.id) break;\n    if (msg.id !== newMessage.id) {\n      previousLastMessage = msg;\n      break;\n    }\n  }\n  return previousLastMessage;\n}\n", "import React, { PropsWithChildren } from 'react';\n\nexport type MessageNotificationProps = PropsWithChildren<{\n  /** button click event handler */\n  onClick: React.MouseEventHandler;\n  /** signals whether the message list is considered (below a threshold) to be scrolled to the bottom. Prop used only by [ScrollToBottomButton](https://github.com/GetStream/stream-chat-react/blob/master/src/components/MessageList/ScrollToBottomButton.tsx) */\n  isMessageListScrolledToBottom?: boolean;\n  /** Whether or not to show notification. Prop used only by [MessageNotification](https://github.com/GetStream/stream-chat-react/blob/master/src/components/MessageList/MessageNotification.tsx)  */\n  showNotification?: boolean;\n  /** informs the component whether it is rendered inside a thread message list */\n  threadList?: boolean;\n  /** */\n  unreadCount?: number;\n}>;\n\nconst UnMemoizedMessageNotification = (props: MessageNotificationProps) => {\n  const { children, onClick, showNotification = true } = props;\n\n  if (!showNotification) return null;\n\n  return (\n    <button\n      aria-live='polite'\n      className={`str-chat__message-notification`}\n      data-testid='message-notification'\n      onClick={onClick}\n    >\n      {children}\n    </button>\n  );\n};\n\nexport const MessageNotification = React.memo(\n  UnMemoizedMessageNotification,\n) as typeof UnMemoizedMessageNotification;\n", "import React from 'react';\n\nimport { ConnectionStatus } from './ConnectionStatus';\nimport { CustomNotification } from './CustomNotification';\n\nimport { useTranslationContext } from '../../context/TranslationContext';\n\nimport type { MessageNotificationProps } from './MessageNotification';\n\nimport type { ChannelNotifications } from '../../context/ChannelStateContext';\n\nexport type MessageListNotificationsProps = {\n  hasNewMessages: boolean;\n  isMessageListScrolledToBottom: boolean;\n  isNotAtLatestMessageSet: boolean;\n  MessageNotification: React.ComponentType<MessageNotificationProps>;\n  notifications: ChannelNotifications;\n  scrollToBottom: () => void;\n  threadList?: boolean;\n  unreadCount?: number;\n};\n\nexport const MessageListNotifications = (props: MessageListNotificationsProps) => {\n  const {\n    hasNewMessages,\n    isMessageListScrolledToBottom,\n    isNotAtLatestMessageSet,\n    MessageNotification,\n    notifications,\n    scrollToBottom,\n    threadList,\n    unreadCount,\n  } = props;\n\n  const { t } = useTranslationContext('MessageListNotifications');\n\n  return (\n    <div className='str-chat__list-notifications'>\n      {notifications.map((notification) => (\n        <CustomNotification active={true} key={notification.id} type={notification.type}>\n          {notification.text}\n        </CustomNotification>\n      ))}\n      <ConnectionStatus />\n      <MessageNotification\n        isMessageListScrolledToBottom={isMessageListScrolledToBottom}\n        onClick={scrollToBottom}\n        showNotification={hasNewMessages || isNotAtLatestMessageSet}\n        threadList={threadList}\n        unreadCount={unreadCount}\n      >\n        {isNotAtLatestMessageSet\n          ? t<string>('Latest Messages')\n          : t<string>('New Messages!')}\n      </MessageNotification>\n    </div>\n  );\n};\n", "import React from 'react';\nimport { CloseIcon } from './icons';\nimport { useChannelActionContext, useTranslationContext } from '../../context';\n\nexport type UnreadMessagesNotificationProps = {\n  /**\n   * Configuration parameter to determine the message page size, when jumping to the first unread message.\n   */\n  queryMessageLimit?: number;\n  /**\n   * Configuration parameter to determine, whether the unread count is to be shown on the component. Disabled by default.\n   */\n  showCount?: boolean;\n  /**\n   * The count of unread messages to be displayed if enabled.\n   */\n  unreadCount?: number;\n};\n\nexport const UnreadMessagesNotification = ({\n  queryMessageLimit,\n  showCount,\n  unreadCount,\n}: UnreadMessagesNotificationProps) => {\n  const { jumpToFirstUnreadMessage, markRead } = useChannelActionContext(\n    'UnreadMessagesNotification',\n  );\n  const { t } = useTranslationContext('UnreadMessagesNotification');\n\n  return (\n    <div\n      className='str-chat__unread-messages-notification'\n      data-testid='unread-messages-notification'\n    >\n      <button onClick={() => jumpToFirstUnreadMessage(queryMessageLimit)}>\n        {unreadCount && showCount\n          ? t<string>('{{count}} unread', { count: unreadCount ?? 0 })\n          : t<string>('Unread messages')}\n      </button>\n      <button onClick={() => markRead()}>\n        <CloseIcon />\n      </button>\n    </div>\n  );\n};\n", "import React from 'react';\n\ninterface ArrowProps {\n  className?: string;\n  color?: string;\n}\n\nexport const ArrowUp = ({ className, color }: ArrowProps) => (\n  <svg\n    className={className}\n    data-testid='arrow-up'\n    fill='none'\n    height='24'\n    viewBox='0 0 24 24'\n    width='24'\n    xmlns='http://www.w3.org/2000/svg'\n  >\n    <path\n      d='M16.59 15.7051L12 11.1251L7.41 15.7051L6 14.2951L12 8.29508L18 14.2951L16.59 15.7051Z'\n      fill={color || 'var(--primary-color)'}\n    />\n  </svg>\n);\n\nexport const ArrowDown = ({ className, color }: ArrowProps) => (\n  <svg\n    className={className}\n    data-testid='arrow-down'\n    fill='none'\n    height='24'\n    viewBox='0 0 24 24'\n    width='24'\n    xmlns='http://www.w3.org/2000/svg'\n  >\n    <path\n      d='M7.41 8.29504L12 12.875L16.59 8.29504L18 9.70504L12 15.705L6 9.70504L7.41 8.29504Z'\n      fill={color || 'var(--primary-color)'}\n    />\n  </svg>\n);\n\nexport const CloseIcon = () => (\n  <svg fill='currentColor' viewBox='0 0 14 13' xmlns='http://www.w3.org/2000/svg'>\n    <path d='M1.32227 12.3408C0.944336 11.9629 0.953125 11.3213 1.32227 10.9521L5.60254 6.66309L1.32227 2.38281C0.953125 2.01367 0.944336 1.37207 1.32227 0.994141C1.7002 0.616211 2.3418 0.625 2.71094 0.985352L7 5.27441L11.2803 0.994141C11.6494 0.625 12.291 0.616211 12.6689 0.994141C13.0469 1.37207 13.0381 2.01367 12.6689 2.38281L8.38867 6.66309L12.6689 10.9521C13.0381 11.3213 13.0469 11.9629 12.6689 12.3408C12.291 12.7188 11.6494 12.71 11.2803 12.3408L7 8.06055L2.71094 12.3408C2.3418 12.71 1.7002 12.7188 1.32227 12.3408Z' />\n  </svg>\n);\n", "import React, { PropsWithChildren, useEffect, useRef } from 'react';\nimport type { PaginatorProps } from '../../types/types';\nimport { deprecationAndReplacementWarning } from '../../utils/deprecationWarning';\nimport { DEFAULT_LOAD_PAGE_SCROLL_THRESHOLD } from '../../constants/limits';\n\n/**\n * Prevents Chrome hangups\n * See: https://stackoverflow.com/questions/47524205/random-high-content-download-time-in-chrome/47684257#47684257\n */\nconst mousewheelListener = (event: Event) => {\n  if (event instanceof WheelEvent && event.deltaY === 1) {\n    event.preventDefault();\n  }\n};\n\nexport type InfiniteScrollProps = PaginatorProps & {\n  className?: string;\n  element?: React.ElementType;\n  /**\n   * @desc Flag signalling whether more pages with older items can be loaded\n   * @deprecated Use hasPreviousPage prop instead. Planned for removal: https://github.com/GetStream/stream-chat-react/issues/1804\n   */\n  hasMore?: boolean;\n  /**\n   * @desc Flag signalling whether more pages with newer items can be loaded\n   * @deprecated Use hasNextPage prop instead. Planned for removal: https://github.com/GetStream/stream-chat-react/issues/1804\n   */\n  hasMoreNewer?: boolean;\n  /** Element to be rendered at the top of the thread message list. By default, Message and ThreadStart components */\n  head?: React.ReactNode;\n  initialLoad?: boolean;\n  isLoading?: boolean;\n  listenToScroll?: (offset: number, reverseOffset: number, threshold: number) => void;\n  loader?: React.ReactNode;\n  /**\n   * @desc Function that loads previous page with older items\n   * @deprecated Use loadPreviousPage prop instead. Planned for removal: https://github.com/GetStream/stream-chat-react/issues/1804\n   */\n  loadMore?: () => void;\n  /**\n   * @desc Function that loads next page with newer items\n   * @deprecated Use loadNextPage prop instead. Planned for removal: https://github.com/GetStream/stream-chat-react/issues/1804\n   */\n  loadMoreNewer?: () => void;\n  useCapture?: boolean;\n};\n\n/**\n * This component serves a single purpose - load more items on scroll inside the MessageList component\n * It is not a general purpose infinite scroll controller, because:\n * 1. It is re-rendered whenever queryInProgress, hasNext, hasPrev changes. This can lead to scrollListener to have stale data.\n * 2. It pretends to invoke scrollListener on resize event even though this event is emitted only on window resize. It should\n * rather use ResizeObserver. But then again, it ResizeObserver would invoke a stale version of scrollListener.\n *\n * In general, the infinite scroll controller should not aim for checking the loading state and whether there is more data to load.\n * That should be controlled by the loading function.\n */\nexport const InfiniteScroll = (props: PropsWithChildren<InfiniteScrollProps>) => {\n  const {\n    children,\n    element = 'div',\n    hasMore,\n    hasMoreNewer,\n    hasNextPage,\n    hasPreviousPage,\n    head,\n    initialLoad = true,\n    isLoading,\n    listenToScroll,\n    loader,\n    loadMore,\n    loadMoreNewer,\n    loadNextPage,\n    loadPreviousPage,\n    threshold = DEFAULT_LOAD_PAGE_SCROLL_THRESHOLD,\n    useCapture = false,\n    ...elementProps\n  } = props;\n\n  const loadNextPageFn = loadNextPage || loadMoreNewer;\n  const loadPreviousPageFn = loadPreviousPage || loadMore;\n  const hasNextPageFlag = hasNextPage || hasMoreNewer;\n  const hasPreviousPageFlag = hasPreviousPage || hasMore;\n\n  const scrollComponent = useRef<HTMLElement>(undefined);\n  const previousOffset = useRef<number | undefined>(undefined);\n  const previousReverseOffset = useRef<number | undefined>(undefined);\n\n  const scrollListenerRef = useRef<() => void>(undefined);\n  scrollListenerRef.current = () => {\n    const element = scrollComponent.current;\n\n    if (!element || element.offsetParent === null) {\n      return;\n    }\n\n    // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n    const parentElement = element.parentElement!;\n\n    const offset =\n      element.scrollHeight - parentElement.scrollTop - parentElement.clientHeight;\n    const reverseOffset = parentElement.scrollTop;\n\n    if (listenToScroll) {\n      listenToScroll(offset, reverseOffset, threshold);\n    }\n\n    if (isLoading) return;\n    if (\n      previousOffset.current === offset &&\n      previousReverseOffset.current === reverseOffset\n    )\n      return;\n    previousOffset.current = offset;\n    previousReverseOffset.current = reverseOffset;\n\n    // FIXME: this triggers loadMore call when a user types messages in thread and the scroll container expands\n    if (\n      reverseOffset < Number(threshold) &&\n      typeof loadPreviousPageFn === 'function' &&\n      hasPreviousPageFlag\n    ) {\n      loadPreviousPageFn();\n    }\n\n    if (\n      offset < Number(threshold) &&\n      typeof loadNextPageFn === 'function' &&\n      hasNextPageFlag\n    ) {\n      loadNextPageFn();\n    }\n  };\n\n  useEffect(() => {\n    deprecationAndReplacementWarning(\n      [\n        [{ hasMoreNewer }, { hasNextPage }],\n        [{ loadMoreNewer }, { loadNextPage }],\n        [{ hasMore }, { hasPreviousPage }],\n        [{ loadMore }, { loadPreviousPage }],\n      ],\n      'InfiniteScroll',\n    );\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, []);\n\n  useEffect(() => {\n    const scrollElement = scrollComponent.current?.parentNode;\n    if (!scrollElement) return;\n\n    const scrollListener = () => scrollListenerRef.current?.();\n\n    scrollElement.addEventListener('scroll', scrollListener, useCapture);\n    scrollElement.addEventListener('resize', scrollListener, useCapture);\n    scrollListener();\n\n    return () => {\n      scrollElement.removeEventListener('scroll', scrollListener, useCapture);\n      scrollElement.removeEventListener('resize', scrollListener, useCapture);\n    };\n  }, [initialLoad, useCapture]);\n\n  useEffect(() => {\n    const scrollElement = scrollComponent.current?.parentNode;\n    if (scrollElement) {\n      scrollElement.addEventListener('wheel', mousewheelListener, { passive: false });\n    }\n    return () => {\n      if (scrollElement) {\n        scrollElement.removeEventListener('wheel', mousewheelListener, useCapture);\n      }\n    };\n  }, [useCapture]);\n\n  const attributes = {\n    ...elementProps,\n    ref: (element: HTMLElement) => {\n      scrollComponent.current = element;\n    },\n  };\n\n  const childrenArray = [loader, children];\n\n  if (head) {\n    childrenArray.unshift(head);\n  }\n\n  return React.createElement(element, attributes, childrenArray);\n};\n", "import React from 'react';\nimport clsx from 'clsx';\n\nimport { useChannelStateContext } from '../../context/ChannelStateContext';\nimport { useChatContext } from '../../context/ChatContext';\nimport { useTypingContext } from '../../context/TypingContext';\nimport { useTranslationContext } from '../../context/TranslationContext';\n\nimport type { DefaultStreamChatGenerics } from '../../types/types';\n\nexport type TypingIndicatorProps = {\n  /** Whether the typing indicator is in a thread */\n  threadList?: boolean;\n};\n\nconst useJoinTypingUsers = (names: string[]) => {\n  const { t } = useTranslationContext();\n\n  if (!names.length) return null;\n\n  const [name, ...rest] = names;\n\n  if (names.length === 1)\n    return t('{{ user }} is typing...', {\n      user: name,\n    });\n\n  const MAX_JOINED_USERS = 3;\n\n  if (names.length > MAX_JOINED_USERS)\n    return t('{{ users }} and more are typing...', {\n      users: names.slice(0, MAX_JOINED_USERS).join(', ').trim(),\n    });\n\n  return t('{{ users }} and {{ user }} are typing...', {\n    user: name,\n    users: rest.join(', ').trim(),\n  });\n};\n\n/**\n * TypingIndicator lists users currently typing, it needs to be a child of Channel component\n */\nconst UnMemoizedTypingIndicator = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  props: TypingIndicatorProps,\n) => {\n  const { threadList } = props;\n\n  const { channelConfig, thread } =\n    useChannelStateContext<StreamChatGenerics>('TypingIndicator');\n  const { client } = useChatContext<StreamChatGenerics>('TypingIndicator');\n  const { typing = {} } = useTypingContext<StreamChatGenerics>('TypingIndicator');\n\n  const typingInChannel = !threadList\n    ? Object.values(typing).filter(\n        ({ parent_id, user }) => user?.id !== client.user?.id && !parent_id,\n      )\n    : [];\n\n  const typingInThread = threadList\n    ? Object.values(typing).filter(\n        ({ parent_id, user }) => user?.id !== client.user?.id && parent_id === thread?.id,\n      )\n    : [];\n\n  const typingUserList = (threadList ? typingInThread : typingInChannel)\n    .map(({ user }) => user?.name || user?.id)\n    .filter(Boolean) as string[];\n\n  const joinedTypingUsers = useJoinTypingUsers(typingUserList);\n\n  const isTypingActive =\n    (threadList && typingInThread.length) || (!threadList && typingInChannel.length);\n\n  if (channelConfig?.typing_events === false) {\n    return null;\n  }\n\n  if (!isTypingActive) return null;\n  return (\n    <div\n      className={clsx('str-chat__typing-indicator', {\n        'str-chat__typing-indicator--typing': isTypingActive,\n      })}\n      data-testid='typing-indicator'\n    >\n      <div className='str-chat__typing-indicator__dots'>\n        <span className='str-chat__typing-indicator__dot'></span>\n        <span className='str-chat__typing-indicator__dot'></span>\n        <span className='str-chat__typing-indicator__dot'></span>\n      </div>\n      <div className='str-chat__typing-indicator__users' data-testid='typing-users'>\n        {joinedTypingUsers}\n      </div>\n    </div>\n  );\n};\n\nexport const TypingIndicator = React.memo(\n  UnMemoizedTypingIndicator,\n) as typeof UnMemoizedTypingIndicator;\n", "import React, { Fragment, ReactNode } from 'react';\n\nimport type { UserResponse } from 'stream-chat';\n\nimport { getIsFirstUnreadMessage, GroupStyle, isDateSeparatorMessage } from './utils';\nimport { Message } from '../Message';\nimport { DateSeparator as DefaultDateSeparator } from '../DateSeparator';\nimport { EventComponent as DefaultMessageSystem } from '../EventComponent';\nimport { UnreadMessagesSeparator as DefaultUnreadMessagesSeparator } from './UnreadMessagesSeparator';\nimport { ComponentContextValue, CustomClasses } from '../../context';\nimport { CUSTOM_MESSAGE_TYPE } from '../../constants/messageTypes';\n\nimport type { ChannelUnreadUiState, DefaultStreamChatGenerics } from '../../types';\nimport type { StreamMessage } from '../../context/ChannelStateContext';\nimport type { MessageProps } from '../Message';\n\nexport interface RenderMessagesOptions<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> {\n  components: ComponentContextValue<StreamChatGenerics>;\n  lastReceivedMessageId: string | null;\n  messageGroupStyles: Record<string, GroupStyle>;\n  messages: Array<StreamMessage<StreamChatGenerics>>;\n  /**\n   * Object mapping message IDs of own messages to the users who read those messages.\n   */\n  readData: Record<string, Array<UserResponse<StreamChatGenerics>>>;\n  /**\n   * Props forwarded to the Message component.\n   */\n  sharedMessageProps: SharedMessageProps<StreamChatGenerics>;\n  /**\n   * Current user's channel read state used to render components reflecting unread state.\n   * It does not reflect the back-end state if a channel is marked read on mount.\n   * This is in order to keep the unread UI when an unread channel is open.\n   */\n  channelUnreadUiState?: ChannelUnreadUiState<StreamChatGenerics>;\n  customClasses?: CustomClasses;\n}\n\nexport type SharedMessageProps<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Omit<MessageProps<StreamChatGenerics>, MessagePropsToOmit>;\n\nexport type MessageRenderer<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = (options: RenderMessagesOptions<StreamChatGenerics>) => Array<ReactNode>;\n\ntype MessagePropsToOmit =\n  | 'channel'\n  | 'groupStyles'\n  | 'initialMessage'\n  | 'lastReceivedId'\n  | 'message'\n  | 'readBy';\n\nexport function defaultRenderMessages<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n  channelUnreadUiState,\n  components,\n  customClasses,\n  lastReceivedMessageId: lastReceivedId,\n  messageGroupStyles,\n  messages,\n  readData,\n  sharedMessageProps: messageProps,\n}: RenderMessagesOptions<StreamChatGenerics>) {\n  const {\n    DateSeparator = DefaultDateSeparator,\n    HeaderComponent,\n    MessageSystem = DefaultMessageSystem,\n    UnreadMessagesSeparator = DefaultUnreadMessagesSeparator,\n  } = components;\n\n  const renderedMessages = [];\n  let firstMessage;\n  let previousMessage = undefined;\n  for (let index = 0; index < messages.length; index++) {\n    const message = messages[index];\n    if (isDateSeparatorMessage(message)) {\n      renderedMessages.push(\n        <li key={`${message.date.toISOString()}-i`}>\n          <DateSeparator\n            date={message.date}\n            formatDate={messageProps.formatDate}\n            unread={message.unread}\n          />\n        </li>,\n      );\n    } else if (message.customType === CUSTOM_MESSAGE_TYPE.intro && HeaderComponent) {\n      renderedMessages.push(\n        <li key='intro'>\n          <HeaderComponent />\n        </li>,\n      );\n    } else if (message.type === 'system') {\n      renderedMessages.push(\n        <li\n          data-message-id={message.id}\n          key={message.id || (message.created_at as string)}\n        >\n          <MessageSystem message={message} />\n        </li>,\n      );\n    } else {\n      if (!firstMessage) {\n        firstMessage = message;\n      }\n      const groupStyles: GroupStyle = messageGroupStyles[message.id] || '';\n      const messageClass =\n        customClasses?.message || `str-chat__li str-chat__li--${groupStyles}`;\n\n      const isFirstUnreadMessage = getIsFirstUnreadMessage({\n        firstUnreadMessageId: channelUnreadUiState?.first_unread_message_id,\n        isFirstMessage: !!firstMessage?.id && firstMessage.id === message.id,\n        lastReadDate: channelUnreadUiState?.last_read,\n        lastReadMessageId: channelUnreadUiState?.last_read_message_id,\n        message,\n        previousMessage,\n        unreadMessageCount: channelUnreadUiState?.unread_messages,\n      });\n\n      renderedMessages.push(\n        <Fragment key={message.id || (message.created_at as string)}>\n          {isFirstUnreadMessage && UnreadMessagesSeparator && (\n            <li className='str-chat__li str-chat__unread-messages-separator-wrapper'>\n              <UnreadMessagesSeparator\n                unreadCount={channelUnreadUiState?.unread_messages}\n              />\n            </li>\n          )}\n          <li\n            className={messageClass}\n            data-message-id={message.id}\n            data-testid={messageClass}\n          >\n            <Message\n              groupStyles={[groupStyles]} /* TODO: convert to simple string */\n              lastReceivedId={lastReceivedId}\n              message={message}\n              readBy={readData[message.id] || []}\n              {...messageProps}\n            />\n          </li>\n        </Fragment>,\n      );\n      previousMessage = message;\n    }\n  }\n  return renderedMessages;\n}\n", "import React from 'react';\n\nimport { useTranslationContext } from '../../context/TranslationContext';\nimport { getDateString } from '../../i18n/utils';\n\nimport type { TimestampFormatterOptions } from '../../i18n/types';\n\nexport type DateSeparatorProps = TimestampFormatterOptions & {\n  /** The date to format */\n  date: Date;\n  /** Override the default formatting of the date. This is a function that has access to the original date object. */\n  formatDate?: (date: Date) => string;\n  /** Set the position of the date in the separator, options are 'left', 'center', 'right', @default right */\n  position?: 'left' | 'center' | 'right';\n  /** If following messages are not new */\n  unread?: boolean;\n};\n\nconst UnMemoizedDateSeparator = (props: DateSeparatorProps) => {\n  const {\n    calendar,\n    date: messageCreatedAt,\n    formatDate,\n    position = 'right',\n    unread,\n    ...restTimestampFormatterOptions\n  } = props;\n\n  const { t, tDateTimeParser } = useTranslationContext('DateSeparator');\n\n  const formattedDate = getDateString({\n    calendar,\n    ...restTimestampFormatterOptions,\n    formatDate,\n    messageCreatedAt,\n    t,\n    tDateTimeParser,\n    timestampTranslationKey: 'timestamp/DateSeparator',\n  });\n\n  return (\n    <div className='str-chat__date-separator' data-testid='date-separator'>\n      {(position === 'right' || position === 'center') && (\n        <hr className='str-chat__date-separator-line' />\n      )}\n      <div className='str-chat__date-separator-date'>\n        {unread ? `${t('New')} - ${formattedDate}` : formattedDate}\n      </div>\n      {(position === 'left' || position === 'center') && (\n        <hr className='str-chat__date-separator-line' />\n      )}\n    </div>\n  );\n};\n\n/**\n * A simple date separator between messages.\n */\nexport const DateSeparator = React.memo(\n  UnMemoizedDateSeparator,\n) as typeof UnMemoizedDateSeparator;\n", "import React from 'react';\n\nimport { AvatarProps, Avatar as DefaultAvatar } from '../Avatar';\n\nimport { useTranslationContext } from '../../context/TranslationContext';\nimport { getDateString } from '../../i18n/utils';\n\nimport type { StreamMessage } from '../../context/ChannelStateContext';\nimport type { DefaultStreamChatGenerics } from '../../types/types';\nimport type { TimestampFormatterOptions } from '../../i18n/types';\n\nexport type EventComponentProps<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = TimestampFormatterOptions & {\n  /** Message object */\n  message: StreamMessage<StreamChatGenerics>;\n  /** Custom UI component to display user avatar, defaults to and accepts same props as: [Avatar](https://github.com/GetStream/stream-chat-react/blob/master/src/components/Avatar/Avatar.tsx) */\n  Avatar?: React.ComponentType<AvatarProps>;\n};\n\n/**\n * Component to display system and channel event messages\n */\nconst UnMemoizedEventComponent = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  props: EventComponentProps<StreamChatGenerics>,\n) => {\n  const { Avatar = DefaultAvatar, calendar, calendarFormats, format, message } = props;\n\n  const { t, tDateTimeParser } = useTranslationContext('EventComponent');\n  const { created_at = '', event, text, type } = message;\n  const getDateOptions = { messageCreatedAt: created_at.toString(), tDateTimeParser };\n\n  if (type === 'system')\n    return (\n      <div className='str-chat__message--system' data-testid='message-system'>\n        <div className='str-chat__message--system__text'>\n          <div className='str-chat__message--system__line' />\n          <p>{text}</p>\n          <div className='str-chat__message--system__line' />\n        </div>\n        <div className='str-chat__message--system__date'>\n          <strong>\n            {getDateString({\n              ...getDateOptions,\n              calendar,\n              calendarFormats,\n              format,\n              t,\n              timestampTranslationKey: 'timestamp/SystemMessage',\n            })}\n          </strong>\n        </div>\n      </div>\n    );\n\n  if (event?.type === 'member.removed' || event?.type === 'member.added') {\n    const name = event.user?.name || event.user?.id;\n    const sentence = `${name} ${\n      event.type === 'member.added' ? 'has joined the chat' : 'was removed from the chat'\n    }`;\n\n    return (\n      <div className='str-chat__event-component__channel-event'>\n        <Avatar image={event.user?.image} name={name} user={event.user} />\n        <div className='str-chat__event-component__channel-event__content'>\n          <em className='str-chat__event-component__channel-event__sentence'>\n            {sentence}\n          </em>\n          <div className='str-chat__event-component__channel-event__date'>\n            {getDateString({ ...getDateOptions, format: 'LT' })}\n          </div>\n        </div>\n      </div>\n    );\n  }\n\n  return null;\n};\n\nexport const EventComponent = React.memo(\n  UnMemoizedEventComponent,\n) as typeof UnMemoizedEventComponent;\n", "import React, { useEffect, useState } from 'react';\nimport clsx from 'clsx';\n\nimport { ArrowDown } from './icons';\n\nimport { useChannelStateContext, useChatContext } from '../../context';\n\nimport type { Event } from 'stream-chat';\nimport type { MessageNotificationProps } from './MessageNotification';\n\nconst UnMemoizedScrollToBottomButton = (\n  props: Pick<\n    MessageNotificationProps,\n    'isMessageListScrolledToBottom' | 'onClick' | 'threadList'\n  >,\n) => {\n  const { isMessageListScrolledToBottom, onClick, threadList } = props;\n\n  const { channel: activeChannel, client } = useChatContext();\n  const { thread } = useChannelStateContext();\n  const [countUnread, setCountUnread] = useState(activeChannel?.countUnread() || 0);\n  const [replyCount, setReplyCount] = useState(thread?.reply_count || 0);\n  const observedEvent = threadList ? 'message.updated' : 'message.new';\n\n  useEffect(() => {\n    const handleEvent = (event: Event) => {\n      const newMessageInAnotherChannel = event.cid !== activeChannel?.cid;\n      const newMessageIsMine = event.user?.id === client.user?.id;\n\n      const isThreadOpen = !!thread;\n      const newMessageIsReply = !!event.message?.parent_id;\n      const dontIncreaseMainListCounterOnNewReply =\n        isThreadOpen && !threadList && newMessageIsReply;\n\n      if (\n        isMessageListScrolledToBottom ||\n        newMessageInAnotherChannel ||\n        newMessageIsMine ||\n        dontIncreaseMainListCounterOnNewReply\n      ) {\n        return;\n      }\n\n      if (event.type === 'message.new') {\n        // cannot rely on channel.countUnread because active channel is automatically marked read\n        setCountUnread((prev) => prev + 1);\n      } else if (event.message?.id === thread?.id) {\n        const newReplyCount = event.message?.reply_count || 0;\n        setCountUnread(() => newReplyCount - replyCount);\n      }\n    };\n    client.on(observedEvent, handleEvent);\n\n    return () => {\n      client.off(observedEvent, handleEvent);\n    };\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [activeChannel, isMessageListScrolledToBottom, observedEvent, replyCount, thread]);\n\n  useEffect(() => {\n    if (isMessageListScrolledToBottom) {\n      setCountUnread(0);\n      setReplyCount(thread?.reply_count || 0);\n    }\n  }, [isMessageListScrolledToBottom, thread]);\n\n  if (isMessageListScrolledToBottom) return null;\n\n  return (\n    <div className='str-chat__jump-to-latest-message'>\n      <button\n        aria-live='polite'\n        className={`\n        str-chat__message-notification-scroll-to-latest\n        str-chat__circle-fab\n      `}\n        data-testid='message-notification'\n        onClick={onClick}\n      >\n        <ArrowDown />\n        {countUnread > 0 && (\n          <div\n            className={clsx(\n              'str-chat__message-notification',\n              'str-chat__jump-to-latest-unread-count',\n            )}\n            data-testid={'unread-message-notification-counter'}\n          >\n            {countUnread}\n          </div>\n        )}\n      </button>\n    </div>\n  );\n};\n\nexport const ScrollToBottomButton = React.memo(\n  UnMemoizedScrollToBottomButton,\n) as typeof UnMemoizedScrollToBottomButton;\n", "import React, { RefObject, useCallback, useEffect, useMemo, useRef } from 'react';\nimport {\n  ComputeItemKey,\n  ScrollSeekConfiguration,\n  ScrollSeekPlaceholderProps,\n  Virtuoso,\n  VirtuosoHandle,\n  VirtuosoProps,\n} from 'react-virtuoso';\n\nimport { GiphyPreviewMessage as DefaultGiphyPreviewMessage } from './GiphyPreviewMessage';\nimport { useLastReadData } from './hooks';\nimport {\n  useGiphyPreview,\n  useMessageSetKey,\n  useNewMessageNotification,\n  usePrependedMessagesCount,\n  useScrollToBottomOnNewMessage,\n  useShouldForceScrollToBottom,\n  useUnreadMessagesNotificationVirtualized,\n} from './hooks/VirtualizedMessageList';\nimport { useMarkRead } from './hooks/useMarkRead';\n\nimport { MessageNotification as DefaultMessageNotification } from './MessageNotification';\nimport { MessageListNotifications as DefaultMessageListNotifications } from './MessageListNotifications';\nimport { MessageListMainPanel as DefaultMessageListMainPanel } from './MessageListMainPanel';\nimport {\n  getGroupStyles,\n  getLastReceived,\n  GroupStyle,\n  processMessages,\n  ProcessMessagesParams,\n} from './utils';\nimport { MessageProps, MessageSimple, MessageUIComponentProps } from '../Message';\nimport { UnreadMessagesNotification as DefaultUnreadMessagesNotification } from './UnreadMessagesNotification';\nimport {\n  calculateFirstItemIndex,\n  calculateItemIndex,\n  EmptyPlaceholder,\n  Header,\n  Item,\n  makeItemsRenderedHandler,\n  messageRenderer,\n} from './VirtualizedMessageListComponents';\n\nimport { UnreadMessagesSeparator as DefaultUnreadMessagesSeparator } from '../MessageList';\nimport { DateSeparator as DefaultDateSeparator } from '../DateSeparator';\nimport { EventComponent as DefaultMessageSystem } from '../EventComponent';\n\nimport { DialogManagerProvider } from '../../context';\nimport {\n  ChannelActionContextValue,\n  useChannelActionContext,\n} from '../../context/ChannelActionContext';\nimport {\n  ChannelNotifications,\n  ChannelStateContextValue,\n  StreamMessage,\n  useChannelStateContext,\n} from '../../context/ChannelStateContext';\nimport { ChatContextValue, useChatContext } from '../../context/ChatContext';\nimport {\n  ComponentContextValue,\n  useComponentContext,\n} from '../../context/ComponentContext';\nimport { VirtualizedMessageListContextProvider } from '../../context/VirtualizedMessageListContext';\n\nimport type {\n  Channel,\n  ChannelState as StreamChannelState,\n  UserResponse,\n} from 'stream-chat';\nimport type { DefaultStreamChatGenerics, UnknownType } from '../../types/types';\nimport { DEFAULT_NEXT_CHANNEL_PAGE_SIZE } from '../../constants/limits';\n\ntype PropsDrilledToMessage =\n  | 'additionalMessageInputProps'\n  | 'customMessageActions'\n  | 'formatDate'\n  | 'messageActions'\n  | 'openThread'\n  | 'reactionDetailsSort'\n  | 'sortReactions'\n  | 'sortReactionDetails';\n\ntype VirtualizedMessageListPropsForContext =\n  | PropsDrilledToMessage\n  | 'closeReactionSelectorOnClick'\n  | 'customMessageRenderer'\n  | 'head'\n  | 'loadingMore'\n  | 'Message'\n  | 'shouldGroupByUser'\n  | 'threadList';\n\n/**\n * Context object provided to some Virtuoso props that are functions (components rendered by Virtuoso and other functions)\n */\nexport type VirtuosoContext<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Required<\n  Pick<\n    ComponentContextValue<StreamChatGenerics>,\n    'DateSeparator' | 'MessageSystem' | 'UnreadMessagesSeparator'\n  >\n> &\n  Pick<\n    VirtualizedMessageListProps<StreamChatGenerics>,\n    VirtualizedMessageListPropsForContext\n  > &\n  Pick<ChatContextValue<StreamChatGenerics>, 'customClasses'> & {\n    /** Latest received message id in the current channel */\n    lastReceivedMessageId: string | null | undefined;\n    /** Object mapping between the message ID and a string representing the position in the group of a sequence of messages posted by the same user. */\n    messageGroupStyles: Record<string, GroupStyle>;\n    /** Number of messages prepended before the first page of messages. This is needed to calculate the virtual position in the virtual list. */\n    numItemsPrepended: number;\n    /** Mapping of message ID of own messages to the array of users, who read the given message */\n    ownMessagesReadByOthers: Record<string, UserResponse<StreamChatGenerics>[]>;\n    /** The original message list enriched with date separators, omitted deleted messages or giphy previews. */\n    processedMessages: StreamMessage<StreamChatGenerics>[];\n    /** Instance of VirtuosoHandle object providing the API to navigate in the virtualized list by various scroll actions. */\n    virtuosoRef: RefObject<VirtuosoHandle | null>;\n    /** Message id which was marked as unread. ALl the messages following this message are considered unrea.  */\n    firstUnreadMessageId?: string;\n    lastReadDate?: Date;\n    /**\n     * The ID of the last message considered read by the current user in the current channel.\n     * All the messages following this message are considered unread.\n     */\n    lastReadMessageId?: string;\n    /** The number of unread messages in the current channel. */\n    unreadMessageCount?: number;\n  };\n\ntype VirtualizedMessageListWithContextProps<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = VirtualizedMessageListProps<StreamChatGenerics> & {\n  channel: Channel<StreamChatGenerics>;\n  hasMore: boolean;\n  hasMoreNewer: boolean;\n  jumpToLatestMessage: () => Promise<void>;\n  loadingMore: boolean;\n  loadingMoreNewer: boolean;\n  notifications: ChannelNotifications;\n  read?: StreamChannelState<StreamChatGenerics>['read'];\n};\n\nfunction captureResizeObserverExceededError(e: ErrorEvent) {\n  if (\n    e.message === 'ResizeObserver loop completed with undelivered notifications.' ||\n    e.message === 'ResizeObserver loop limit exceeded'\n  ) {\n    e.stopImmediatePropagation();\n  }\n}\n\nfunction useCaptureResizeObserverExceededError() {\n  useEffect(() => {\n    window.addEventListener('error', captureResizeObserverExceededError);\n    return () => {\n      window.removeEventListener('error', captureResizeObserverExceededError);\n    };\n  }, []);\n}\n\nfunction fractionalItemSize(element: HTMLElement) {\n  return element.getBoundingClientRect().height;\n}\n\nfunction findMessageIndex(messages: Array<{ id: string }>, id: string) {\n  return messages.findIndex((message) => message.id === id);\n}\n\nfunction calculateInitialTopMostItemIndex(\n  messages: Array<{ id: string }>,\n  highlightedMessageId: string | undefined,\n) {\n  if (highlightedMessageId) {\n    const index = findMessageIndex(messages, highlightedMessageId);\n    if (index !== -1) {\n      return { align: 'center', index } as const;\n    }\n  }\n  return messages.length - 1;\n}\n\nconst VirtualizedMessageListWithContext = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  props: VirtualizedMessageListWithContextProps<StreamChatGenerics>,\n) => {\n  const {\n    additionalMessageInputProps,\n    additionalVirtuosoProps = {},\n    channel,\n    channelUnreadUiState,\n    closeReactionSelectorOnClick,\n    customMessageActions,\n    customMessageRenderer,\n    defaultItemHeight,\n    disableDateSeparator = true,\n    formatDate,\n    groupStyles,\n    hasMoreNewer,\n    head,\n    hideDeletedMessages = false,\n    hideNewMessageSeparator = false,\n    highlightedMessageId,\n    jumpToLatestMessage,\n    loadingMore,\n    loadMore,\n    loadMoreNewer,\n    maxTimeBetweenGroupedMessages,\n    Message: MessageUIComponentFromProps,\n    messageActions,\n    messageLimit = DEFAULT_NEXT_CHANNEL_PAGE_SIZE,\n    messages,\n    notifications,\n    openThread,\n    // TODO: refactor to scrollSeekPlaceHolderConfiguration and components.ScrollSeekPlaceholder, like the Virtuoso Component\n    overscan = 0,\n    reactionDetailsSort,\n    read,\n    returnAllReadData = false,\n    reviewProcessedMessage,\n    scrollSeekPlaceHolder,\n    scrollToLatestMessageOnFocus = false,\n    separateGiphyPreview = false,\n    shouldGroupByUser = false,\n    showUnreadNotificationAlways,\n    sortReactionDetails,\n    sortReactions,\n    stickToBottomScrollBehavior = 'smooth',\n    suppressAutoscroll,\n    threadList,\n  } = props;\n\n  const { components: virtuosoComponentsFromProps, ...overridingVirtuosoProps } =\n    additionalVirtuosoProps;\n\n  // Stops errors generated from react-virtuoso to bubble up\n  // to Sentry or other tracking tools.\n  useCaptureResizeObserverExceededError();\n\n  const {\n    DateSeparator = DefaultDateSeparator,\n    GiphyPreviewMessage = DefaultGiphyPreviewMessage,\n    MessageListMainPanel = DefaultMessageListMainPanel,\n    MessageListNotifications = DefaultMessageListNotifications,\n    MessageNotification = DefaultMessageNotification,\n    MessageSystem = DefaultMessageSystem,\n    TypingIndicator,\n    UnreadMessagesNotification = DefaultUnreadMessagesNotification,\n    UnreadMessagesSeparator = DefaultUnreadMessagesSeparator,\n    VirtualMessage: MessageUIComponentFromContext = MessageSimple,\n  } = useComponentContext<StreamChatGenerics>('VirtualizedMessageList');\n  const MessageUIComponent = MessageUIComponentFromProps || MessageUIComponentFromContext;\n\n  const { client, customClasses } = useChatContext<StreamChatGenerics>(\n    'VirtualizedMessageList',\n  );\n\n  const virtuoso = useRef<VirtuosoHandle>(null);\n\n  const lastRead = useMemo(() => channel.lastRead?.(), [channel]);\n\n  const { show: showUnreadMessagesNotification, toggleShowUnreadMessagesNotification } =\n    useUnreadMessagesNotificationVirtualized({\n      lastRead: channelUnreadUiState?.last_read,\n      showAlways: !!showUnreadNotificationAlways,\n      unreadCount: channelUnreadUiState?.unread_messages ?? 0,\n    });\n\n  const { giphyPreviewMessage, setGiphyPreviewMessage } =\n    useGiphyPreview<StreamChatGenerics>(separateGiphyPreview);\n\n  const processedMessages = useMemo(() => {\n    if (typeof messages === 'undefined') {\n      return [];\n    }\n\n    if (\n      disableDateSeparator &&\n      !hideDeletedMessages &&\n      hideNewMessageSeparator &&\n      !separateGiphyPreview\n    ) {\n      return messages;\n    }\n\n    return processMessages<StreamChatGenerics>({\n      enableDateSeparator: !disableDateSeparator,\n      hideDeletedMessages,\n      hideNewMessageSeparator,\n      lastRead,\n      messages,\n      reviewProcessedMessage,\n      setGiphyPreviewMessage,\n      userId: client.userID || '',\n    });\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [\n    disableDateSeparator,\n    hideDeletedMessages,\n    hideNewMessageSeparator,\n    lastRead,\n    messages,\n    messages?.length,\n    client.userID,\n  ]);\n\n  // get the mapping of own messages to array of users who read them\n  const ownMessagesReadByOthers = useLastReadData({\n    messages: processedMessages,\n    read,\n    returnAllReadData,\n    userID: client.userID,\n  });\n\n  const lastReceivedMessageId = useMemo(\n    () => getLastReceived(processedMessages),\n    [processedMessages],\n  );\n\n  const groupStylesFn = groupStyles || getGroupStyles;\n  const messageGroupStyles = useMemo(\n    () =>\n      processedMessages.reduce<Record<string, GroupStyle>>((acc, message, i) => {\n        const style = groupStylesFn(\n          message,\n          processedMessages[i - 1],\n          processedMessages[i + 1],\n          !shouldGroupByUser,\n          maxTimeBetweenGroupedMessages,\n        );\n        if (style) acc[message.id] = style;\n        return acc;\n      }, {}),\n    // processedMessages were incorrectly rebuilt with a new object identity at some point, hence the .length usage\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    [\n      maxTimeBetweenGroupedMessages,\n      processedMessages.length,\n      shouldGroupByUser,\n      groupStylesFn,\n    ],\n  );\n\n  const {\n    atBottom,\n    isMessageListScrolledToBottom,\n    newMessagesNotification,\n    setIsMessageListScrolledToBottom,\n    setNewMessagesNotification,\n  } = useNewMessageNotification(processedMessages, client.userID, hasMoreNewer);\n\n  useMarkRead({\n    isMessageListScrolledToBottom,\n    messageListIsThread: !!threadList,\n    wasMarkedUnread: !!channelUnreadUiState?.first_unread_message_id,\n  });\n\n  const scrollToBottom = useCallback(async () => {\n    if (hasMoreNewer) {\n      await jumpToLatestMessage();\n      return;\n    }\n\n    if (virtuoso.current) {\n      virtuoso.current.scrollToIndex(processedMessages.length - 1);\n    }\n\n    setNewMessagesNotification(false);\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [\n    virtuoso,\n    processedMessages,\n    setNewMessagesNotification,\n    // processedMessages were incorrectly rebuilt with a new object identity at some point, hence the .length usage\n    processedMessages.length,\n    hasMoreNewer,\n    jumpToLatestMessage,\n  ]);\n\n  useScrollToBottomOnNewMessage({\n    messages,\n    scrollToBottom,\n    scrollToLatestMessageOnFocus,\n  });\n\n  const numItemsPrepended = usePrependedMessagesCount(\n    processedMessages,\n    !disableDateSeparator,\n  );\n\n  const { messageSetKey } = useMessageSetKey({ messages });\n\n  const shouldForceScrollToBottom = useShouldForceScrollToBottom(\n    processedMessages,\n    client.userID,\n  );\n\n  const handleItemsRendered = useMemo(\n    () =>\n      makeItemsRenderedHandler([toggleShowUnreadMessagesNotification], processedMessages),\n    [processedMessages, toggleShowUnreadMessagesNotification],\n  );\n  const followOutput = (isAtBottom: boolean) => {\n    if (hasMoreNewer || suppressAutoscroll) {\n      return false;\n    }\n\n    if (shouldForceScrollToBottom()) {\n      return isAtBottom ? stickToBottomScrollBehavior : 'auto';\n    }\n    // a message from another user has been received - don't scroll to bottom unless already there\n    return isAtBottom ? stickToBottomScrollBehavior : false;\n  };\n\n  const computeItemKey = useCallback<\n    ComputeItemKey<UnknownType, VirtuosoContext<StreamChatGenerics>>\n  >(\n    (index, _, { numItemsPrepended, processedMessages }) =>\n      processedMessages[calculateItemIndex(index, numItemsPrepended)].id,\n    [],\n  );\n\n  const atBottomStateChange = (isAtBottom: boolean) => {\n    atBottom.current = isAtBottom;\n    setIsMessageListScrolledToBottom(isAtBottom);\n\n    if (isAtBottom) {\n      loadMoreNewer?.(messageLimit);\n      setNewMessagesNotification?.(false);\n    }\n  };\n  const atTopStateChange = (isAtTop: boolean) => {\n    if (isAtTop) {\n      loadMore?.(messageLimit);\n    }\n  };\n\n  useEffect(() => {\n    let scrollTimeout: ReturnType<typeof setTimeout>;\n    if (highlightedMessageId) {\n      const index = findMessageIndex(processedMessages, highlightedMessageId);\n      if (index !== -1) {\n        scrollTimeout = setTimeout(() => {\n          virtuoso.current?.scrollToIndex({ align: 'center', index });\n        }, 0);\n      }\n    }\n    return () => {\n      clearTimeout(scrollTimeout);\n    };\n  }, [highlightedMessageId, processedMessages]);\n\n  if (!processedMessages) return null;\n\n  const dialogManagerId = threadList\n    ? 'virtualized-message-list-dialog-manager-thread'\n    : 'virtualized-message-list-dialog-manager';\n\n  return (\n    <VirtualizedMessageListContextProvider value={{ scrollToBottom }}>\n      <MessageListMainPanel>\n        <DialogManagerProvider id={dialogManagerId}>\n          {!threadList && showUnreadMessagesNotification && (\n            <UnreadMessagesNotification\n              unreadCount={channelUnreadUiState?.unread_messages}\n            />\n          )}\n          <div\n            className={customClasses?.virtualizedMessageList || 'str-chat__virtual-list'}\n          >\n            <Virtuoso<UnknownType, VirtuosoContext<StreamChatGenerics>>\n              atBottomStateChange={atBottomStateChange}\n              atBottomThreshold={100}\n              atTopStateChange={atTopStateChange}\n              atTopThreshold={100}\n              className='str-chat__message-list-scroll'\n              components={{\n                EmptyPlaceholder,\n                Header,\n                Item,\n                ...virtuosoComponentsFromProps,\n              }}\n              computeItemKey={computeItemKey}\n              context={{\n                additionalMessageInputProps,\n                closeReactionSelectorOnClick,\n                customClasses,\n                customMessageActions,\n                customMessageRenderer,\n                DateSeparator,\n                firstUnreadMessageId: channelUnreadUiState?.first_unread_message_id,\n                formatDate,\n                head,\n                lastReadDate: channelUnreadUiState?.last_read,\n                lastReadMessageId: channelUnreadUiState?.last_read_message_id,\n                lastReceivedMessageId,\n                loadingMore,\n                Message: MessageUIComponent,\n                messageActions,\n                messageGroupStyles,\n                MessageSystem,\n                numItemsPrepended,\n                openThread,\n                ownMessagesReadByOthers,\n                processedMessages,\n                reactionDetailsSort,\n                shouldGroupByUser,\n                sortReactionDetails,\n                sortReactions,\n                threadList,\n                unreadMessageCount: channelUnreadUiState?.unread_messages,\n                UnreadMessagesSeparator,\n                virtuosoRef: virtuoso,\n              }}\n              firstItemIndex={calculateFirstItemIndex(numItemsPrepended)}\n              followOutput={followOutput}\n              increaseViewportBy={{ bottom: 200, top: 0 }}\n              initialTopMostItemIndex={calculateInitialTopMostItemIndex(\n                processedMessages,\n                highlightedMessageId,\n              )}\n              itemContent={messageRenderer}\n              itemSize={fractionalItemSize}\n              itemsRendered={handleItemsRendered}\n              key={messageSetKey}\n              overscan={overscan}\n              ref={virtuoso}\n              style={{ overflowX: 'hidden' }}\n              totalCount={processedMessages.length}\n              {...overridingVirtuosoProps}\n              {...(scrollSeekPlaceHolder ? { scrollSeek: scrollSeekPlaceHolder } : {})}\n              {...(defaultItemHeight ? { defaultItemHeight } : {})}\n            />\n          </div>\n        </DialogManagerProvider>\n        {TypingIndicator && <TypingIndicator />}\n      </MessageListMainPanel>\n      <MessageListNotifications\n        hasNewMessages={newMessagesNotification}\n        isMessageListScrolledToBottom={isMessageListScrolledToBottom}\n        isNotAtLatestMessageSet={hasMoreNewer}\n        MessageNotification={MessageNotification}\n        notifications={notifications}\n        scrollToBottom={scrollToBottom}\n        threadList={threadList}\n        unreadCount={threadList ? undefined : channelUnreadUiState?.unread_messages}\n      />\n      {giphyPreviewMessage && <GiphyPreviewMessage message={giphyPreviewMessage} />}\n    </VirtualizedMessageListContextProvider>\n  );\n};\n\nexport type VirtualizedMessageListProps<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Partial<Pick<MessageProps<StreamChatGenerics>, PropsDrilledToMessage>> & {\n  /** Additional props to be passed the underlying [`react-virtuoso` virtualized list dependency](https://virtuoso.dev/virtuoso-api-reference/) */\n  additionalVirtuosoProps?: VirtuosoProps<\n    UnknownType,\n    VirtuosoContext<StreamChatGenerics>\n  >;\n  channelUnreadUiState?: ChannelStateContextValue['channelUnreadUiState'];\n  /** If true, picking a reaction from the `ReactionSelector` component will close the selector */\n  closeReactionSelectorOnClick?: boolean;\n  /** Custom render function, if passed, certain UI props are ignored */\n  customMessageRenderer?: (\n    messageList: StreamMessage<StreamChatGenerics>[],\n    index: number,\n  ) => React.ReactElement;\n  /** @deprecated Use additionalVirtuosoProps.defaultItemHeight instead. Will be removed with next major release - `v11.0.0`.\n   * If set, the default item height is used for the calculation of the total list height. Use if you expect messages with a lot of height variance\n   * */\n  defaultItemHeight?: number;\n  /** Disables the injection of date separator components in MessageList, defaults to `true` */\n  disableDateSeparator?: boolean;\n  /** Callback function to set group styles for each message */\n  groupStyles?: (\n    message: StreamMessage<StreamChatGenerics>,\n    previousMessage: StreamMessage<StreamChatGenerics>,\n    nextMessage: StreamMessage<StreamChatGenerics>,\n    noGroupByUser: boolean,\n    maxTimeBetweenGroupedMessages?: number,\n  ) => GroupStyle;\n  /** Whether or not the list has more items to load */\n  hasMore?: boolean;\n  /** Whether or not the list has newer items to load */\n  hasMoreNewer?: boolean;\n  /**\n   * @deprecated Use additionalVirtuosoProps.components.Header to override default component rendered above the list ove messages.\n   * Element to be rendered at the top of the thread message list. By default, these are the Message and ThreadStart components\n   */\n  head?: React.ReactElement;\n  /** Hides the `MessageDeleted` components from the list, defaults to `false` */\n  hideDeletedMessages?: boolean;\n  /** Hides the `DateSeparator` component when new messages are received in a channel that's watched but not active, defaults to false */\n  hideNewMessageSeparator?: boolean;\n  /** The id of the message to highlight and center */\n  highlightedMessageId?: string;\n  /** Whether or not the list is currently loading more items */\n  loadingMore?: boolean;\n  /** Whether or not the list is currently loading newer items */\n  loadingMoreNewer?: boolean;\n  /** Function called when more messages are to be loaded, defaults to function stored in [ChannelActionContext](https://getstream.io/chat/docs/sdk/react/contexts/channel_action_context/) */\n  loadMore?: ChannelActionContextValue['loadMore'] | (() => Promise<void>);\n  /** Function called when new messages are to be loaded, defaults to function stored in [ChannelActionContext](https://getstream.io/chat/docs/sdk/react/contexts/channel_action_context/) */\n  loadMoreNewer?: ChannelActionContextValue['loadMore'] | (() => Promise<void>);\n  /** Maximum time in milliseconds that should occur between messages to still consider them grouped together */\n  maxTimeBetweenGroupedMessages?: number;\n  /** Custom UI component to display a message, defaults to and accepts same props as [MessageSimple](https://github.com/GetStream/stream-chat-react/blob/master/src/components/Message/MessageSimple.tsx) */\n  Message?: React.ComponentType<MessageUIComponentProps<StreamChatGenerics>>;\n  /** The limit to use when paginating messages */\n  messageLimit?: number;\n  /** Optional prop to override the messages available from [ChannelStateContext](https://getstream.io/chat/docs/sdk/react/contexts/channel_state_context/) */\n  messages?: StreamMessage<StreamChatGenerics>[];\n  /**\n   * @deprecated Use additionalVirtuosoProps.overscan instead. Will be removed with next major release - `v11.0.0`.\n   * The amount of extra content the list should render in addition to what's necessary to fill in the viewport\n   */\n  overscan?: number;\n  /** Keep track of read receipts for each message sent by the user. When disabled, only the last own message delivery / read status is rendered. */\n  returnAllReadData?: boolean;\n  /**\n   * Allows to review changes introduced to messages array on per message basis (e.g. date separator injected before a message).\n   * The array returned from the function is appended to the array of messages that are later rendered into React elements in the `VirtualizedMessageList`.\n   */\n  reviewProcessedMessage?: ProcessMessagesParams<StreamChatGenerics>['reviewProcessedMessage'];\n  /**\n   * @deprecated Pass additionalVirtuosoProps.scrollSeekConfiguration and specify the placeholder in additionalVirtuosoProps.components.ScrollSeekPlaceholder instead.  Will be removed with next major release - `v11.0.0`.\n   * Performance improvement by showing placeholders if user scrolls fast through list.\n   * it can be used like this:\n   * ```\n   *  {\n   *    enter: (velocity) => Math.abs(velocity) > 120,\n   *    exit: (velocity) => Math.abs(velocity) < 40,\n   *    change: () => null,\n   *    placeholder: ({index, height})=> <div style={{height: height + \"px\"}}>{index}</div>,\n   *  }\n   *  ```\n   */\n  scrollSeekPlaceHolder?: ScrollSeekConfiguration & {\n    placeholder: React.ComponentType<ScrollSeekPlaceholderProps>;\n  };\n  /** When `true`, the list will scroll to the latest message when the window regains focus */\n  scrollToLatestMessageOnFocus?: boolean;\n  /** If true, the Giphy preview will render as a separate component above the `MessageInput`, rather than inline with the other messages in the list */\n  separateGiphyPreview?: boolean;\n  /** If true, group messages belonging to the same user, otherwise show each message individually */\n  shouldGroupByUser?: boolean;\n  /**\n   * The floating notification informing about unread messages will be shown when the\n   * UnreadMessagesSeparator is not visible. The default is false, that means the notification\n   * is shown only when viewing unread messages.\n   */\n  showUnreadNotificationAlways?: boolean;\n  /** The scrollTo behavior when new messages appear. Use `\"smooth\"` for regular chat channels, and `\"auto\"` (which results in instant scroll to bottom) if you expect high throughput. */\n  stickToBottomScrollBehavior?: 'smooth' | 'auto';\n  /** stops the list from autoscrolling when new messages are loaded */\n  suppressAutoscroll?: boolean;\n  /** If true, indicates the message list is a thread  */\n  threadList?: boolean;\n};\n\n/**\n * The VirtualizedMessageList component renders a list of messages in a virtualized list.\n * It is a consumer of the React contexts set in [Channel](https://github.com/GetStream/stream-chat-react/blob/master/src/components/Channel/Channel.tsx).\n */\nexport function VirtualizedMessageList<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(props: VirtualizedMessageListProps<StreamChatGenerics>) {\n  const { jumpToLatestMessage, loadMore, loadMoreNewer } =\n    useChannelActionContext<StreamChatGenerics>('VirtualizedMessageList');\n  const {\n    channel,\n    channelUnreadUiState,\n    hasMore,\n    hasMoreNewer,\n    highlightedMessageId,\n    loadingMore,\n    loadingMoreNewer,\n    messages: contextMessages,\n    notifications,\n    read,\n    suppressAutoscroll,\n  } = useChannelStateContext<StreamChatGenerics>('VirtualizedMessageList');\n\n  const messages = props.messages || contextMessages;\n\n  return (\n    <VirtualizedMessageListWithContext\n      channel={channel}\n      channelUnreadUiState={props.channelUnreadUiState ?? channelUnreadUiState}\n      hasMore={!!hasMore}\n      hasMoreNewer={!!hasMoreNewer}\n      highlightedMessageId={highlightedMessageId}\n      jumpToLatestMessage={jumpToLatestMessage}\n      loadingMore={!!loadingMore}\n      loadingMoreNewer={!!loadingMoreNewer}\n      loadMore={loadMore}\n      loadMoreNewer={loadMoreNewer}\n      messages={messages}\n      notifications={notifications}\n      read={read}\n      suppressAutoscroll={suppressAutoscroll}\n      {...props}\n    />\n  );\n}\n", "import { useEffect, useRef, useState } from 'react';\n\nimport type { StreamMessage } from '../../../../context/ChannelStateContext';\n\nimport type { DefaultStreamChatGenerics } from '../../../../types/types';\n\nexport function useNewMessageNotification<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  messages: StreamMessage<StreamChatGenerics>[],\n  currentUserId: string | undefined,\n  hasMoreNewer?: boolean,\n) {\n  const [newMessagesNotification, setNewMessagesNotification] = useState(false);\n  const [isMessageListScrolledToBottom, setIsMessageListScrolledToBottom] =\n    useState(true);\n  /**\n   * use the flag to avoid the initial \"new messages\" quick blink\n   */\n  const didMount = useRef(false);\n\n  const lastMessageId = useRef('');\n  const atBottom = useRef(false);\n\n  useEffect(() => {\n    if (hasMoreNewer) {\n      setNewMessagesNotification(true);\n      return;\n    }\n    /* handle scrolling behavior for new messages */\n    if (!messages?.length) return;\n\n    const lastMessage = messages[messages.length - 1];\n    const prevMessageId = lastMessageId.current;\n    lastMessageId.current = lastMessage.id || ''; // update last message id\n\n    /* do nothing if new messages are loaded from top(loadMore)  */\n    if (lastMessage.id === prevMessageId) return;\n\n    /* if list is already at the bottom return, followOutput will do the job */\n    if (atBottom.current) return;\n\n    /* if the new message belongs to current user scroll to bottom */\n    if (lastMessage.user?.id !== currentUserId && didMount.current) {\n      /* otherwise just show newMessage notification  */\n      setNewMessagesNotification(true);\n    }\n    didMount.current = true;\n  }, [currentUserId, messages, hasMoreNewer]);\n\n  return {\n    atBottom,\n    isMessageListScrolledToBottom,\n    newMessagesNotification,\n    setIsMessageListScrolledToBottom,\n    setNewMessagesNotification,\n  };\n}\n", "import { useMemo, useRef } from 'react';\n\nimport type { StreamMessage } from '../../../../context/ChannelStateContext';\n\nimport type { DefaultStreamChatGenerics } from '../../../../types/types';\n\nconst STATUSES_EXCLUDED_FROM_PREPEND = {\n  failed: true,\n  sending: true,\n} as const as Record<string, boolean>;\n\nexport function usePrependedMessagesCount<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(messages: StreamMessage<StreamChatGenerics>[], hasDateSeparator: boolean) {\n  const firstRealMessageIndex = hasDateSeparator ? 1 : 0;\n  const firstMessageOnFirstLoadedPage =\n    useRef<StreamMessage<StreamChatGenerics>>(undefined);\n  const previousFirstMessageOnFirstLoadedPage =\n    useRef<StreamMessage<StreamChatGenerics>>(undefined);\n  const previousNumItemsPrepended = useRef(0);\n\n  const numItemsPrepended = useMemo(() => {\n    if (!messages || !messages.length) {\n      previousNumItemsPrepended.current = 0;\n      return 0;\n    }\n\n    const currentFirstMessage = messages?.[firstRealMessageIndex];\n\n    const noNewMessages =\n      currentFirstMessage?.id === previousFirstMessageOnFirstLoadedPage.current?.id;\n\n    // This is possible only, when sending messages very quickly (basically single char messages submitted like a crazy) in empty channel (first page)\n    // Optimistic UI update, when sending messages, can lead to a situation, when\n    // the order of the messages changes for a moment. This can happen, when a user\n    // sends multiple messages withing few milliseconds. E.g. we send a message A\n    // then message B. At first we have message array with both messages of status \"sending\"\n    // then response for message A is received with a new - later - created_at timestamp\n    // this leads to rearrangement of 1.B (\"sending\"), 2.A (\"received\"). Still firstMessageOnFirstLoadedPage.current\n    // points to message A, but now this message has index 1 => previousNumItemsPrepended.current === 1\n    // That in turn leads to incorrect index calculation in VirtualizedMessageList trying to access a message\n    // at non-existent index. Therefore, we ignore messages of status \"sending\" / \"failed\" in order they are\n    // not considered as prepended messages.\n    const firstMsgMovedAfterMessagesInExcludedStatus = !!(\n      currentFirstMessage?.status &&\n      STATUSES_EXCLUDED_FROM_PREPEND[currentFirstMessage.status]\n    );\n\n    if (noNewMessages || firstMsgMovedAfterMessagesInExcludedStatus) {\n      return previousNumItemsPrepended.current;\n    }\n\n    if (!firstMessageOnFirstLoadedPage.current) {\n      firstMessageOnFirstLoadedPage.current = currentFirstMessage;\n    }\n    previousFirstMessageOnFirstLoadedPage.current = currentFirstMessage;\n    // if new messages were prepended, find out how many\n    // start with this number because there cannot be fewer prepended items than before\n    for (\n      let prependedMessageCount = previousNumItemsPrepended.current;\n      prependedMessageCount < messages.length;\n      prependedMessageCount += 1\n    ) {\n      const messageIsFirstOnFirstLoadedPage =\n        messages[prependedMessageCount].id === firstMessageOnFirstLoadedPage.current?.id;\n\n      if (messageIsFirstOnFirstLoadedPage) {\n        previousNumItemsPrepended.current = prependedMessageCount - firstRealMessageIndex;\n        return previousNumItemsPrepended.current;\n      }\n    }\n\n    // if no match has found, we have jumped - reset the prepended item count.\n    firstMessageOnFirstLoadedPage.current = currentFirstMessage;\n    previousNumItemsPrepended.current = 0;\n    return 0;\n    // TODO: there's a bug here, the messages prop is the same array instance (something mutates it)\n    // that's why the second dependency is necessary\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [firstRealMessageIndex, messages, messages?.length]);\n\n  return numItemsPrepended;\n}\n", "import { useEffect, useRef } from 'react';\n\nimport type { StreamMessage } from '../../../../context/ChannelStateContext';\n\nimport type { DefaultStreamChatGenerics } from '../../../../types/types';\n\nexport function useShouldForceScrollToBottom<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(messages: StreamMessage<StreamChatGenerics>[], currentUserId?: string) {\n  const lastFocusedOwnMessage = useRef('');\n  const initialFocusRegistered = useRef(false);\n\n  function recheckForNewOwnMessage() {\n    if (messages && messages.length > 0) {\n      const lastMessage = messages[messages.length - 1];\n\n      if (\n        lastMessage.user?.id === currentUserId &&\n        lastFocusedOwnMessage.current !== lastMessage.id\n      ) {\n        lastFocusedOwnMessage.current = lastMessage.id;\n        return true;\n      }\n    }\n    return false;\n  }\n\n  useEffect(() => {\n    if (messages && messages.length && !initialFocusRegistered.current) {\n      initialFocusRegistered.current = true;\n      recheckForNewOwnMessage();\n    }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [messages, messages?.length]);\n\n  return recheckForNewOwnMessage;\n}\n", "import { useEffect, useState } from 'react';\n\nimport { useChatContext } from '../../../../context/ChatContext';\n\nimport type { EventHandler } from 'stream-chat';\n\nimport type { StreamMessage } from '../../../../context/ChannelStateContext';\n\nimport type { DefaultStreamChatGenerics } from '../../../../types/types';\n\nexport const useGiphyPreview = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  separateGiphyPreview: boolean,\n) => {\n  const [giphyPreviewMessage, setGiphyPreviewMessage] =\n    useState<StreamMessage<StreamChatGenerics>>();\n\n  const { client } = useChatContext<StreamChatGenerics>('useGiphyPreview');\n\n  useEffect(() => {\n    const handleEvent: EventHandler<StreamChatGenerics> = (event) => {\n      const { message, user } = event;\n\n      if (message?.command === 'giphy' && user?.id === client.userID) {\n        setGiphyPreviewMessage(undefined);\n      }\n    };\n\n    if (separateGiphyPreview) client.on('message.new', handleEvent);\n    return () => client.off('message.new', handleEvent);\n  }, [client, separateGiphyPreview]);\n\n  return {\n    giphyPreviewMessage,\n    setGiphyPreviewMessage: separateGiphyPreview ? setGiphyPreviewMessage : undefined,\n  };\n};\n", "import { useEffect, useRef, useState } from 'react';\nimport { StreamMessage } from '../../../../context';\nimport { DefaultStreamChatGenerics } from '../../../../types/types';\n\ntype UseMessageSetKeyParams<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n  messages?: StreamMessage<StreamChatGenerics>[];\n};\n\nexport const useMessageSetKey = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n  messages,\n}: UseMessageSetKeyParams<StreamChatGenerics>) => {\n  /**\n   * Logic to update the key of the virtuoso component when the list jumps to a new location.\n   */\n  const [messageSetKey, setMessageSetKey] = useState(+new Date());\n  const firstMessageId = useRef<string | undefined>(undefined);\n\n  useEffect(() => {\n    const continuousSet = messages?.find(\n      (message) => message.id === firstMessageId.current,\n    );\n    if (!continuousSet) {\n      setMessageSetKey(+new Date());\n    }\n    firstMessageId.current = messages?.[0]?.id;\n  }, [messages]);\n\n  return {\n    messageSetKey,\n  };\n};\n", "import { useEffect, useRef, useState } from 'react';\nimport { StreamMessage } from '../../../../context';\nimport { DefaultStreamChatGenerics } from '../../../../types/types';\n\ntype UseScrollToBottomOnNewMessageParams<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n  scrollToBottom: () => void;\n  messages?: StreamMessage<StreamChatGenerics>[];\n  /** When `true`, the list will scroll to the latest message when the window regains focus */\n  scrollToLatestMessageOnFocus?: boolean;\n};\n\nexport const useScrollToBottomOnNewMessage = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n  messages,\n  scrollToBottom,\n  scrollToLatestMessageOnFocus,\n}: UseScrollToBottomOnNewMessageParams<StreamChatGenerics>) => {\n  const [newMessagesReceivedInBackground, setNewMessagesReceivedInBackground] =\n    useState(false);\n\n  const scrollToBottomIfConfigured = useRef<(e: Event) => void>(undefined);\n\n  scrollToBottomIfConfigured.current = (event: Event) => {\n    if (\n      !scrollToLatestMessageOnFocus ||\n      !newMessagesReceivedInBackground ||\n      event.target !== window\n    ) {\n      return;\n    }\n\n    setTimeout(scrollToBottom, 100);\n  };\n\n  useEffect(() => {\n    setNewMessagesReceivedInBackground(true);\n  }, [messages]);\n\n  useEffect(() => {\n    const handleFocus = (event: Event) => {\n      scrollToBottomIfConfigured.current?.(event);\n    };\n\n    const handleBlur = () => {\n      setNewMessagesReceivedInBackground(false);\n    };\n\n    if (typeof window !== 'undefined') {\n      window.addEventListener('focus', handleFocus);\n      window.addEventListener('blur', handleBlur);\n    }\n\n    return () => {\n      window.removeEventListener('focus', handleFocus);\n      window.removeEventListener('blur', handleBlur);\n    };\n  }, []);\n};\n", "import { useCallback, useEffect, useState } from 'react';\nimport { StreamMessage } from '../../../../context';\nimport type { DefaultStreamChatGenerics } from '../../../../types/types';\n\nexport type UseUnreadMessagesNotificationParams = {\n  showAlways: boolean;\n  unreadCount: number;\n  lastRead?: Date | null;\n};\n\n/**\n * Controls the logic when an `UnreadMessagesNotification` component should be shown.\n * In virtualized message list there is no notion of being scrolled below or above `UnreadMessagesSeparator`.\n * Therefore, the `UnreadMessagesNotification` component is rendered based on timestamps.\n * If the there are unread messages in the channel and the `VirtualizedMessageList` renders\n * messages created later than the last read message in the channel, then the\n * `UnreadMessagesNotification` component is rendered. This is an approximate equivalent to being\n * scrolled below the `UnreadMessagesNotification` component.\n * @param lastRead\n * @param showAlways\n * @param unreadCount\n */\nexport const useUnreadMessagesNotificationVirtualized = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n  lastRead,\n  showAlways,\n  unreadCount,\n}: UseUnreadMessagesNotificationParams) => {\n  const [show, setShow] = useState(false);\n\n  const toggleShowUnreadMessagesNotification = useCallback(\n    (renderedMessages: StreamMessage<StreamChatGenerics>[]) => {\n      if (!unreadCount) return;\n      const firstRenderedMessage = renderedMessages[0];\n      const lastRenderedMessage = renderedMessages.slice(-1)[0];\n      if (!(firstRenderedMessage && lastRenderedMessage)) return;\n      const scrolledBelowSeparator =\n        !!lastRead &&\n        new Date(firstRenderedMessage.created_at as string | Date).getTime() >\n          lastRead.getTime();\n      const scrolledAboveSeparator =\n        !!lastRead &&\n        new Date(lastRenderedMessage.created_at as string | Date).getTime() <\n          lastRead.getTime();\n\n      setShow(\n        showAlways\n          ? scrolledBelowSeparator || scrolledAboveSeparator\n          : scrolledBelowSeparator,\n      );\n    },\n    [lastRead, showAlways, unreadCount],\n  );\n\n  useEffect(() => {\n    if (!unreadCount) setShow(false);\n  }, [unreadCount]);\n\n  return { show, toggleShowUnreadMessagesNotification };\n};\n", "import clsx from 'clsx';\nimport throttle from 'lodash.throttle';\nimport React from 'react';\nimport { ItemProps, ListItem } from 'react-virtuoso';\n\nimport { EmptyStateIndicator as DefaultEmptyStateIndicator } from '../EmptyStateIndicator';\nimport { LoadingIndicator as DefaultLoadingIndicator } from '../Loading';\nimport { isMessageEdited, Message } from '../Message';\n\nimport { StreamMessage, useComponentContext } from '../../context';\nimport { getIsFirstUnreadMessage, isDateSeparatorMessage } from './utils';\n\nimport type { GroupStyle } from './utils';\nimport type { VirtuosoContext } from './VirtualizedMessageList';\nimport type { DefaultStreamChatGenerics, UnknownType } from '../../types/types';\n\nconst PREPEND_OFFSET = 10 ** 7;\n\nexport function calculateItemIndex(virtuosoIndex: number, numItemsPrepended: number) {\n  return virtuosoIndex + numItemsPrepended - PREPEND_OFFSET;\n}\n\nexport function calculateFirstItemIndex(numItemsPrepended: number) {\n  return PREPEND_OFFSET - numItemsPrepended;\n}\n\nexport const makeItemsRenderedHandler = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  renderedItemsActions: Array<(msg: StreamMessage<StreamChatGenerics>[]) => void>,\n  processedMessages: StreamMessage<StreamChatGenerics>[],\n) =>\n  throttle((items: ListItem<UnknownType>[]) => {\n    const renderedMessages = items\n      .map((item) => {\n        if (!item.originalIndex) return undefined;\n        return processedMessages[calculateItemIndex(item.originalIndex, PREPEND_OFFSET)];\n      })\n      .filter((msg) => !!msg);\n    renderedItemsActions.forEach((action) =>\n      action(renderedMessages as StreamMessage<StreamChatGenerics>[]),\n    );\n  }, 200);\n\ntype CommonVirtuosoComponentProps<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n  context?: VirtuosoContext<StreamChatGenerics>;\n};\n// using 'display: inline-block'\n// traps CSS margins of the item elements, preventing incorrect item measurements\nexport const Item = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n  context,\n  ...props\n}: ItemProps & CommonVirtuosoComponentProps<StreamChatGenerics>) => {\n  if (!context) return <></>;\n\n  const message =\n    context.processedMessages[\n      calculateItemIndex(props['data-item-index'], context.numItemsPrepended)\n    ];\n  const groupStyles: GroupStyle = context.messageGroupStyles[message.id];\n\n  return (\n    <div\n      {...props}\n      className={\n        context?.customClasses?.virtualMessage ||\n        clsx('str-chat__virtual-list-message-wrapper str-chat__li', {\n          [`str-chat__li--${groupStyles}`]: groupStyles,\n        })\n      }\n    />\n  );\n};\nexport const Header = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n  context,\n}: CommonVirtuosoComponentProps<StreamChatGenerics>) => {\n  const { LoadingIndicator = DefaultLoadingIndicator } =\n    useComponentContext<StreamChatGenerics>('VirtualizedMessageListHeader');\n\n  return (\n    <>\n      {context?.head}\n      {context?.loadingMore && LoadingIndicator && (\n        <div className='str-chat__virtual-list__loading'>\n          <LoadingIndicator size={20} />\n        </div>\n      )}\n    </>\n  );\n};\nexport const EmptyPlaceholder = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n  context,\n}: CommonVirtuosoComponentProps<StreamChatGenerics>) => {\n  const { EmptyStateIndicator = DefaultEmptyStateIndicator } =\n    useComponentContext<StreamChatGenerics>('VirtualizedMessageList');\n  return (\n    <>\n      {EmptyStateIndicator && (\n        <EmptyStateIndicator listType={context?.threadList ? 'thread' : 'message'} />\n      )}\n    </>\n  );\n};\n\nexport const messageRenderer = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  virtuosoIndex: number,\n  _data: UnknownType,\n  virtuosoContext: VirtuosoContext<StreamChatGenerics>,\n) => {\n  const {\n    additionalMessageInputProps,\n    closeReactionSelectorOnClick,\n    customMessageActions,\n    customMessageRenderer,\n    DateSeparator,\n    firstUnreadMessageId,\n    formatDate,\n    lastReadDate,\n    lastReadMessageId,\n    lastReceivedMessageId,\n    Message: MessageUIComponent,\n    messageActions,\n    messageGroupStyles,\n    MessageSystem,\n    numItemsPrepended,\n    openThread,\n    ownMessagesReadByOthers,\n    processedMessages: messageList,\n    reactionDetailsSort,\n    shouldGroupByUser,\n    sortReactionDetails,\n    sortReactions,\n    threadList,\n    unreadMessageCount = 0,\n    UnreadMessagesSeparator,\n    virtuosoRef,\n  } = virtuosoContext;\n\n  const streamMessageIndex = calculateItemIndex(virtuosoIndex, numItemsPrepended);\n\n  if (customMessageRenderer) {\n    return customMessageRenderer(messageList, streamMessageIndex);\n  }\n\n  const message = messageList[streamMessageIndex];\n\n  if (!message) return <div style={{ height: '1px' }}></div>; // returning null or zero height breaks the virtuoso\n\n  if (isDateSeparatorMessage(message)) {\n    return DateSeparator ? (\n      <DateSeparator date={message.date} unread={message.unread} />\n    ) : null;\n  }\n\n  if (message.type === 'system') {\n    return MessageSystem ? <MessageSystem message={message} /> : null;\n  }\n\n  const groupedByUser =\n    shouldGroupByUser &&\n    streamMessageIndex > 0 &&\n    message.user?.id === messageList[streamMessageIndex - 1].user?.id;\n  const maybePrevMessage: StreamMessage<StreamChatGenerics> | undefined =\n    messageList[streamMessageIndex - 1];\n  const maybeNextMessage: StreamMessage<StreamChatGenerics> | undefined =\n    messageList[streamMessageIndex + 1];\n\n  // FIXME: firstOfGroup & endOfGroup should be derived from groupStyles which apply a more complex logic\n  const firstOfGroup =\n    shouldGroupByUser &&\n    (message.user?.id !== maybePrevMessage?.user?.id ||\n      (maybePrevMessage && isMessageEdited(maybePrevMessage)));\n\n  const endOfGroup =\n    shouldGroupByUser &&\n    (message.user?.id !== maybeNextMessage?.user?.id || isMessageEdited(message));\n\n  const isFirstUnreadMessage = getIsFirstUnreadMessage({\n    firstUnreadMessageId,\n    isFirstMessage: streamMessageIndex === 0,\n    lastReadDate,\n    lastReadMessageId,\n    message,\n    previousMessage: streamMessageIndex ? messageList[streamMessageIndex - 1] : undefined,\n    unreadMessageCount,\n  });\n\n  return (\n    <>\n      {isFirstUnreadMessage && (\n        <div className='str-chat__unread-messages-separator-wrapper'>\n          <UnreadMessagesSeparator unreadCount={unreadMessageCount} />\n        </div>\n      )}\n      <Message\n        additionalMessageInputProps={additionalMessageInputProps}\n        autoscrollToBottom={virtuosoRef.current?.autoscrollToBottom}\n        closeReactionSelectorOnClick={closeReactionSelectorOnClick}\n        customMessageActions={customMessageActions}\n        endOfGroup={endOfGroup}\n        firstOfGroup={firstOfGroup}\n        formatDate={formatDate}\n        groupedByUser={groupedByUser}\n        groupStyles={[messageGroupStyles[message.id] ?? '']}\n        lastReceivedId={lastReceivedMessageId}\n        message={message}\n        Message={MessageUIComponent}\n        messageActions={messageActions}\n        openThread={openThread}\n        reactionDetailsSort={reactionDetailsSort}\n        readBy={ownMessagesReadByOthers[message.id] || []}\n        sortReactionDetails={sortReactionDetails}\n        sortReactions={sortReactions}\n        threadList={threadList}\n      />\n    </>\n  );\n};\n", "import React, { createContext, PropsWithChildren, useContext } from 'react';\n\nexport type VirtualizedMessageListContextValue = {\n  /** Function that scrolls the list to the bottom. */\n  scrollToBottom: () => void;\n};\n\nexport const VirtualizedMessageListContext = createContext<\n  VirtualizedMessageListContextValue | undefined\n>(undefined);\n\n/**\n * Context provider for components rendered within the `VirtualizedMessageList`\n */\nexport const VirtualizedMessageListContextProvider = ({\n  children,\n  value,\n}: PropsWithChildren<{\n  value: VirtualizedMessageListContextValue;\n}>) => (\n  <VirtualizedMessageListContext.Provider\n    value={value as VirtualizedMessageListContextValue}\n  >\n    {children}\n  </VirtualizedMessageListContext.Provider>\n);\n\nexport const useVirtualizedMessageListContext = () =>\n  useContext(VirtualizedMessageListContext) as VirtualizedMessageListContextValue;\n", "import type { ChatContextValue } from '../../../context/ChatContext';\nimport { useChatContext } from '../../../context/ChatContext';\n\nimport type { DefaultStreamChatGenerics } from '../../../types/types';\n\nexport const useImageFlagEmojisOnWindowsClass = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>() => {\n  const { useImageFlagEmojisOnWindows } = useChatContext<StreamChatGenerics>('Channel');\n  return useImageFlagEmojisOnWindows && navigator.userAgent.match(/Win/)\n    ? 'str-chat--windows-flags'\n    : '';\n};\n\nexport const getChatContainerClass = (customClass?: string) =>\n  customClass ?? 'str-chat__container';\n\nexport const useChannelContainerClasses = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n  customClasses,\n}: Pick<ChatContextValue, 'customClasses'>) => {\n  const windowsEmojiClass = useImageFlagEmojisOnWindowsClass<StreamChatGenerics>();\n  return {\n    channelClass: customClasses?.channel ?? 'str-chat__channel',\n    chatClass: customClasses?.chat ?? 'str-chat',\n    chatContainerClass: getChatContainerClass(customClasses?.chatContainer),\n    windowsEmojiClass,\n  };\n};\n", "import { nanoid } from 'nanoid';\nimport type { Dispatch, SetStateAction } from 'react';\nimport type { ChannelState, MessageResponse } from 'stream-chat';\nimport type { ChannelNotifications } from '../../context/ChannelStateContext';\nimport type { DefaultStreamChatGenerics } from '../../types';\n\nexport const makeAddNotifications =\n  (\n    setNotifications: Dispatch<SetStateAction<ChannelNotifications>>,\n    notificationTimeouts: NodeJS.Timeout[],\n  ) =>\n  (text: string, type: 'success' | 'error') => {\n    if (typeof text !== 'string' || (type !== 'success' && type !== 'error')) {\n      return;\n    }\n\n    const id = nanoid();\n\n    setNotifications((prevNotifications) => [...prevNotifications, { id, text, type }]);\n\n    const timeout = setTimeout(\n      () =>\n        setNotifications((prevNotifications) =>\n          prevNotifications.filter((notification) => notification.id !== id),\n        ),\n      5000,\n    );\n\n    notificationTimeouts.push(timeout);\n  };\n\n/**\n * Utility function for jumpToFirstUnreadMessage\n * @param targetId\n * @param msgSet\n */\nexport const findInMsgSetById = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  targetId: string,\n  msgSet: ReturnType<ChannelState<StreamChatGenerics>['formatMessage']>[],\n) => {\n  for (let i = msgSet.length - 1; i >= 0; i--) {\n    const item = msgSet[i];\n    if (item.id === targetId) {\n      return {\n        index: i,\n        target: item,\n      };\n    }\n  }\n  return {\n    index: -1,\n  };\n};\n\n/**\n * Utility function for jumpToFirstUnreadMessage\n * @param targetDate\n * @param msgSet\n * @param exact\n */\nexport const findInMsgSetByDate = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  targetDate: Date,\n  msgSet:\n    | MessageResponse<StreamChatGenerics>[]\n    | ReturnType<ChannelState<StreamChatGenerics>['formatMessage']>[],\n  exact = false,\n) => {\n  const targetTimestamp = targetDate.getTime();\n  let left = 0;\n  let middle = 0;\n  let right = msgSet.length - 1;\n  while (left <= right) {\n    middle = Math.floor((right + left) / 2);\n    const middleTimestamp = new Date(\n      msgSet[middle].created_at as string | Date,\n    ).getTime();\n    const middleLeftTimestamp =\n      msgSet[middle - 1]?.created_at &&\n      new Date(msgSet[middle - 1].created_at as string | Date).getTime();\n    const middleRightTimestamp =\n      msgSet[middle + 1]?.created_at &&\n      new Date(msgSet[middle + 1].created_at as string | Date).getTime();\n    if (\n      middleTimestamp === targetTimestamp ||\n      (middleLeftTimestamp &&\n        middleRightTimestamp &&\n        middleLeftTimestamp < targetTimestamp &&\n        targetTimestamp < middleRightTimestamp)\n    ) {\n      return { index: middle, target: msgSet[middle] };\n    }\n    if (middleTimestamp < targetTimestamp) left = middle + 1;\n    else right = middle - 1;\n  }\n\n  if (\n    !exact ||\n    new Date(msgSet[left].created_at as string | Date).getTime() === targetTimestamp\n  ) {\n    return { index: left, target: msgSet[left] };\n  }\n  return { index: -1 };\n};\n", "import type { Attachment } from 'stream-chat';\nimport * as linkify from 'linkifyjs';\n\nexport const getImageAttachmentConfiguration = (\n  attachment: Attachment,\n  element: HTMLElement,\n) => {\n  let newUrl = undefined;\n\n  const urlToTest = attachment.image_url || attachment.thumb_url || '';\n\n  if (linkify.test(urlToTest, 'url')) {\n    const url = new URL(urlToTest);\n    const resizeDimensions = getSizingRestrictions(url, element);\n\n    if (resizeDimensions) {\n      // Apply 2x for retina displays\n      resizeDimensions.height *= 2;\n      resizeDimensions.width *= 2;\n      addResizingParamsToUrl(resizeDimensions, url);\n    }\n    newUrl = url.href;\n  }\n\n  return {\n    url: newUrl || '',\n  };\n};\n\nexport const getVideoAttachmentConfiguration = (\n  attachment: Attachment,\n  element: HTMLElement,\n  shouldGenerateVideoThumbnail: boolean,\n) => {\n  let thumbUrl = undefined;\n  if (\n    attachment.thumb_url &&\n    shouldGenerateVideoThumbnail &&\n    linkify.test(attachment.thumb_url, 'url')\n  ) {\n    const url = new URL(attachment.thumb_url);\n    const resizeDimensions = getSizingRestrictions(url, element);\n\n    if (resizeDimensions) {\n      // Apply 2x for retina displays\n      resizeDimensions.height *= 2;\n      resizeDimensions.width *= 2;\n      addResizingParamsToUrl(resizeDimensions, url);\n    }\n    thumbUrl = url.href;\n  }\n\n  return {\n    thumbUrl,\n    url: attachment.asset_url || '',\n  };\n};\n\nconst getSizingRestrictions = (url: URL, htmlElement: HTMLElement) => {\n  const urlParams = url.searchParams;\n  const originalHeight = Number(urlParams.get('oh')) || 1;\n  const originalWidth = Number(urlParams.get('ow')) || 1;\n  const cssSizeRestriction = getCSSSizeRestrictions(htmlElement);\n  let resizeDimensions: { height: number; width: number } | undefined;\n\n  if (\n    (cssSizeRestriction.maxHeight || cssSizeRestriction.height) &&\n    cssSizeRestriction.maxWidth\n  ) {\n    resizeDimensions = getResizeDimensions(\n      originalHeight,\n      originalWidth,\n      /* eslint-disable-next-line @typescript-eslint/no-non-null-assertion */\n      cssSizeRestriction.maxHeight || cssSizeRestriction.height!,\n      cssSizeRestriction.maxWidth,\n    );\n  } else {\n    resizeDimensions = undefined;\n  }\n\n  return resizeDimensions;\n};\n\nconst getResizeDimensions = (\n  originalHeight: number,\n  originalWidth: number,\n  maxHeight: number,\n  maxWidth: number,\n) => ({\n  height: Math.round(Math.max(maxHeight, (maxWidth / originalWidth) * originalHeight)),\n  width: Math.round(Math.max(maxHeight, (maxWidth / originalHeight) * originalWidth)),\n});\n\nconst getCSSSizeRestrictions = (htmlElement: HTMLElement) => {\n  const computedStylesheet = getComputedStyle(htmlElement);\n  const height = getValueRepresentationOfCSSProperty(\n    computedStylesheet.getPropertyValue('height'),\n  );\n  const maxHeight = getValueRepresentationOfCSSProperty(\n    computedStylesheet.getPropertyValue('max-height'),\n  );\n  const maxWidth = getValueRepresentationOfCSSProperty(\n    computedStylesheet.getPropertyValue('max-width'),\n  );\n\n  if (!((height || maxHeight) && maxWidth)) {\n    console.warn(\n      `Invalid value set for height/max-height and/or max-width for HTML element, this can cause scrolling issues inside the message list, more info https://getstream.io/chat/docs/sdk/react/message-components/attachment/#image-and-video-sizing`,\n    );\n  }\n\n  return { height, maxHeight, maxWidth };\n};\n\nconst getValueRepresentationOfCSSProperty = (property: string) => {\n  if (!property.endsWith('px')) {\n    return undefined;\n  }\n  const number = parseFloat(property);\n  return isNaN(number) ? undefined : number;\n};\n\nconst addResizingParamsToUrl = (\n  resizeDimensions: { height: number; width: number },\n  url: URL,\n) => {\n  url.searchParams.set('h', resizeDimensions.height.toString());\n  url.searchParams.set('w', resizeDimensions.width.toString());\n};\n", "import type { DefaultStreamChatGenerics } from '../../../types';\nimport type { InternalSearchControllerState } from 'stream-chat';\nimport { useChatContext } from '../../../context';\nimport { useStateStore } from '../../../store';\n\nconst searchControllerStateSelector = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  nextValue: InternalSearchControllerState<StreamChatGenerics>,\n) => ({ focusedMessage: nextValue.focusedMessage });\n\nexport const useSearchFocusedMessage = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>() => {\n  const { searchController } = useChatContext<StreamChatGenerics>('Channel');\n  const { focusedMessage } = useStateStore(\n    searchController._internalState,\n    searchControllerStateSelector,\n  );\n\n  return focusedMessage;\n};\n", "import React from 'react';\n\nimport { MenuIcon as DefaultMenuIcon } from './icons';\n\nimport { ChannelAvatarProps, Avatar as DefaultAvatar } from '../Avatar';\nimport { useChannelPreviewInfo } from '../ChannelPreview/hooks/useChannelPreviewInfo';\n\nimport { useChannelStateContext } from '../../context/ChannelStateContext';\nimport { useChatContext } from '../../context/ChatContext';\nimport { useTranslationContext } from '../../context/TranslationContext';\n\nimport type { DefaultStreamChatGenerics } from '../../types/types';\n\nexport type ChannelHeaderProps = {\n  /** UI component to display an avatar, defaults to [Avatar](https://github.com/GetStream/stream-chat-react/blob/master/src/components/Avatar/Avatar.tsx) component and accepts the same props as: [ChannelAvatar](https://github.com/GetStream/stream-chat-react/blob/master/src/components/Avatar/ChannelAvatar.tsx) */\n  Avatar?: React.ComponentType<ChannelAvatarProps>;\n  /** Manually set the image to render, defaults to the Channel image */\n  image?: string;\n  /** Show a little indicator that the Channel is live right now */\n  live?: boolean;\n  /** UI component to display menu icon, defaults to [MenuIcon](https://github.com/GetStream/stream-chat-react/blob/master/src/components/ChannelHeader/ChannelHeader.tsx)*/\n  MenuIcon?: React.ComponentType;\n  /** Set title manually */\n  title?: string;\n};\n\n/**\n * The ChannelHeader component renders some basic information about a Channel.\n */\nexport const ChannelHeader = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  props: ChannelHeaderProps,\n) => {\n  const {\n    Avatar = DefaultAvatar,\n    image: overrideImage,\n    live,\n    MenuIcon = DefaultMenuIcon,\n    title: overrideTitle,\n  } = props;\n\n  const { channel, watcher_count } =\n    useChannelStateContext<StreamChatGenerics>('ChannelHeader');\n  const { openMobileNav } = useChatContext<StreamChatGenerics>('ChannelHeader');\n  const { t } = useTranslationContext('ChannelHeader');\n  const { displayImage, displayTitle, groupChannelDisplayInfo } = useChannelPreviewInfo({\n    channel,\n    overrideImage,\n    overrideTitle,\n  });\n\n  const { member_count, subtitle } = channel?.data || {};\n\n  return (\n    <div className='str-chat__channel-header'>\n      <button\n        aria-label={t('aria/Menu')}\n        className='str-chat__header-hamburger'\n        onClick={openMobileNav}\n      >\n        <MenuIcon />\n      </button>\n      <Avatar\n        className='str-chat__avatar--channel-header'\n        groupChannelDisplayInfo={groupChannelDisplayInfo}\n        image={displayImage}\n        name={displayTitle}\n      />\n      <div className='str-chat__channel-header-end'>\n        <p className='str-chat__channel-header-title'>\n          {displayTitle}{' '}\n          {live && (\n            <span className='str-chat__header-livestream-livelabel'>\n              {t<string>('live')}\n            </span>\n          )}\n        </p>\n        {subtitle && <p className='str-chat__channel-header-subtitle'>{subtitle}</p>}\n        <p className='str-chat__channel-header-info'>\n          {!live && !!member_count && member_count > 0 && (\n            <>\n              {t('{{ memberCount }} members', {\n                memberCount: member_count,\n              })}\n              ,{' '}\n            </>\n          )}\n          {t<string>('{{ watcherCount }} online', { watcherCount: watcher_count })}\n        </p>\n      </div>\n    </div>\n  );\n};\n", "import React from 'react';\n\nimport { useTranslationContext } from '../../context';\n\nexport const MenuIcon = ({ title }: { title?: string }) => {\n  const { t } = useTranslationContext('MenuIcon');\n\n  return (\n    <svg data-testid='menu-icon' viewBox='0 0 448 512' xmlns='http://www.w3.org/2000/svg'>\n      <title>{title ?? t<string>('Menu')}</title>\n      <path\n        d='M0 88C0 74.75 10.75 64 24 64H424C437.3 64 448 74.75 448 88C448 101.3 437.3 112 424 112H24C10.75 112 0 101.3 0 88zM0 248C0 234.7 10.75 224 24 224H424C437.3 224 448 234.7 448 248C448 261.3 437.3 272 424 272H24C10.75 272 0 261.3 0 248zM424 432H24C10.75 432 0 421.3 0 408C0 394.7 10.75 384 24 384H424C437.3 384 448 394.7 448 408C448 421.3 437.3 432 424 432z'\n        fill='currentColor'\n      />\n    </svg>\n  );\n};\n", "import React, { PropsWithChildren, useMemo } from 'react';\nimport type { StreamChat } from 'stream-chat';\nimport {\n  ChannelSearchSource,\n  MessageSearchSource,\n  SearchController,\n  UserSearchSource,\n} from 'stream-chat';\n\nimport { useChat } from './hooks/useChat';\nimport { useCreateChatContext } from './hooks/useCreateChatContext';\nimport { useChannelsQueryState } from './hooks/useChannelsQueryState';\n\nimport { ChatProvider, CustomClasses } from '../../context/ChatContext';\nimport { TranslationProvider } from '../../context/TranslationContext';\n\nimport type { MessageContextValue } from '../../context';\nimport type { SupportedTranslations } from '../../i18n/types';\nimport type { Streami18n } from '../../i18n/Streami18n';\nimport type { DefaultStreamChatGenerics } from '../../types/types';\n\nexport type ChatProps<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n  /** The StreamChat client object */\n  client: StreamChat<StreamChatGenerics>;\n  /** Object containing custom CSS classnames to override the library's default container CSS */\n  customClasses?: CustomClasses;\n  /** Sets the default fallback language for UI component translation, defaults to 'en' for English */\n  defaultLanguage?: SupportedTranslations;\n  /** Instance of Stream i18n */\n  i18nInstance?: Streami18n;\n  /** Initial status of mobile navigation */\n  initialNavOpen?: boolean;\n  /** Instance of SearchController class that allows to control all the search operations. */\n  searchController?: SearchController<StreamChatGenerics>;\n  /** Used for injecting className/s to the Channel and ChannelList components */\n  theme?: string;\n  /**\n   * Windows 10 does not support country flag emojis out of the box. It chooses to render these emojis as characters instead. Stream\n   * Chat can override this behavior by loading a custom web font that will render images instead (PNGs or SVGs depending on the platform).\n   * Set this prop to true if you want to use these custom emojis for Windows users.\n   *\n   * Note: requires importing `stream-chat-react/css/v2/emoji-replacement.css` style sheet\n   */\n  useImageFlagEmojisOnWindows?: boolean;\n} & Partial<Pick<MessageContextValue<StreamChatGenerics>, 'isMessageAIGenerated'>>;\n\n/**\n * Wrapper component for a StreamChat application. Chat needs to be placed around any other chat components\n * as it provides the ChatContext.\n */\nexport const Chat = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  props: PropsWithChildren<ChatProps<StreamChatGenerics>>,\n) => {\n  const {\n    children,\n    client,\n    customClasses,\n    defaultLanguage,\n    i18nInstance,\n    initialNavOpen = true,\n    isMessageAIGenerated,\n    searchController: customChannelSearchController,\n    theme = 'messaging light',\n    useImageFlagEmojisOnWindows = false,\n  } = props;\n\n  const {\n    channel,\n    closeMobileNav,\n    getAppSettings,\n    latestMessageDatesByChannels,\n    mutes,\n    navOpen,\n    openMobileNav,\n    setActiveChannel,\n    translators,\n  } = useChat({ client, defaultLanguage, i18nInstance, initialNavOpen });\n\n  const channelsQueryState = useChannelsQueryState();\n\n  const searchController = useMemo(\n    () =>\n      customChannelSearchController ??\n      new SearchController<StreamChatGenerics>({\n        sources: [\n          new ChannelSearchSource<StreamChatGenerics>(client),\n          new UserSearchSource<StreamChatGenerics>(client),\n          new MessageSearchSource<StreamChatGenerics>(client),\n        ],\n      }),\n    [client, customChannelSearchController],\n  );\n\n  const chatContextValue = useCreateChatContext<StreamChatGenerics>({\n    channel,\n    channelsQueryState,\n    client,\n    closeMobileNav,\n    customClasses,\n    getAppSettings,\n    isMessageAIGenerated,\n    latestMessageDatesByChannels,\n    mutes,\n    navOpen,\n    openMobileNav,\n    searchController,\n    setActiveChannel,\n    theme,\n    useImageFlagEmojisOnWindows,\n  });\n\n  if (!translators.t) return null;\n\n  return (\n    <ChatProvider value={chatContextValue}>\n      <TranslationProvider value={translators}>{children}</TranslationProvider>\n    </ChatProvider>\n  );\n};\n", "import { useCallback, useEffect, useRef, useState } from 'react';\n\nimport { TranslationContextValue } from '../../../context/TranslationContext';\nimport {\n  defaultDateTimeParser,\n  isLanguageSupported,\n  Streami18n,\n  SupportedTranslations,\n} from '../../../i18n';\n\nimport type {\n  AppSettingsAPIResponse,\n  Channel,\n  Event,\n  Mute,\n  StreamChat,\n} from 'stream-chat';\n\nimport type { DefaultStreamChatGenerics } from '../../../types/types';\n\nexport type UseChatParams<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n  client: StreamChat<StreamChatGenerics>;\n  defaultLanguage?: SupportedTranslations;\n  i18nInstance?: Streami18n;\n  initialNavOpen?: boolean;\n};\n\nexport const useChat = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n  client,\n  defaultLanguage = 'en',\n  i18nInstance,\n  initialNavOpen,\n}: UseChatParams<StreamChatGenerics>) => {\n  const [translators, setTranslators] = useState<TranslationContextValue>({\n    t: (key: string) => key,\n    tDateTimeParser: defaultDateTimeParser,\n    userLanguage: 'en',\n  });\n\n  const [channel, setChannel] = useState<Channel<StreamChatGenerics>>();\n  const [mutes, setMutes] = useState<Array<Mute<StreamChatGenerics>>>([]);\n  const [navOpen, setNavOpen] = useState(initialNavOpen);\n  const [latestMessageDatesByChannels, setLatestMessageDatesByChannels] = useState({});\n\n  const clientMutes = (client.user?.mutes as Array<Mute<StreamChatGenerics>>) || [];\n\n  const closeMobileNav = () => setNavOpen(false);\n  const openMobileNav = () => setTimeout(() => setNavOpen(true), 100);\n\n  const appSettings = useRef<Promise<AppSettingsAPIResponse<StreamChatGenerics>> | null>(\n    null,\n  );\n\n  const getAppSettings = () => {\n    if (appSettings.current) {\n      return appSettings.current;\n    }\n    appSettings.current = client.getAppSettings();\n    return appSettings.current;\n  };\n\n  useEffect(() => {\n    if (!client) return;\n\n    const version = process.env.STREAM_CHAT_REACT_VERSION;\n\n    const userAgent = client.getUserAgent();\n    if (!userAgent.includes('stream-chat-react')) {\n      // result looks like: 'stream-chat-react-2.3.2-stream-chat-javascript-client-browser-2.2.2'\n      // the upper-case text between double underscores is replaced with the actual semantic version of the library\n      client.setUserAgent(`stream-chat-react-${version}-${userAgent}`);\n    }\n\n    client.threads.registerSubscriptions();\n    client.polls.registerSubscriptions();\n\n    return () => {\n      client.threads.unregisterSubscriptions();\n      client.polls.unregisterSubscriptions();\n    };\n  }, [client]);\n\n  useEffect(() => {\n    setMutes(clientMutes);\n\n    const handleEvent = (event: Event<StreamChatGenerics>) => {\n      setMutes(event.me?.mutes || []);\n    };\n\n    client.on('notification.mutes_updated', handleEvent);\n    return () => client.off('notification.mutes_updated', handleEvent);\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [clientMutes?.length]);\n\n  useEffect(() => {\n    let userLanguage = client.user?.language;\n\n    if (!userLanguage) {\n      const browserLanguage = window.navigator.language.slice(0, 2); // just get language code, not country-specific version\n      userLanguage = isLanguageSupported(browserLanguage)\n        ? browserLanguage\n        : defaultLanguage;\n    }\n\n    const streami18n = i18nInstance || new Streami18n({ language: userLanguage });\n\n    streami18n.registerSetLanguageCallback((t) =>\n      setTranslators((prevTranslator) => ({ ...prevTranslator, t })),\n    );\n\n    streami18n.getTranslators().then((translator) => {\n      setTranslators({\n        ...translator,\n        userLanguage: userLanguage || defaultLanguage,\n      });\n    });\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [i18nInstance]);\n\n  const setActiveChannel = useCallback(\n    async (\n      activeChannel?: Channel<StreamChatGenerics>,\n      watchers: { limit?: number; offset?: number } = {},\n      event?: React.BaseSyntheticEvent,\n    ) => {\n      if (event && event.preventDefault) event.preventDefault();\n\n      if (activeChannel && Object.keys(watchers).length) {\n        await activeChannel.query({ watch: true, watchers });\n      }\n\n      setChannel(activeChannel);\n      closeMobileNav();\n    },\n    [],\n  );\n\n  useEffect(() => {\n    setLatestMessageDatesByChannels({});\n  }, [client.user?.id]);\n\n  return {\n    channel,\n    closeMobileNav,\n    getAppSettings,\n    latestMessageDatesByChannels,\n    mutes,\n    navOpen,\n    openMobileNav,\n    setActiveChannel,\n    translators,\n  };\n};\n", "import { useMemo } from 'react';\n\nimport type { ChatContextValue } from '../../../context/ChatContext';\nimport type { DefaultStreamChatGenerics } from '../../../types/types';\n\nexport const useCreateChatContext = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  value: ChatContextValue<StreamChatGenerics>,\n) => {\n  const {\n    channel,\n    channelsQueryState,\n    client,\n    closeMobileNav,\n    customClasses,\n    getAppSettings,\n    isMessageAIGenerated,\n    latestMessageDatesByChannels,\n    mutes,\n    navOpen,\n    openMobileNav,\n    searchController,\n    setActiveChannel,\n    theme,\n    useImageFlagEmojisOnWindows,\n  } = value;\n\n  const channelCid = channel?.cid;\n  const channelsQueryError = channelsQueryState.error;\n  const channelsQueryInProgress = channelsQueryState.queryInProgress;\n  const clientValues = `${client.clientID}${Object.keys(client.activeChannels).length}${\n    Object.keys(client.listeners).length\n  }${client.mutedChannels.length}\n  ${client.user?.id}`;\n  const mutedUsersLength = mutes.length;\n\n  const chatContext: ChatContextValue<StreamChatGenerics> = useMemo(\n    () => ({\n      channel,\n      channelsQueryState,\n      client,\n      closeMobileNav,\n      customClasses,\n      getAppSettings,\n      isMessageAIGenerated,\n      latestMessageDatesByChannels,\n      mutes,\n      navOpen,\n      openMobileNav,\n      searchController,\n      setActiveChannel,\n      theme,\n      useImageFlagEmojisOnWindows,\n    }),\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    [\n      channelCid,\n      channelsQueryError,\n      channelsQueryInProgress,\n      clientValues,\n      getAppSettings,\n      searchController,\n      mutedUsersLength,\n      navOpen,\n      isMessageAIGenerated,\n    ],\n  );\n\n  return chatContext;\n};\n", "import { Dispatch, SetStateAction, useState } from 'react';\nimport type { APIErrorResponse, ErrorFromResponse } from 'stream-chat';\n\ntype ChannelQueryState =\n  | 'uninitialized' // the initial state before the first channels query is triggered\n  | 'reload' // the initial channels query (loading the first page) is in progress\n  | 'load-more' // loading the next page of channels\n  | null; // at least one channels page has been loaded and there is no query in progress at the moment\n\nexport interface ChannelsQueryState {\n  error: ErrorFromResponse<APIErrorResponse> | null;\n  queryInProgress: ChannelQueryState;\n  setError: Dispatch<SetStateAction<ErrorFromResponse<APIErrorResponse> | null>>;\n  setQueryInProgress: Dispatch<SetStateAction<ChannelQueryState>>;\n}\n\nexport const useChannelsQueryState = (): ChannelsQueryState => {\n  const [error, setError] = useState<ErrorFromResponse<APIErrorResponse> | null>(null);\n  const [queryInProgress, setQueryInProgress] =\n    useState<ChannelQueryState>('uninitialized');\n\n  return {\n    error,\n    queryInProgress,\n    setError,\n    setQueryInProgress,\n  };\n};\n", "import { useEffect, useState } from 'react';\n\nimport { StreamChat } from 'stream-chat';\n\nimport type {\n  DefaultGenerics,\n  ExtendableGenerics,\n  OwnUserResponse,\n  StreamChatOptions,\n  TokenOrProvider,\n  UserResponse,\n} from 'stream-chat';\n\n/**\n * React hook to create, connect and return `StreamChat` client.\n */\nexport const useCreateChatClient = <SCG extends ExtendableGenerics = DefaultGenerics>({\n  apiKey,\n  options,\n  tokenOrProvider,\n  userData,\n}: {\n  apiKey: string;\n  tokenOrProvider: TokenOrProvider;\n  userData: OwnUserResponse<SCG> | UserResponse<SCG>;\n  options?: StreamChatOptions;\n}) => {\n  const [chatClient, setChatClient] = useState<StreamChat<SCG> | null>(null);\n  const [cachedUserData, setCachedUserData] = useState(userData);\n\n  if (userData.id !== cachedUserData.id) {\n    setCachedUserData(userData);\n  }\n\n  const [cachedOptions] = useState(options);\n\n  useEffect(() => {\n    const client = new StreamChat<SCG>(apiKey, undefined, cachedOptions);\n    let didUserConnectInterrupt = false;\n\n    const connectionPromise = client\n      .connectUser(cachedUserData, tokenOrProvider)\n      .then(() => {\n        if (!didUserConnectInterrupt) setChatClient(client);\n      });\n\n    return () => {\n      didUserConnectInterrupt = true;\n      setChatClient(null);\n      connectionPromise\n        .then(() => client.disconnectUser())\n        .then(() => {\n          console.log(`Connection for user \"${cachedUserData.id}\" has been closed`);\n        });\n    };\n  }, [apiKey, cachedUserData, cachedOptions, tokenOrProvider]);\n\n  return chatClient;\n};\n", "import React, { useEffect } from 'react';\nimport clsx from 'clsx';\n\nimport { MESSAGE_ACTIONS } from '../Message';\nimport { MessageInput, MessageInputFlat, MessageInputProps } from '../MessageInput';\nimport {\n  MessageList,\n  MessageListProps,\n  VirtualizedMessageList,\n  VirtualizedMessageListProps,\n} from '../MessageList';\nimport { ThreadHeader as DefaultThreadHeader } from './ThreadHeader';\nimport { ThreadHead as DefaultThreadHead } from '../Thread/ThreadHead';\n\nimport {\n  useChannelActionContext,\n  useChannelStateContext,\n  useChatContext,\n  useComponentContext,\n} from '../../context';\nimport { useThreadContext } from '../Threads';\nimport { useStateStore } from '../../store';\n\nimport type { MessageProps, MessageUIComponentProps } from '../Message/types';\nimport type { MessageActionsArray } from '../Message/utils';\n\nimport type { CustomTrigger, DefaultStreamChatGenerics } from '../../types/types';\nimport type { ThreadState } from 'stream-chat';\n\nexport type ThreadProps<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n  V extends CustomTrigger = CustomTrigger,\n> = {\n  /** Additional props for `MessageInput` component: [available props](https://getstream.io/chat/docs/sdk/react/message-input-components/message_input/#props) */\n  additionalMessageInputProps?: MessageInputProps<StreamChatGenerics, V>;\n  /** Additional props for `MessageList` component: [available props](https://getstream.io/chat/docs/sdk/react/core-components/message_list/#props) */\n  additionalMessageListProps?: MessageListProps<StreamChatGenerics>;\n  /** Additional props for `Message` component of the parent message: [available props](https://getstream.io/chat/docs/sdk/react/message-components/message/#props) */\n  additionalParentMessageProps?: Partial<MessageProps<StreamChatGenerics>>;\n  /** Additional props for `VirtualizedMessageList` component: [available props](https://getstream.io/chat/docs/sdk/react/core-components/virtualized_list/#props) */\n  additionalVirtualizedMessageListProps?: VirtualizedMessageListProps<StreamChatGenerics>;\n  /** If true, focuses the `MessageInput` component on opening a thread */\n  autoFocus?: boolean;\n  /** Injects date separator components into `Thread`, defaults to `false`. To be passed to the underlying `MessageList` or `VirtualizedMessageList` components */\n  enableDateSeparator?: boolean;\n  /** Custom thread input UI component used to override the default `Input` value stored in `ComponentContext` or the [MessageInputSmall](https://github.com/GetStream/stream-chat-react/blob/master/src/components/MessageInput/MessageInputSmall.tsx) default */\n  Input?: React.ComponentType;\n  /** Custom thread message UI component used to override the default `Message` value stored in `ComponentContext` */\n  Message?: React.ComponentType<MessageUIComponentProps<StreamChatGenerics>>;\n  /** Array of allowed message actions (ex: ['edit', 'delete', 'flag', 'mute', 'pin', 'quote', 'react', 'reply']). To disable all actions, provide an empty array. */\n  messageActions?: MessageActionsArray;\n  /** If true, render the `VirtualizedMessageList` instead of the standard `MessageList` component */\n  virtualized?: boolean;\n};\n\n/**\n * The Thread component renders a parent Message with a list of replies\n */\nexport const Thread = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n  V extends CustomTrigger = CustomTrigger,\n>(\n  props: ThreadProps<StreamChatGenerics, V>,\n) => {\n  const { channel, channelConfig, thread } =\n    useChannelStateContext<StreamChatGenerics>('Thread');\n  const threadInstance = useThreadContext();\n\n  if ((!thread && !threadInstance) || channelConfig?.replies === false) return null;\n\n  // the wrapper ensures a key variable is set and the component recreates on thread switch\n  return (\n    // FIXME: TS is having trouble here as at least one of the two would always be defined\n    <ThreadInner\n      {...props}\n      key={`thread-${(thread ?? threadInstance)?.id}-${channel?.cid}`}\n    />\n  );\n};\n\nconst selector = (nextValue: ThreadState) => ({\n  isLoadingNext: nextValue.pagination.isLoadingNext,\n  isLoadingPrev: nextValue.pagination.isLoadingPrev,\n  parentMessage: nextValue.parentMessage,\n  replies: nextValue.replies,\n});\n\nconst ThreadInner = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n  V extends CustomTrigger = CustomTrigger,\n>(\n  props: ThreadProps<StreamChatGenerics, V> & { key: string },\n) => {\n  const {\n    additionalMessageInputProps,\n    additionalMessageListProps,\n    additionalParentMessageProps,\n    additionalVirtualizedMessageListProps,\n    autoFocus = true,\n    enableDateSeparator = false,\n    Input: PropInput,\n    Message: PropMessage,\n    messageActions = Object.keys(MESSAGE_ACTIONS),\n    virtualized,\n  } = props;\n\n  const threadInstance = useThreadContext();\n  const { isLoadingNext, isLoadingPrev, parentMessage, replies } =\n    useStateStore(threadInstance?.state, selector) ?? {};\n\n  const {\n    thread,\n    threadHasMore,\n    threadLoadingMore,\n    threadMessages = [],\n    threadSuppressAutoscroll,\n  } = useChannelStateContext<StreamChatGenerics>('Thread');\n  const { closeThread, loadMoreThread } =\n    useChannelActionContext<StreamChatGenerics>('Thread');\n  const { customClasses } = useChatContext<StreamChatGenerics>('Thread');\n  const {\n    Message: ContextMessage,\n    ThreadHead = DefaultThreadHead,\n    ThreadHeader = DefaultThreadHeader,\n    ThreadInput: ContextInput,\n    VirtualMessage,\n  } = useComponentContext<StreamChatGenerics>('Thread');\n\n  const ThreadInput =\n    PropInput ?? additionalMessageInputProps?.Input ?? ContextInput ?? MessageInputFlat;\n\n  const ThreadMessage = PropMessage || additionalMessageListProps?.Message;\n  const FallbackMessage = virtualized && VirtualMessage ? VirtualMessage : ContextMessage;\n  const MessageUIComponent = ThreadMessage || FallbackMessage;\n\n  const ThreadMessageList = virtualized ? VirtualizedMessageList : MessageList;\n\n  useEffect(() => {\n    if (thread?.id && thread?.reply_count) {\n      // FIXME: integrators can customize channel query options but cannot customize channel.getReplies() options\n      loadMoreThread();\n    }\n  }, [thread, loadMoreThread]);\n\n  const threadProps: Pick<\n    VirtualizedMessageListProps<StreamChatGenerics>,\n    | 'hasMoreNewer'\n    | 'loadMoreNewer'\n    | 'loadingMoreNewer'\n    | 'hasMore'\n    | 'loadMore'\n    | 'loadingMore'\n    | 'messages'\n  > = threadInstance\n    ? {\n        loadingMore: isLoadingPrev,\n        loadingMoreNewer: isLoadingNext,\n        loadMore: threadInstance.loadPrevPage,\n        loadMoreNewer: threadInstance.loadNextPage,\n        messages: replies,\n      }\n    : {\n        hasMore: threadHasMore,\n        loadingMore: threadLoadingMore,\n        loadMore: loadMoreThread,\n        messages: threadMessages,\n      };\n\n  const messageAsThread = thread ?? parentMessage;\n\n  if (!messageAsThread) return null;\n\n  const threadClass =\n    customClasses?.thread ||\n    clsx('str-chat__thread-container str-chat__thread', {\n      'str-chat__thread--virtualized': virtualized,\n    });\n\n  const head = (\n    <ThreadHead\n      key={messageAsThread.id}\n      message={messageAsThread}\n      Message={MessageUIComponent}\n      {...additionalParentMessageProps}\n    />\n  );\n\n  return (\n    <div className={threadClass}>\n      <ThreadHeader closeThread={closeThread} thread={messageAsThread} />\n      <ThreadMessageList\n        disableDateSeparator={!enableDateSeparator}\n        head={head}\n        Message={MessageUIComponent}\n        messageActions={messageActions}\n        suppressAutoscroll={threadSuppressAutoscroll}\n        threadList\n        {...threadProps}\n        {...(virtualized\n          ? additionalVirtualizedMessageListProps\n          : additionalMessageListProps)}\n      />\n      <MessageInput\n        focus={autoFocus}\n        Input={ThreadInput}\n        isThreadInput\n        parent={thread ?? parentMessage}\n        publishTypingEvent={false}\n        {...additionalMessageInputProps}\n      />\n    </div>\n  );\n};\n", "import React from 'react';\n\nimport {\n  ChannelPreviewInfoParams,\n  useChannelPreviewInfo,\n} from '../ChannelPreview/hooks/useChannelPreviewInfo';\nimport { CloseIcon } from './icons';\n\nimport { StreamMessage, useChannelStateContext } from '../../context/ChannelStateContext';\nimport { useTranslationContext } from '../../context/TranslationContext';\n\nimport type { DefaultStreamChatGenerics } from '../../types/types';\n\nexport type ThreadHeaderProps<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n  /** Callback for closing the thread */\n  closeThread: (event?: React.BaseSyntheticEvent) => void;\n  /** The thread parent message */\n  thread: StreamMessage<StreamChatGenerics>;\n};\n\nexport const ThreadHeader = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  props: ThreadHeaderProps<StreamChatGenerics> &\n    Pick<ChannelPreviewInfoParams<StreamChatGenerics>, 'overrideImage' | 'overrideTitle'>,\n) => {\n  const { closeThread, overrideImage, overrideTitle } = props;\n\n  const { t } = useTranslationContext('ThreadHeader');\n  const { channel } = useChannelStateContext<StreamChatGenerics>('');\n  const { displayTitle } = useChannelPreviewInfo({\n    channel,\n    overrideImage,\n    overrideTitle,\n  });\n\n  return (\n    <div className='str-chat__thread-header'>\n      <div className='str-chat__thread-header-details'>\n        <div className='str-chat__thread-header-title'>{t<string>('Thread')}</div>\n        <div className='str-chat__thread-header-subtitle'>{displayTitle}</div>\n      </div>\n      <button\n        aria-label={t('aria/Close thread')}\n        className='str-chat__close-thread-button'\n        data-testid='close-button'\n        onClick={closeThread}\n      >\n        <CloseIcon />\n      </button>\n    </div>\n  );\n};\n", "import React from 'react';\n\nimport { useTranslationContext } from '../../context/TranslationContext';\n\nexport const CloseIcon = ({ title }: { title?: string }) => {\n  const { t } = useTranslationContext('CloseIcon');\n\n  return (\n    <svg\n      data-testid='close-no-outline'\n      fill='none'\n      viewBox='0 0 24 24'\n      xmlns='http://www.w3.org/2000/svg'\n    >\n      <title>{title ?? t<string>('Close')}</title>\n      <path\n        d='M19 6.41L17.59 5L12 10.59L6.41 5L5 6.41L10.59 12L5 17.59L6.41 19L12 13.41L17.59 19L19 17.59L13.41 12L19 6.41Z'\n        fill='black'\n      />\n    </svg>\n  );\n};\n", "import React from 'react';\n\nimport { Message, MessageProps } from '../Message';\nimport { ThreadStart as DefaultThreadStart } from './ThreadStart';\n\nimport { useComponentContext } from '../../context';\n\nimport type { DefaultStreamChatGenerics } from '../../types/types';\n\nexport const ThreadHead = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  props: MessageProps<StreamChatGenerics>,\n) => {\n  const { ThreadStart = DefaultThreadStart } =\n    useComponentContext<StreamChatGenerics>('ThreadHead');\n  return (\n    <div className='str-chat__parent-message-li'>\n      <Message initialMessage threadList {...props} />\n      <ThreadStart />\n    </div>\n  );\n};\n", "import React from 'react';\n\nimport { useChannelStateContext } from '../../context/ChannelStateContext';\nimport { useTranslationContext } from '../../context/TranslationContext';\n\nexport const ThreadStart = () => {\n  const { thread } = useChannelStateContext('ThreadStart');\n  const { t } = useTranslationContext('ThreadStart');\n\n  if (!thread?.reply_count) return null;\n\n  return (\n    <div className='str-chat__thread-start'>\n      {t<string>('replyCount', { count: thread.reply_count })}\n    </div>\n  );\n};\n", "import React, { PropsWithChildren } from 'react';\nimport clsx from 'clsx';\n\nimport { StreamMessage, useChannelStateContext } from '../../context/ChannelStateContext';\n\nimport type { DefaultStreamChatGenerics } from '../../types/types';\n\nexport type WindowProps<\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n  /** optional prop to force addition of class str-chat__main-panel---with-thread-opn to the Window root element */\n  thread?: StreamMessage<StreamChatGenerics>;\n};\n\nconst UnMemoizedWindow = <\n  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n  props: PropsWithChildren<WindowProps<StreamChatGenerics>>,\n) => {\n  const { children, thread: propThread } = props;\n\n  const { thread: contextThread } = useChannelStateContext<StreamChatGenerics>('Window');\n\n  return (\n    <div\n      className={clsx('str-chat__main-panel', {\n        'str-chat__main-panel--thread-open': contextThread || propThread,\n      })}\n    >\n      {children}\n    </div>\n  );\n};\n\n/**\n * A UI component for conditionally displaying a Thread or Channel\n */\nexport const Window = React.memo(UnMemoizedWindow) as typeof UnMemoizedWindow;\n"],
  "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA,wCAAAA,UAAAC,SAAA;AAUA,QAAI,WAAW,IAAI;AAGnB,QAAI,YAAY;AAGhB,QAAI,UAAU;AAGd,QAAI,oBAAoB;AAAxB,QACI,sBAAsB;AAG1B,QAAI,UAAU,MAAM,oBAAoB,sBAAsB;AAM9D,QAAI,cAAc,OAAO,SAAS,GAAG;AAGrC,QAAI,kBAAkB;AAAA;AAAA,MAEpB,QAAQ;AAAA,MAAM,QAAQ;AAAA,MAAK,QAAQ;AAAA,MAAK,QAAQ;AAAA,MAAK,QAAQ;AAAA,MAAK,QAAQ;AAAA,MAC1E,QAAQ;AAAA,MAAM,QAAQ;AAAA,MAAK,QAAQ;AAAA,MAAK,QAAQ;AAAA,MAAK,QAAQ;AAAA,MAAK,QAAQ;AAAA,MAC1E,QAAQ;AAAA,MAAM,QAAQ;AAAA,MACtB,QAAQ;AAAA,MAAM,QAAQ;AAAA,MACtB,QAAQ;AAAA,MAAM,QAAQ;AAAA,MAAK,QAAQ;AAAA,MAAK,QAAQ;AAAA,MAChD,QAAQ;AAAA,MAAM,QAAQ;AAAA,MAAK,QAAQ;AAAA,MAAK,QAAQ;AAAA,MAChD,QAAQ;AAAA,MAAM,QAAQ;AAAA,MAAK,QAAQ;AAAA,MAAK,QAAQ;AAAA,MAChD,QAAQ;AAAA,MAAM,QAAQ;AAAA,MAAK,QAAQ;AAAA,MAAK,QAAQ;AAAA,MAChD,QAAQ;AAAA,MAAM,QAAQ;AAAA,MACtB,QAAQ;AAAA,MAAM,QAAQ;AAAA,MAAK,QAAQ;AAAA,MAAK,QAAQ;AAAA,MAAK,QAAQ;AAAA,MAAK,QAAQ;AAAA,MAC1E,QAAQ;AAAA,MAAM,QAAQ;AAAA,MAAK,QAAQ;AAAA,MAAK,QAAQ;AAAA,MAAK,QAAQ;AAAA,MAAK,QAAQ;AAAA,MAC1E,QAAQ;AAAA,MAAM,QAAQ;AAAA,MAAK,QAAQ;AAAA,MAAK,QAAQ;AAAA,MAChD,QAAQ;AAAA,MAAM,QAAQ;AAAA,MAAK,QAAQ;AAAA,MAAK,QAAQ;AAAA,MAChD,QAAQ;AAAA,MAAM,QAAQ;AAAA,MAAK,QAAQ;AAAA,MACnC,QAAQ;AAAA,MAAM,QAAQ;AAAA,MACtB,QAAQ;AAAA,MAAM,QAAQ;AAAA,MACtB,QAAQ;AAAA;AAAA,MAER,UAAU;AAAA,MAAM,UAAU;AAAA,MAAK,UAAU;AAAA,MACzC,UAAU;AAAA,MAAM,UAAU;AAAA,MAAK,UAAU;AAAA,MACzC,UAAU;AAAA,MAAM,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MACxD,UAAU;AAAA,MAAM,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MACxD,UAAU;AAAA,MAAM,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MACxD,UAAU;AAAA,MAAM,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MACvE,UAAU;AAAA,MAAM,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MACvE,UAAU;AAAA,MAAM,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MACxD,UAAU;AAAA,MAAM,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MACxD,UAAU;AAAA,MAAM,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MACxD,UAAU;AAAA,MAAM,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MACvE,UAAU;AAAA,MAAM,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MACvE,UAAU;AAAA,MAAM,UAAU;AAAA,MAC1B,UAAU;AAAA,MAAM,UAAU;AAAA,MAAK,UAAU;AAAA,MACzC,UAAU;AAAA,MAAM,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MACvE,UAAU;AAAA,MAAM,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MACvE,UAAU;AAAA,MAAM,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MACxD,UAAU;AAAA,MAAM,UAAU;AAAA,MAAK,UAAU;AAAA,MAAK,UAAU;AAAA,MACxD,UAAU;AAAA,MAAM,UAAU;AAAA,MAAK,UAAU;AAAA,MACzC,UAAU;AAAA,MAAM,UAAU;AAAA,MAAK,UAAU;AA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AA,GACN,CAAC,QAAK,GAAA,GACN,CAAC,QAAK,GAAA,GACN,CAAC,QAAK,GAAA,GACN,CAAC,QAAK,GAAA,GACN,CAAC,QAAK,IAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,QAAK,GAAA,GACN,CAAC,QAAK,GAAA,GACN,CAAC,QAAK,GAAA,GACN,CAAC,QAAK,GAAA,GACN,CAAC,QAAK,IAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,QAAK,GAAA,GACN,CAAC,QAAK,IAAA,GACN,CAAC,QAAK,GAAA,GACN,CAAC,UAAK,IAAA,GAGN,CAAC,QAAK,GAAA,GACN,CAAC,QAAK,GAAA,GACN,CAAC,QAAK,GAAA,GACN,CAAC,QAAK,GAAA,GACN,CAAC,QAAK,GAAA,GACN,CAAC,QAAK,GAAA,GACN,CAAC,QAAK,GAAA,GACN,CAAC,QAAK,GAAA,GACN,CAAC,QAAK,GAAA,GACN,CAAC,QAAK,GAAA,GACN,CAAC,QAAK,GAAA,GACN,CAAC,QAAK,GAAA,GACN,CAAC,QAAK,GAAA,GACN,CAAC,QAAK,GAAA,GACN,CAAC,QAAK,GAAA,GACN,CAAC,QAAK,GAAA,GACN,CAAC,QAAK,GAAA,GACN,CAAC,QAAK,GAAA,GACN,CAAC,QAAK,GAAA,GACN,CAAC,QAAK,GAAA,GACN,CAAC,QAAK,GAAA,GACN,CAAC,QAAK,GAAA,GACN,CAAC,QAAK,GAAA,GACN,CAAC,QAAK,GAAA,GACN,CAAC,QAAK,GAAA,GACN,CAAC,QAAK,GAAA,GACN,CAAC,QAAK,GAAA,GACN,CAAC,QAAK,GAAA,GACN,CAAC,QAAK,GAAA,GACN,CAAC,QAAK,GAAA,GACN,CAAC,QAAK,GAAA,GACN,CAAC,QAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GAGN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,gBAAM,GAAA,GACP,CAAC,UAAK,GAAA,GACN,CAAC,gBAAM,GAAA,GACP,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GAGN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GAGN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,IAAA,GAGN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GAGN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,gBAAM,IAAA,GACP,CAAC,gBAAM,IAAA,GACP,CAAC,gBAAM,IAAA,GACP,CAAC,gBAAM,IAAA,GACP,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,gBAAM,IAAA,GACP,CAAC,gBAAM,IAAA,GACP,CAAC,gBAAM,IAAA,GACP,CAAC,gBAAM,IAAA,GACP,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,KAAA,GACN,CAAC,UAAK,KAAA,GACN,CAAC,UAAK,EAAA,GACN,CAAC,UAAK,EAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,EAAA,GACN,CAAC,UAAK,EAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,IAAA,GAGN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GAGN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,QAAK,GAAA,GACN,CAAC,QAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GAGN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,KAAA,GACN,CAAC,UAAK,KAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,gBAAM,GAAA,GACP,CAAC,gBAAM,GAAA,GACP,CAAC,gBAAM,GAAA,GACP,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,KAAA,GAGN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,KAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GAGN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GAGN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,EAAA,GAGN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GAcN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GAGN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GAGN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,gBAAM,IAAA,GACP,CAAC,gBAAM,IAAA,GAGP,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GA0CN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,GAAA,GAGN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,IAAA,GAWN,CAAC,QAAK,GAAA,GACN,CAAC,QAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GAGN,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GAGP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GAGP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,IAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,IAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,IAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,IAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,IAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,IAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,IAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,IAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,IAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,IAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,IAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,IAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,IAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,IAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,IAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,IAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,IAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,IAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,IAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,IAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,IAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,IAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,IAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,IAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,IAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,IAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,IAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,IAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,IAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,IAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,UAAK,KAAA,GACN,CAAC,UAAK,KAAA,GACN,CAAC,UAAK,KAAA,GACN,CAAC,UAAK,KAAA,GACN,CAAC,UAAK,KAAA,GACN,CAAC,UAAK,KAAA,GACN,CAAC,UAAK,KAAA,GACN,CAAC,UAAK,KAAA,GACN,CAAC,UAAK,KAAA,GACN,CAAC,UAAK,KAAA,GACN,CAAC,UAAK,KAAA,GACN,CAAC,UAAK,KAAA,GACN,CAAC,UAAK,KAAA,GACN,CAAC,UAAK,KAAA,GACN,CAAC,UAAK,KAAA,GACN,CAAC,UAAK,KAAA,GACN,CAAC,UAAK,KAAA,GACN,CAAC,UAAK,KAAA,GACN,CAAC,UAAK,KAAA,GACN,CAAC,UAAK,KAAA,GACN,CAAC,UAAK,KAAA,GACN,CAAC,UAAK,KAAA,GACN,CAAC,UAAK,KAAA,GACN,CAAC,UAAK,KAAA,GACN,CAAC,UAAK,KAAA,GACN,CAAC,UAAK,KAAA,GACN,CAAC,UAAK,KAAA,GACN,CAAC,UAAK,KAAA,GACN,CAAC,UAAK,KAAA,GACN,CAAC,UAAK,KAAA,GACN,CAAC,UAAK,KAAA,GACN,CAAC,UAAK,KAAA,GACN,CAAC,UAAK,KAAA,GACN,CAAC,UAAK,KAAA,GACN,CAAC,UAAK,KAAA,GACN,CAAC,UAAK,KAAA,GACN,CAAC,UAAK,KAAA,GACN,CAAC,UAAK,KAAA,GACN,CAAC,UAAK,KAAA,GACN,CAAC,UAAK,KAAA,GACN,CAAC,UAAK,KAAA,GACN,CAAC,UAAK,KAAA,GACN,CAAC,UAAK,KAAA,GACN,CAAC,UAAK,KAAA,GACN,CAAC,UAAK,KAAA,GACN,CAAC,UAAK,KAAA,GACN,CAAC,UAAK,KAAA,GACN,CAAC,UAAK,KAAA,GACN,CAAC,UAAK,KAAA,GACN,CAAC,UAAK,KAAA,GACN,CAAC,UAAK,KAAA,GACN,CAAC,UAAK,KAAA,GACN,CAAC,UAAK,KAAA,GACN,CAAC,UAAK,KAAA,GACN,CAAC,UAAK,KAAA,GACN,CAAC,UAAK,KAAA,GACN,CAAC,UAAK,KAAA,GACN,CAAC,UAAK,KAAA,GACN,CAAC,UAAK,KAAA,GACN,CAAC,UAAK,KAAA,GACN,CAAC,UAAK,KAAA,GACN,CAAC,UAAK,KAAA,GACN,CAAC,UAAK,KAAA,GACN,CAAC,UAAK,KAAA,GACN,CAAC,UAAK,KAAA,GACN,CAAC,UAAK,KAAA,GACN,CAAC,UAAK,KAAA,GACN,CAAC,UAAK,KAAA,GACN,CAAC,UAAK,KAAA,GACN,CAAC,UAAK,KAAA,GACN,CAAC,UAAK,KAAA,GACN,CAAC,UAAK,KAAA,GACN,CAAC,UAAK,KAAA,GACN,CAAC,UAAK,KAAA,GACN,CAAC,UAAK,KAAA,GACN,CAAC,UAAK,KAAA,GACN,CAAC,UAAK,KAAA,GAGN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GAGN,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,KAAA,GACN,CAAC,UAAK,KAAA,GACN,CAAC,UAAK,KAAA,GACN,CAAC,UAAK,KAAA,GACN,CAAC,UAAK,KAAA,GACN,CAAC,UAAK,KAAA,GACN,CAAC,UAAK,KAAA,GACN,CAAC,UAAK,KAAA,GACN,CAAC,UAAK,KAAA,GACN,CAAC,UAAK,KAAA,GACN,CAAC,UAAK,KAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,GAAA,GACN,CAAC,UAAK,IAAA,GACN,CAAC,UAAK,GAAA,GAGN,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,GACP,CAAC,aAAM,GAAA,G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AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAAAC;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAAC;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;A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",
  "names": ["exports", "module", "root", "Symbol", "toString", "string", "transliterate", "string", "options", "TypeError", "customReplacements", "Map", "builtinReplacements", "replacements", "key", "value", "replace", "RegExp", "escapeStringRegexp", "normalize", "deburr", "matchOperatorsRe", "str", "exports", "module", "position", "start", "node", "whitespace", "re", "exports", "StyleToObject", "exports", "module", "isArray", "isPlainObject", "setProperty", "getProperty", "name", "extend", "exports", "module", "string", "index", "exports", "exports", "module", "exports", "module", "text", "exports", "module", "exports", "module", "content", "exports", "module", "name", "node", "exports", "module", "exports", "module", "name", "content", "exports", "module", "xml", "node", "text", "content", "mark", "name", "element", "string", "exports", "module", "xml", "exports", "module", "extend", "hasOwnProperty", "exports", "module", "bail", "exports", "module", "exports", "module", "exports", "module", "wrap", "callback", "exports", "module", "wrap", "trough", "index", "exports", "module", "own", "stringify", "position", "point", "index", "exports", "module", "stringify", "position", "index", "exports", "module", "exports", "module", "exports", "module", "VFile", "own", "order", "toString", "index", "path", "assertNonEmpty", "assertPath", "assertPart", "name", "exports", "module", "VFile", "position", "message", "exports", "module", "exports", "module", "bail", "extend", "trough", "vfile", "unified", "own", "parse", "stringify", "process", "index", "assertUnfrozen", "value", "find", "assertParser", "node", "assertNode", "file", "assertDone", "assertCompiler", "name", "keys", "exports", "module", "toString", "node", "all", "index", "exports", "module", "exports", "module", "own", "exports", "module", "normalizeIdentifier", "exports", "module", "exports", "module", "code", "exports", "module", "markdownLineEnding", "code", "exports", "module", "markdownSpace", "code", "exports", "module", "markdownSpace", "ok", "start", "code", "exports", "markdownLineEnding", "factorySpace", "initializeContent", "previous", "code", "exports", "module", "markdownLineEnding", "factorySpace", "ok", "code", "exports", "markdownLineEnding", "factorySpace", "initializeDocument", "containerConstruct", "tokenizeContainer", "self", "start", "code", "index", "effects", "ok", "exports", "module", "index", "exports", "module", "exports", "module", "splice", "exports", "module", "splice", "list", "start", "exports", "module", "exports", "module", "subtokenize", "index", "subcontent", "previous", "start", "require_content", "exports", "module", "markdownLineEnding", "subtokenize", "factorySpace", "content", "tokenizeContent", "resolveContent", "continuationConstruct", "tokenizeContinuation", "ok", "previous", "start", "code", "self", "exports", "content", "factorySpace", "initializeFlow", "self", "code", "exports", "text", "initializeFactory", "string", "resolver", "createResolver", "resolveAllLineSuffixes", "self", "constructs", "start", "code", "list", "index", "exports", "module", "exports", "module", "hasOwnProperty", "combineExtensions", "all", "index", "extension", "code", "constructs", "list", "exports", "module", "chunkedPush", "list", "exports", "module", "resolveAll", "constructs", "index", "exports", "module", "serializeChunks", "index", "exports", "module", "sliceChunks", "exports", "module", "markdownLineEnding", "chunkedPush", "resolveAll", "serializeChunks", "sliceChunks", "createTokenizer", "point", "exit", "code", "constructs", "list", "start", "ok", "from", "exports", "module", "markdownLineEndingOrSpace", "code", "exports", "module", "unicodePunctuation", "exports", "module", "regexCheck", "code", "exports", "module", "regexCheck", "unicodePunctuation", "exports", "module", "regexCheck", "unicodeWhitespace", "exports", "module", "markdownLineEndingOrSpace", "unicodePunctuation", "unicodeWhitespace", "classifyCharacter", "code", "exports", "module", "movePoint", "point", "exports", "module", "chunkedPush", "classifyCharacter", "movePoint", "resolveAll", "attention", "tokenizeAttention", "resolveAllAttention", "index", "text", "ok", "start", "code", "exports", "module", "regexCheck", "asciiAlpha", "exports", "module", "regexCheck", "asciiAlphanumeric", "exports", "module", "regexCheck", "asciiAtext", "exports", "module", "asciiControl", "code", "exports", "module", "asciiAlpha", "asciiAlphanumeric", "asciiAtext", "asciiControl", "autolink", "tokenizeAutolink", "ok", "start", "code", "exports", "module", "markdownSpace", "factorySpace", "blockQuote", "tokenizeBlockQuoteStart", "tokenizeBlockQuoteContinuation", "exit", "ok", "self", "start", "code", "exports", "module", "regexCheck", "asciiPunctuation", "exports", "module", "asciiPunctuation", "characterEscape", "tokenizeCharacterEscape", "ok", "start", "code", "exports", "module", "exports", "module", "characterEntities", "own", "exports", "module", "regexCheck", "asciiDigit", "exports", "module", "regexCheck", "asciiHexDigit", "exports", "module", "asciiAlphanumeric", "asciiDigit", "asciiHexDigit", "e", "characterReference", "tokenizeCharacterReference", "ok", "self", "test", "start", "code", "exports", "module", "markdownLineEnding", "markdownLineEndingOrSpace", "factorySpace", "codeFenced", "tokenizeCodeFenced", "ok", "self", "start", "code", "content", "effects", "nok", "exports", "module", "markdownLineEnding", "factorySpace", "codeIndented", "tokenizeCodeIndented", "code", "ok", "content", "self", "exports", "module", "markdownLineEnding", "codeText", "tokenizeCodeText", "resolveCodeText", "previous", "index", "code", "ok", "start", "exports", "module", "asciiControl", "markdownLineEndingOrSpace", "markdownLineEnding", "ok", "start", "code", "exports", "module", "markdownLineEnding", "markdownSpace", "ok", "self", "start", "code", "exports", "module", "markdownLineEnding", "markdownSpace", "factorySpace", "ok", "start", "code", "exports", "module", "markdownLineEnding", "factorySpace", "ok", "start", "code", "exports", "module", "markdownLineEnding", "markdownLineEndingOrSpace", "normalizeIdentifier", "factoryDestination", "factoryLabel", "factorySpace", "factoryWhitespace", "factoryTitle", "definition", "tokenizeDefinition", "ok", "self", "start", "code", "exports", "module", "markdownLineEnding", "hardBreakEscape", "tokenizeHardBreakEscape", "ok", "start", "code", "exports", "module", "markdownLineEnding", "markdownLineEndingOrSpace", "markdownSpace", "factorySpace", "headingAtx", "tokenizeHeadingAtx", "resolveHeadingAtx", "content", "text", "ok", "self", "start", "code", "exports", "module", "exports", "module", "exports", "module", "asciiAlpha", "asciiAlphanumeric", "markdownLineEnding", "markdownLineEndingOrSpace", "markdownSpace", "htmlBlockNames", "htmlRawNames", "htmlFlow", "tokenizeHtmlFlow", "resolveToHtmlFlow", "index", "ok", "self", "start", "code", "exports", "module", "asciiAlpha", "asciiAlphanumeric", "markdownLineEnding", "markdownLineEndingOrSpace", "markdownSpace", "factorySpace", "htmlText", "tokenizeHtmlText", "ok", "self", "index", "start", "code", "exports", "module", "markdownLineEndingOrSpace", "chunkedPush", "normalizeIdentifier", "resolveAll", "factoryDestination", "factoryLabel", "factoryTitle", "factoryWhitespace", "labelEnd", "tokenizeLabelEnd", "resolveToLabelEnd", "resolveAllLabelEnd", "resourceConstruct", "tokenizeResource", "index", "text", "ok", "self", "start", "code", "exports", "module", "labelEnd", "labelStartImage", "tokenizeLabelStartImage", "ok", "self", "start", "code", "exports", "module", "labelEnd", "labelStartLink", "tokenizeLabelStartLink", "ok", "self", "start", "code", "exports", "module", "factorySpace", "lineEnding", "tokenizeLineEnding", "ok", "start", "code", "exports", "module", "markdownLineEnding", "markdownSpace", "factorySpace", "thematicBreak", "tokenizeThematicBreak", "ok", "start", "code", "exports", "module", "asciiDigit", "markdownSpace", "factorySpace", "thematicBreak", "list", "tokenizeListStart", "tokenizeListContinuation", "tokenizeListEnd", "listItemPrefixWhitespaceConstruct", "tokenizeListItemPrefixWhitespace", "indentConstruct", "tokenizeIndent", "ok", "self", "start", "code", "exports", "module", "markdownLineEnding", "factorySpace", "setextUnderline", "tokenizeSetextUnderline", "resolveToSetextUnderline", "index", "content", "text", "definition", "heading", "ok", "self", "paragraph", "start", "code", "exports", "attention", "autolink", "blockQuote", "characterEscape", "characterReference", "codeFenced", "codeIndented", "codeText", "definition", "hardBreakEscape", "headingAtx", "htmlFlow", "htmlText", "labelEnd", "labelStartImage", "labelStartLink", "lineEnding", "list", "setextUnderline", "thematicBreak", "document", "contentInitial", "flowInitial", "flow", "string", "text", "insideSpan", "disable", "exports", "module", "content", "document", "flow", "text", "combineExtensions", "createTokenizer", "constructs", "parse", "create", "exports", "module", "search", "preprocess", "start", "code", "exports", "module", "subtokenize", "postprocess", "exports", "module", "fromMarkdown", "toString", "own", "normalizeIdentifier", "postprocess", "decode", "stringifyPosition", "compiler", "configure", "link", "heading", "blockQuote", "codeText", "definition", "emphasis", "hardBreak", "html", "image", "listItem", "list", "paragraph", "strong", "thematicBreak", "index", "exit", "point", "start", "create", "node", "data", "text", "extension", "exports", "module", "exports", "module", "parse", "fromMarkdown", "self", "exports", "module", "visitParents", "visitor", "one", "node", "all", "index", "exports", "module", "exports", "module", "convert", "test", "ok", "typeFactory", "anyFactory", "all", "node", "checks", "index", "exports", "module", "color", "require_unist_util_visit_parents", "exports", "module", "visitParents", "convert", "color", "CONTINUE", "SKIP", "EXIT", "test", "visitor", "is", "node", "index", "name", "visit", "toResult", "exports", "module", "visit", "visitParents", "CONTINUE", "SKIP", "EXIT", "test", "visitor", "node", "index", "exports", "module", "visit", "node", "index", "exports", "visit", "splice", "node", "index", "transform", "exports", "e", "h", "t", "a", "u", "exports", "typeOf", "Fragment", "Portal", "Suspense", "isElement", "exports", "module", "exports", "module", "React", "node", "index", "Fragment", "listLoose", "listItemLoose", "exports", "module", "visit", "node", "wrap", "table", "exports", "module", "visit", "node", "exports", "module", "index", "exports", "module", "React", "List", "root", "code", "exports", "exports", "module", "unified", "parse", "PropTypes", "ReactMarkdown", "transform", "exports", "module", "number", "string", "search", "list", "name", "stringify", "e", "root", "start", "Component", "index", "a", "toString", "aProp", "normalize", "utc", "timezone", "h", "isDate", "t", "s", "o", "key", "valid", "self", "t2", "one", "prop", "exports", "module", "exports", "module", "ICAL", "e", "startTime", "endTime", "runtime", "exports", "Op", "Object", "prototype", "hasOwn", "hasOwnProperty", "$Symbol", "Symbol", "iteratorSymbol", "iterator", "asyncIteratorSymbol", "asyncIterator", "toStringTagSymbol", "toStringTag", "define", "obj", "key", "value", "defineProperty", "enumerable", "configurable", "writable", "err", "wrap", "innerFn", "outerFn", "self", "tryLocsList", "generator", "create", "Generator", "context", "Context", "_invoke", "state", "method", "arg", "Error", "done", "delegate", "delegateResult", "maybeInvokeDelegate", "ContinueSentinel", "sent", "_sent", "dispatchException", "abrupt", "record", "tryCatch", "type", "fn", "call", "GeneratorFunction", "GeneratorFunctionPrototype", "IteratorPrototype", "this", "getProto", "getPrototypeOf", "NativeIteratorPrototype", "values", "Gp", "defineIteratorMethods", "forEach", "AsyncIterator", "PromiseImpl", "previousPromise", "callInvokeWithMethodAndArg", "resolve", "reject", "invoke", "result", "__await", "then", "unwrapped", "error", "TypeError", "info", "resultName", "next", "nextLoc", "pushTryEntry", "locs", "entry", "tryLoc", "catchLoc", "finallyLoc", "afterLoc", "tryEntries", "push", "resetTryEntry", "completion", "reset", "iterable", "iteratorMethod", "isNaN", "length", "i", "doneResult", "constructor", "displayName", "isGeneratorFunction", "genFun", "ctor", "name", "mark", "setPrototypeOf", "__proto__", "awrap", "async", "Promise", "iter", "toString", "keys", "object", "reverse", "pop", "skipTempReset", "prev", "charAt", "slice", "undefined", "stop", "rootRecord", "rval", "exception", "handle", "loc", "caught", "hasCatch", "hasFinally", "finallyEntry", "complete", "finish", "catch", "thrown", "delegateYield", "module", "regeneratorRuntime", "accidentalStrictMode", "Function", "MMLTag", "node", "children", "attributes", "getText", "text", "t", "initialState", "e", "Card", "className", "React", "Icon", "CardHeader", "icon", "n", "CardBody", "ButtonList", "variant", "SvgIcon", "xmlns", "viewBox", "d", "path", "IconGoogle", "IconMicrosoft", "isMobile", "ua", "navigator", "userAgent", "test", "maxTouchPoints", "indexOf", "isIE", "window", "msSaveOrOpenBlob", "Blob", "CALENDAR_SERVICES", "id", "label", "formatTime", "date", "dayjs", "format", "createQueryString", "params", "reduce", "acc", "encodeURIComponent", "buildUrl", "event", "end", "title", "location", "description", "startFormatted", "start", "endFormatted", "details", "startdt", "enddt", "subject", "body", "allday", "url", "href", "join", "encodeURI", "AddToCalendar", "a", "handleLinkClick", "preventDefault", "currentTarget", "getAttribute", "startsWith", "open", "blob", "link", "document", "createElement", "URL", "createObjectURL", "setAttribute", "appendChild", "click", "removeChild", "map", "onClick", "target", "rel", "Button", "c", "sanitizeUrl", "input", "closest", "r", "Carousel", "slideWidth", "Children", "child", "cloneElement", "CarouselItem", "width", "finalWidth", "style", "flex", "minWidth", "Col", "offset", "align", "classNames", "Image", "src", "alt", "l", "trim", "Input", "o", "placeholder", "u", "useState", "setState", "htmlFor", "onChange", "Progress", "size", "thickness", "color", "parseFloat", "role", "height", "SIZE", "cx", "cy", "fill", "strokeWidth", "Loading", "loading", "truncate", "substring", "markDownRenderers", "props", "allowedMarkups", "MD", "matches", "singleMatch", "newText", "markdownLinks", "match", "exec", "linkify", "filter", "displayLink", "replace", "ReactMarkdown", "allowedTypes", "renderers", "source", "escapeHtml", "unwrapDisallowed", "transformLinkUri", "uri", "uriTransformer", "Number", "parseInt", "Row", "DatePickerSelect", "icalFilter", "getItemData", "itemClassName", "interval", "generateItems", "useCallback", "quantity", "firstIdx", "Array", "_", "idx", "newItem", "ITEMS_PER_PAGE", "items", "setItems", "firstItemIndex", "setFirstItemIndex", "initialIndexOffset", "useRef", "b", "selectedIdx", "setSelectedIdx", "handleClick", "item", "current", "nextFirstItemIdx", "missingTopItems", "appendItems", "lastItemIndex", "prependItems", "useEffect", "initialSelectedIdx", "isSelected", "Virtuoso", "data", "itemContent", "displayValue", "endReached", "startReached", "newValue", "add", "subtract", "currentValue", "isSame", "DatePickerDate", "extend", "isBetween", "DatePickerTime", "DatePicker", "dateInterval", "timeInterval", "dateFormat", "timeFormat", "fullDay", "selected", "setDate", "toISOString", "prevDate", "set", "get", "setupIcalFilter", "icalURL", "duration", "fetch", "redirect", "credentials", "response", "ok", "icalExpander", "IcalExpander", "ics", "maxIterations", "between", "toDate", "events", "Scheduler", "icalAvailability", "s", "m", "f", "h", "y", "setLoading", "setError", "setIcalFilter", "console", "warn", "ErrorComponent", "LoadingComponent", "startOf", "Success", "success", "Text", "converters", "button", "tag", "button_list", "add_to_calendar", "col", "row", "image", "md", "scheduler", "carousel", "number", "Tree", "customConvertors", "defaultConverters", "reactElements", "toReact", "parent", "reactNodes", "converter", "_this", "SourceToXML", "parseXml", "XMLtoMMLTree", "mmlNode", "convertNodes", "nodes", "element", "Parse", "onSubmit", "theme", "SuccessComponent", "submitState", "setSubmitState", "tree", "useMemo", "handleSubmit", "mml_name", "FormData", "exports", "undefined", "wrap", "self", "value", "keys", "key", "next", "name", "handle", "module", "isXmlElement", "node", "children", "MMLTag", "attributes", "getText", "type", "text", "length", "initialState", "Card", "className", "React", "Icon", "CardHeader", "icon", "CardBody", "ButtonList", "variant", "SvgIcon", "path", "xmlns", "viewBox", "d", "IconGoogle", "IconMicrosoft", "IconApple", "isMobile", "ua", "navigator", "userAgent", "mobileRE", "test", "maxTouchPoints", "indexOf", "isIE", "window", "msSaveOrOpenBlob", "Blob", "getCurrentURL", "location", "href", "CALENDAR_SERVICES", "id", "label", "formatTime", "date", "dayjs", "format", "createQueryString", "params", "Object", "reduce", "acc", "encodeURIComponent", "buildUrl", "event", "start", "end", "title", "description", "startFormatted", "endFormatted", "details", "startdt", "enddt", "subject", "body", "allday", "url", "join", "encodeURI", "AddToCalendar", "handleLinkClick", "preventDefault", "currentTarget", "getAttribute", "startsWith", "filename", "blob", "link", "document", "createElement", "URL", "createObjectURL", "setAttribute", "appendChild", "click", "removeChild", "open", "map", "onClick", "target", "rel", "Button", "sanitizeUrl", "input", "closest", "Carousel", "slideWidth", "Children", "child", "cloneElement", "CarouselItem", "width", "finalWidth", "style", "flex", "minWidth", "Col", "offset", "align", "classNames", "Error", "error", "Image", "src", "alt", "trim", "Input", "placeholder", "useState", "state", "setState", "htmlFor", "onChange", "SIZE", "Progress", "size", "thickness", "color", "parseFloat", "role", "height", "cx", "cy", "r", "fill", "strokeWidth", "Loading", "loading", "truncate", "substring", "matchMarkdownLinks", "message", "regexMdLinks", "matches", "match", "singleMatch", "links", "i", "exec", "MDLinkRender", "props", "markDownRenderers", "allowedMarkups", "MD", "newText", "markdownLinks", "linkify", "forEach", "noParsingNeeded", "filter", "displayLink", "replace", "ReactMarkdown", "allowedTypes", "renderers", "source", "escapeHtml", "unwrapDisallowed", "transformLinkUri", "uri", "uriTransformer", "Number", "parseInt", "Row", "ITEMS_PER_PAGE", "VERTICAL_COMPENSATION", "INITIAL_INDEX", "VIRTUOSO_START_INDEX", "DatePickerSelect", "icalFilter", "getItemData", "itemClassName", "interval", "generateItems", "useCallback", "quantity", "firstIdx", "Array", "_", "idx", "newItem", "items", "setItems", "firstItemIndex", "setFirstItemIndex", "initialIndexOffset", "useRef", "selectedIdx", "setSelectedIdx", "handleClick", "item", "current", "nextFirstItemIdx", "missingTopItems", "appendItems", "lastItemIndex", "prependItems", "useEffect", "initialSelectedIdx", "isSelected", "Virtuoso", "data", "itemContent", "displayValue", "endReached", "startReached", "newValue", "add", "subtract", "currentValue", "isSame", "DatePickerDate", "extend", "isBetween", "DatePickerTime", "DatePicker", "selected", "dateInterval", "timeInterval", "dateFormat", "timeFormat", "fullDay", "setDate", "handleChangeDate", "prevDate", "set", "get", "handleChangeTime", "toISOString", "setupIcalFilter", "icalURL", "duration", "fetch", "method", "redirect", "credentials", "response", "ok", "icalExpander", "IcalExpander", "ics", "maxIterations", "between", "toDate", "events", "Scheduler", "icalAvailability", "setLoading", "setError", "setIcalFilter", "then", "err", "console", "warn", "ErrorComponent", "LoadingComponent", "startOf", "Success", "success", "Text", "converters", "button", "tag", "button_list", "add_to_calendar", "col", "row", "image", "md", "scheduler", "carousel", "number", "Tree", "customConvertors", "defaultConverters", "reactElements", "toReact", "parent", "reactNodes", "converter", "hasOwnProperty", "call", "push", "SourceToXML", "unescapedAmps", "parseXml", "convertNodes", "nodes", "element", "XMLtoMMLTree", "mmlNode", "Parse", "XMLNodes", "MML", "onSubmit", "theme", "SuccessComponent", "submitState", "setSubmitState", "tree", "useMemo", "e", "handleSubmit", "mml_name", "FormData", "require_dist", "exports", "module", "DownloadIcon", "PauseIcon", "import_react", "import_react", "import_react_player", "import_clsx", "import_react", "React", "Component", "import_react", "React", "import_react", "React", "Component", "import_react", "Component", "React", "Component", "import_react", "React", "Component", "import_react", "import_react", "import_react", "import_react", "selector", "import_react", "React", "React", "import_react", "React", "Component", "import_react", "handleDelete", "e", "React", "import_react", "React", "import_react", "React", "import_react", "React", "import_react", "import_dayjs", "calendar", "t", "e", "Dayjs", "Dayjs", "calendar", "localizedFormat", "React", "Component", "import_react", "React", "Component", "import_react", "React", "text", "t", "name", "React", "import_react", "import_react", "import_react", "React", "import_react", "t", "React", "React", "import_react", "text", "name", "levenshtein", "t", "React", "import_react", "React", "clsx", "import_react", "React", "import_react", "React", "import_lodash", "import_react", "import_clsx", "a", "s", "root", "e", "throttle", "React", "clsx", "import_lodash", "import_react", "e", "t", "throttle", "rootClassName", "React", "import_react", "import_react", "import_react", "import_clsx", "React", "clsx", "FileArchiveIcon", "FileCodeIcon", "FileExcelIcon", "FilePdfIcon", "FilePowerPointIcon", "FileWordIcon", "FileAudioIcon", "FileImageIcon", "FileVideoIcon", "Icon", "React", "import_clsx", "import_react", "t", "React", "clsx", "import_clsx", "import_react", "import_react", "s", "e", "UploadButton", "React", "UploadFileInput", "t", "clsx", "t", "React", "import_react", "import_clsx", "BaseImage", "React", "clsx", "e", "import_react", "import_sanitize_url", "import_clsx", "import_clsx", "import_react", "import_react", "React", "t", "React", "clsx", "import_react", "e", "React", "index", "t", "image", "ImageGallery", "index", "BaseImage", "ModalGallery", "t", "image", "React", "clsx", "modalOpen", "import_react", "import_sanitize_url", "BaseImage", "ModalGallery", "modalIsOpen", "React", "import_react", "import_clsx", "t", "React", "clsx", "image", "ReactPlayer", "text", "rootClassName", "import_react", "React", "import_react", "t", "React", "clsx", "React", "AttachmentActions", "Gallery", "element", "image", "Image", "Card", "File", "Audio", "VoiceRecording", "ReactPlayer", "content", "UnsupportedAttachment", "React", "import_react", "import_clsx", "React", "Item", "Component", "clsx", "import_react", "import_clsx", "text", "test", "checks", "index", "all", "node", "test", "visitor", "is", "node", "index", "name", "visit", "test", "anyFactory", "castFactory", "checks", "index", "element", "string", "list", "visitor", "node", "index", "find", "replace", "start", "position", "node", "replace", "transform", "node", "emojiRegex", "test", "visitor", "node", "index", "replace", "name", "transform", "node", "index", "node", "visitor", "node", "index", "transform", "import_react", "ok", "emptyOptions", "name", "emptyOptions", "re", "empty", "space", "space", "index", "space", "index", "definition", "html", "svg", "stringify", "StyleToObject", "point", "node", "start", "position", "point", "index", "start", "own", "cap", "create", "svg", "html", "node", "element", "ok", "jsx", "jsxs", "_", "point", "name", "index", "stringify", "value", "emptyOptions", "one", "index", "own", "list", "start", "all", "index", "extension", "code", "list", "code", "code", "index", "start", "code", "replace", "ok", "start", "code", "previous", "code", "document", "self", "start", "code", "point", "index", "ok", "code", "constructs", "index", "index", "text", "start", "ok", "attentionMarkers", "previous", "code", "point", "ok", "start", "code", "ok", "start", "code", "ok", "self", "start", "code", "ok", "start", "code", "ok", "self", "test", "start", "code", "ok", "self", "start", "code", "effects", "nok", "ok", "self", "start", "code", "furtherStart", "index", "code", "ok", "self", "start", "index", "start", "list", "index", "previous", "start", "content", "ok", "previous", "code", "self", "ok", "start", "code", "ok", "self", "start", "code", "ok", "start", "code", "ok", "start", "code", "ok", "self", "start", "code", "titleBefore", "ok", "start", "code", "content", "text", "ok", "start", "code", "index", "ok", "self", "start", "code", "name", "ok", "self", "index", "start", "code", "index", "text", "ok", "self", "start", "code", "ok", "self", "start", "code", "ok", "self", "start", "code", "ok", "start", "code", "ok", "start", "code", "ok", "self", "start", "code", "index", "content", "text", "definition", "heading", "ok", "self", "start", "code", "paragraph", "self", "content", "code", "text", "self", "constructs", "start", "code", "list", "index", "document", "flow", "string", "text", "document", "flow", "string", "text", "point", "exit", "code", "constructs", "map", "start", "all", "list", "ok", "from", "index", "constructs", "create", "document", "text", "start", "code", "head", "stringifyPosition", "position", "point", "index", "own", "link", "heading", "blockQuote", "codeText", "definition", "emphasis", "hardBreak", "html", "image", "listItem", "list", "paragraph", "strong", "thematicBreak", "exit", "index", "point", "start", "create", "node", "stringifyPosition", "data", "text", "string", "extension", "self", "node", "node", "node", "node", "node", "node", "index", "link", "node", "html", "node", "node", "node", "definition", "node", "node", "text", "node", "definition", "node", "node", "paragraph", "index", "list", "node", "index", "node", "root", "node", "node", "node", "start", "node", "result", "node", "search", "start", "code", "text", "node", "thematicBreak", "node", "html", "list", "root", "text", "thematicBreak", "index", "map", "name", "toString", "index", "esm_default", "definition", "content", "listItem", "esm_default", "own", "emptyOptions", "handlers", "all", "one", "node", "map", "handle", "esm_default", "index", "code", "node", "ok", "index", "wrap", "index", "field", "path", "name", "self", "own", "index", "extend", "self", "file", "ok", "tree", "compiler", "value", "parameters", "name", "node", "isUint8Array", "urlTransform", "transform", "node", "index", "test", "import_lodash", "index", "escapeStringRegexp", "string", "findAndReplace", "list", "toPairs", "visitor", "node", "index", "find", "replace", "start", "position", "toExpression", "toFunction", "escapeStringRegexp", "node", "ok", "findAndReplace", "domain", "path", "previous", "trail", "code", "footnoteReference", "node", "ok", "exit", "index", "node", "exit", "table", "row", "sizes", "columnIndex", "serialize", "code", "blockquote", "node", "exit", "list", "index", "hardBreak", "index", "index", "node", "code", "node", "exit", "value", "map", "definition", "node", "exit", "code", "emphasis", "node", "exit", "node", "heading", "node", "exit", "subexit", "value", "html", "node", "image", "node", "exit", "imageReference", "node", "exit", "inlineCode", "node", "index", "position", "node", "link", "node", "exit", "value", "linkReference", "node", "exit", "text", "list", "node", "exit", "index", "listItem", "node", "exit", "map", "index", "paragraph", "node", "exit", "root", "node", "strong", "node", "exit", "text", "node", "thematicBreak", "blockquote", "hardBreak", "code", "definition", "emphasis", "heading", "html", "image", "imageReference", "inlineCode", "link", "linkReference", "list", "listItem", "paragraph", "root", "strong", "text", "thematicBreak", "exit", "ok", "node", "index", "node", "ok", "index", "text", "code", "ok", "self", "start", "trail", "index", "tokenizeIndent", "ok", "self", "index", "start", "code", "string", "index", "strikethrough", "text", "insideSpan", "ok", "previous", "start", "code", "index", "a", "element", "index", "ok", "self", "start", "code", "index", "map", "a", "table", "ok", "self", "code", "emptyOptions", "self", "import_clsx", "import_react", "isUrl", "React", "clsx", "import_react", "React", "import_react", "React", "import_react", "e", "text", "React", "uniqBy", "u", "position", "e", "index", "React", "clsx", "import_react", "import_clsx", "import_react", "React", "import_react", "import_clsx", "import_clsx", "import_react", "import_react", "React", "code", "image", "name", "React", "clsx", "import_react", "image", "name", "React", "import_clsx", "import_react", "React", "clsx", "image", "name", "Avatar", "React", "clsx", "React", "position", "e", "text", "a", "getCaretCoordinates", "element", "clsx", "Textarea", "PropTypes", "import_react", "import_lodash", "import_nanoid", "import_clsx", "import_react", "import_dayjs", "import_calendar", "import_localizedFormat", "import_de", "import_es", "import_fr", "import_hi", "import_it", "import_ja", "import_ko", "import_nl", "import_pt", "import_ru", "import_tr", "import_en", "Dayjs", "updateLocale", "utc", "timezone", "i18n", "LocalizedFormat", "calendar", "localeData", "relativeTime", "name", "t", "import_react", "import_react", "import_react", "name", "import_react", "React", "import_react", "t", "React", "import_react", "color", "React", "import_react", "React", "import_react", "import_react", "a", "import_react", "text", "import_react", "import_nanoid", "import_react", "import_nanoid", "t", "import_linkifyjs", "import_react", "import_lodash", "LinkPreviewState", "SetLinkPreviewMode", "debounce", "text", "link", "import_react", "import_stream_chat", "text", "import_react", "text", "t", "name", "import_react", "string", "import_react", "RecordingPermission", "e", "import_nanoid", "import_lodash", "mergeWith", "logError", "e", "e", "logError", "logError", "e", "MediaRecordingState", "t", "fixWebmDuration", "e", "logError", "t", "recording", "text", "React", "import_react", "import_react", "import_clsx", "React", "clsx", "t", "React", "import_react", "import_react", "import_emoji_regex", "CustomMessageActionsList", "deepequal", "t", "text", "emojiRegex", "t", "e", "errorMessage", "import_react", "t", "e", "errorMessage", "t", "e", "errorMessage", "t", "e", "errorMessage", "t", "e", "errorMessage", "import_react", "import_lodash", "import_react", "React", "import_react", "import_react", "import_react", "import_clsx", "import_react", "calendar", "t", "React", "import_clsx", "import_react", "position", "React", "clsx", "import_lodash", "import_react", "import_react", "import_clsx", "import_react", "import_clsx", "import_react", "import_clsx", "import_react", "LoadingErrorIndicator", "LoadingIndicator", "t", "React", "import_react", "import_react", "import_react", "import_lodash", "import_lodash", "channel", "uniqBy", "index", "uniqBy", "import_react", "e", "import_clsx", "import_react", "import_react", "import_lodash", "uniqBy", "text", "results", "u", "debounce", "import_react", "import_clsx", "import_react", "React", "import_react", "t", "React", "React", "clsx", "MenuIcon", "SearchInput", "e", "import_react", "import_clsx", "t", "React", "index", "clsx", "MenuIcon", "SearchBar", "SearchInput", "React", "clsx", "import_react", "import_react", "React", "t", "text", "React", "import_react", "import_react", "t", "React", "LoadMoreButton", "React", "Avatar", "ChannelSearch", "EmptyStateIndicator", "getLatestMessagePreview", "List", "LoadingErrorIndicator", "LoadingIndicator", "channels", "setChannels", "React", "clsx", "channel", "import_react", "import_react", "import_react", "import_react", "import_react", "import_lodash", "uniqBy", "import_react", "import_lodash", "uniqBy", "import_react", "import_lodash", "uniqBy", "import_react", "import_lodash", "uniqBy", "import_react", "import_react", "import_react", "import_shim", "noop", "selector", "keys", "import_react", "Icon", "React", "t", "React", "clsx", "e", "Icon", "Avatar", "ChannelPreviewActionButtons", "e", "React", "clsx", "import_react", "import_react", "import_react", "text", "React", "t", "import_react", "MessageDeliveryStatus", "getLatestMessagePreview", "t", "throttle", "React", "import_react", "import_clsx", "React", "clsx", "selector", "clsx", "selector", "React", "ThreadListItemUI", "React", "import_react", "React", "import_react", "selector", "React", "import_react", "selector", "LoadingIndicator", "React", "selector", "ThreadListEmptyPlaceholder", "ThreadListItem", "ThreadListLoadingIndicator", "ThreadListUnseenThreadsBanner", "React", "message", "throttle", "t", "e", "errorMessage", "import_react", "text", "import_react", "import_clsx", "import_react", "React", "t", "import_react", "MessageBouncePrompt", "React", "import_react", "handleDelete", "t", "handle", "e", "React", "import_react", "t", "React", "import_react", "import_clsx", "t", "clsx", "React", "import_clsx", "import_react", "import_clsx", "import_react", "import_clsx", "import_react", "import_react", "React", "getMessageActions", "handleDelete", "isUserMuted", "CustomMessageActionsList", "t", "rootClassName", "clsx", "React", "import_clsx", "import_react", "import_focus", "React", "clsx", "ActionsIcon", "CustomMessageActionsList", "t", "getMessageActions", "handleDelete", "React", "clsx", "import_react", "import_react", "import_clsx", "import_react", "import_react", "import_react", "image", "position", "React", "position", "React", "React", "Avatar", "React", "clsx", "Component", "e", "ReactionIcon", "t", "ReactionSelector", "React", "ActionsIcon", "ReactionIcon", "ThreadIcon", "getMessageActions", "t", "React", "clsx", "import_react", "t", "React", "import_react", "import_clsx", "import_react", "import_react_popper", "React", "import_react", "e", "t", "Avatar", "rootClassName", "React", "clsx", "import_clsx", "import_react", "import_react", "import_clsx", "import_react", "import_clsx", "import_react", "import_react", "t", "name", "React", "import_react", "import_react", "import_clsx", "import_clsx", "import_react", "text", "React", "clsx", "t", "React", "clsx", "pollStateSelector", "t", "React", "import_react", "import_clsx", "React", "clsx", "className", "import_react", "t", "React", "import_react", "import_react", "React", "import_react", "pollStateSelector", "t", "React", "import_react", "import_react", "import_clsx", "React", "clsx", "import_react", "t", "React", "import_react", "import_react", "import_stream_chat", "import_lodash", "import_react", "import_stream_chat", "uniqBy", "import_react", "paginationStateSelector", "votes", "import_clsx", "import_lodash", "import_react", "debounce", "root", "React", "clsx", "pollStateSelector", "t", "React", "import_react", "import_clsx", "import_react", "import_clsx", "import_lodash", "import_react", "import_stream_chat", "React", "clsx", "pollStateSelector", "t", "debounce", "pollStateSelector", "PollOptionSelector", "React", "clsx", "pollStateSelector", "t", "name", "React", "import_clsx", "import_react", "import_react", "import_react", "pollStateSelector", "t", "React", "React", "import_react", "pollStateSelector", "t", "React", "pollStateSelector", "t", "name", "React", "clsx", "pollStateSelector", "AddCommentForm", "EndPollDialog", "PollAnswerList", "PollOptionsFullList", "PollResults", "SuggestPollOptionForm", "t", "React", "PollActions", "PollHeader", "React", "clsx", "import_clsx", "import_react", "name", "React", "clsx", "PollContent", "QuotedPoll", "React", "import_clsx", "import_nanoid", "import_react", "import_clsx", "import_nanoid", "import_react", "import_react", "import_clsx", "order", "React", "index", "e", "clsx", "t", "index", "React", "clsx", "e", "prev", "import_react", "t", "o", "React", "e", "import_clsx", "import_react", "React", "clsx", "t", "React", "clsx", "e", "Attachment", "t", "renderText", "Avatar", "React", "clsx", "e", "import_react", "t", "React", "QuotedMessage", "renderText", "React", "clsx", "import_react", "Timestamp", "React", "import_nanoid", "import_react", "import_react", "import_nanoid", "React", "t", "DownloadIcon", "PauseIcon", "import_react", "import_clsx", "React", "clsx", "import_react", "React", "React", "t", "PollCreationDialog", "a", "import_react", "import_react", "t", "React", "DownloadIcon", "import_react", "import_react", "t", "React", "import_react", "import_react", "import_clsx", "import_react", "React", "clsx", "React", "PauseIcon", "import_react", "import_react", "React", "React", "PauseIcon", "import_react", "React", "React", "import_react", "t", "React", "DownloadIcon", "import_clsx", "import_react", "t", "BaseImage", "React", "clsx", "FileAttachmentPreview", "ImageAttachmentPreview", "UnsupportedAttachmentPreview", "VoiceRecordingPreview", "React", "import_react", "import_react", "React", "import_react", "t", "text", "a", "result", "import_react", "React", "name", "import_react", "import_lodash", "throttle", "text", "params", "React", "import_react", "import_react", "import_clsx", "import_react_dropzone", "import_react", "React", "import_react", "t", "React", "import_react", "import_react", "import_react", "React", "number", "MessageDeleted", "handleDelete", "React", "import_react", "renderText", "text", "React", "t", "React", "renderText", "Attachment", "Avatar", "import_clsx", "import_react", "React", "clsx", "import_react", "t", "React", "import_react", "import_react", "t", "React", "t", "text", "AttachmentPreviewList", "AttachmentSelector", "AudioRecorder", "CooldownTimer", "LinkPreviewList", "QuotedMessagePreview", "RecordingPermissionDeniedNotification", "SendButton", "StartRecordingAudioButton", "a", "e", "React", "StopAIGenerationButton", "clsx", "t", "React", "import_react", "React", "import_react", "import_clsx", "import_react", "import_clsx", "import_react", "reactions", "e", "React", "clsx", "import_react", "a", "t", "ReactionsListModal", "React", "clsx", "import_react", "import_clsx", "React", "clsx", "import_react", "import_clsx", "t", "Timestamp", "React", "clsx", "renderText", "t", "Attachment", "Avatar", "MessageOptions", "MessageActions", "MessageBlocked", "MessageDeleted", "MessageBouncePrompt", "MessageRepliesCountButton", "MessageStatus", "MessageTimestamp", "ReactionsList", "StreamedMessageText", "PinIndicator", "React", "rootClassName", "clsx", "React", "handleDelete", "React", "import_clsx", "import_react", "import_react", "import_nanoid", "e", "import_react", "import_react", "import_react", "import_react", "element", "import_react", "import_react", "React", "import_react", "t", "React", "element", "import_react", "import_react", "React", "import_react", "MessageNotification", "t", "React", "import_react", "import_react", "color", "React", "CloseIcon", "t", "React", "CloseIcon", "import_react", "mousewheelListener", "element", "React", "import_react", "import_clsx", "t", "name", "React", "clsx", "import_react", "import_react", "calendar", "position", "t", "React", "import_react", "Avatar", "calendar", "t", "text", "React", "name", "DateSeparator", "UnreadMessagesSeparator", "index", "React", "React", "EmptyStateIndicator", "LoadingIndicator", "MessageListMainPanel", "MessageListNotifications", "MessageNotification", "TypingIndicator", "UnreadMessagesNotification", "element", "clsx", "import_react", "import_clsx", "React", "clsx", "import_react", "import_react_virtuoso", "import_react", "import_react", "import_react", "import_react", "import_react", "import_react", "import_react", "import_clsx", "import_lodash", "import_react", "throttle", "Item", "React", "clsx", "LoadingIndicator", "EmptyStateIndicator", "DateSeparator", "UnreadMessagesSeparator", "import_react", "React", "e", "element", "index", "DateSeparator", "GiphyPreviewMessage", "MessageListMainPanel", "MessageListNotifications", "MessageNotification", "TypingIndicator", "UnreadMessagesNotification", "UnreadMessagesSeparator", "computeItemKey", "numItemsPrepended", "processedMessages", "React", "Item", "import_nanoid", "text", "linkify", "element", "number", "searchControllerStateSelector", "clsx", "React", "EmptyPlaceholder", "LoadingErrorIndicator", "LoadingIndicator", "defaultsDeep", "t", "throttle", "e", "debounce", "text", "id", "import_react", "import_react", "MenuIcon", "t", "React", "Avatar", "MenuIcon", "t", "React", "import_react", "import_stream_chat", "import_react", "t", "import_react", "import_react", "React", "import_react", "import_stream_chat", "import_react", "import_clsx", "import_react", "import_react", "CloseIcon", "t", "React", "t", "React", "CloseIcon", "import_react", "import_react", "t", "React", "ThreadStart", "React", "React", "selector", "ThreadHead", "ThreadHeader", "clsx", "import_react", "import_clsx", "React", "clsx"]
}
