@jvs-milkdown/components 1.1.9 → 1.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/code-block/index.js +37 -2
- package/lib/code-block/index.js.map +1 -1
- package/lib/image-block/index.js +628 -107
- package/lib/image-block/index.js.map +1 -1
- package/lib/table-block/index.js +135 -64
- package/lib/table-block/index.js.map +1 -1
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/package.json +10 -10
- package/src/code-block/config.ts +4 -0
- package/src/code-block/view/components/code-block.tsx +24 -0
- package/src/code-block/view/node-view.ts +15 -0
- package/src/image-block/config.ts +10 -0
- package/src/image-block/schema.ts +16 -0
- package/src/image-block/view/components/__tests__/image-viewer.onImageLoadError.spec.tsx +14 -0
- package/src/image-block/view/components/image-block.tsx +40 -0
- package/src/image-block/view/components/image-viewer.tsx +548 -65
- package/src/image-block/view/index.ts +42 -0
- package/src/table-block/view/component.tsx +116 -46
- package/src/table-block/view/operation.ts +55 -30
- package/lib/__internal__/components/icon.d.ts +0 -24
- package/lib/__internal__/components/icon.d.ts.map +0 -1
- package/lib/__internal__/components/image-input.d.ts +0 -17
- package/lib/__internal__/components/image-input.d.ts.map +0 -1
- package/lib/__internal__/keep-alive.d.ts +0 -2
- package/lib/__internal__/keep-alive.d.ts.map +0 -1
- package/lib/__internal__/meta.d.ts +0 -3
- package/lib/__internal__/meta.d.ts.map +0 -1
- package/lib/__tests__/setup.d.ts +0 -2
- package/lib/__tests__/setup.d.ts.map +0 -1
- package/lib/code-block/config.d.ts +0 -23
- package/lib/code-block/config.d.ts.map +0 -1
- package/lib/code-block/index.d.ts +0 -5
- package/lib/code-block/index.d.ts.map +0 -1
- package/lib/code-block/view/components/code-block.d.ts +0 -16
- package/lib/code-block/view/components/code-block.d.ts.map +0 -1
- package/lib/code-block/view/components/copy-button.d.ts +0 -9
- package/lib/code-block/view/components/copy-button.d.ts.map +0 -1
- package/lib/code-block/view/components/language-picker.d.ts +0 -5
- package/lib/code-block/view/components/language-picker.d.ts.map +0 -1
- package/lib/code-block/view/components/preview-panel.d.ts +0 -9
- package/lib/code-block/view/components/preview-panel.d.ts.map +0 -1
- package/lib/code-block/view/index.d.ts +0 -3
- package/lib/code-block/view/index.d.ts.map +0 -1
- package/lib/code-block/view/loader.d.ts +0 -13
- package/lib/code-block/view/loader.d.ts.map +0 -1
- package/lib/code-block/view/node-view.d.ts +0 -40
- package/lib/code-block/view/node-view.d.ts.map +0 -1
- package/lib/image-block/config.d.ts +0 -16
- package/lib/image-block/config.d.ts.map +0 -1
- package/lib/image-block/convert-plugin.d.ts +0 -2
- package/lib/image-block/convert-plugin.d.ts.map +0 -1
- package/lib/image-block/index.d.ts +0 -9
- package/lib/image-block/index.d.ts.map +0 -1
- package/lib/image-block/paste-rule.d.ts +0 -2
- package/lib/image-block/paste-rule.d.ts.map +0 -1
- package/lib/image-block/remark-plugin.d.ts +0 -2
- package/lib/image-block/remark-plugin.d.ts.map +0 -1
- package/lib/image-block/schema.d.ts +0 -3
- package/lib/image-block/schema.d.ts.map +0 -1
- package/lib/image-block/view/components/__tests__/image-viewer.onImageLoadError.spec.d.ts +0 -2
- package/lib/image-block/view/components/__tests__/image-viewer.onImageLoadError.spec.d.ts.map +0 -1
- package/lib/image-block/view/components/image-block.d.ts +0 -19
- package/lib/image-block/view/components/image-block.d.ts.map +0 -1
- package/lib/image-block/view/components/image-viewer.d.ts +0 -3
- package/lib/image-block/view/components/image-viewer.d.ts.map +0 -1
- package/lib/image-block/view/index.d.ts +0 -3
- package/lib/image-block/view/index.d.ts.map +0 -1
- package/lib/image-inline/components/image-inline.d.ts +0 -18
- package/lib/image-inline/components/image-inline.d.ts.map +0 -1
- package/lib/image-inline/config.d.ts +0 -11
- package/lib/image-inline/config.d.ts.map +0 -1
- package/lib/image-inline/index.d.ts +0 -5
- package/lib/image-inline/index.d.ts.map +0 -1
- package/lib/image-inline/view.d.ts +0 -3
- package/lib/image-inline/view.d.ts.map +0 -1
- package/lib/index.d.ts +0 -2
- package/lib/index.d.ts.map +0 -1
- package/lib/link-tooltip/command.d.ts +0 -2
- package/lib/link-tooltip/command.d.ts.map +0 -1
- package/lib/link-tooltip/configure.d.ts +0 -3
- package/lib/link-tooltip/configure.d.ts.map +0 -1
- package/lib/link-tooltip/edit/component.d.ts +0 -11
- package/lib/link-tooltip/edit/component.d.ts.map +0 -1
- package/lib/link-tooltip/edit/edit-configure.d.ts +0 -3
- package/lib/link-tooltip/edit/edit-configure.d.ts.map +0 -1
- package/lib/link-tooltip/edit/edit-view.d.ts +0 -15
- package/lib/link-tooltip/edit/edit-view.d.ts.map +0 -1
- package/lib/link-tooltip/index.d.ts +0 -7
- package/lib/link-tooltip/index.d.ts.map +0 -1
- package/lib/link-tooltip/preview/component.d.ts +0 -11
- package/lib/link-tooltip/preview/component.d.ts.map +0 -1
- package/lib/link-tooltip/preview/preview-configure.d.ts +0 -3
- package/lib/link-tooltip/preview/preview-configure.d.ts.map +0 -1
- package/lib/link-tooltip/preview/preview-view.d.ts +0 -14
- package/lib/link-tooltip/preview/preview-view.d.ts.map +0 -1
- package/lib/link-tooltip/slices.d.ts +0 -34
- package/lib/link-tooltip/slices.d.ts.map +0 -1
- package/lib/link-tooltip/tooltips.d.ts +0 -3
- package/lib/link-tooltip/tooltips.d.ts.map +0 -1
- package/lib/link-tooltip/utils.d.ts +0 -14
- package/lib/link-tooltip/utils.d.ts.map +0 -1
- package/lib/list-item-block/component.d.ts +0 -19
- package/lib/list-item-block/component.d.ts.map +0 -1
- package/lib/list-item-block/config.d.ts +0 -13
- package/lib/list-item-block/config.d.ts.map +0 -1
- package/lib/list-item-block/index.d.ts +0 -6
- package/lib/list-item-block/index.d.ts.map +0 -1
- package/lib/list-item-block/view.d.ts +0 -3
- package/lib/list-item-block/view.d.ts.map +0 -1
- package/lib/table-block/config.d.ts +0 -8
- package/lib/table-block/config.d.ts.map +0 -1
- package/lib/table-block/dnd/calc-drag-over.d.ts +0 -3
- package/lib/table-block/dnd/calc-drag-over.d.ts.map +0 -1
- package/lib/table-block/dnd/create-drag-handler.d.ts +0 -5
- package/lib/table-block/dnd/create-drag-handler.d.ts.map +0 -1
- package/lib/table-block/dnd/drag-over-handler.d.ts +0 -3
- package/lib/table-block/dnd/drag-over-handler.d.ts.map +0 -1
- package/lib/table-block/dnd/prepare-dnd-context.d.ts +0 -3
- package/lib/table-block/dnd/prepare-dnd-context.d.ts.map +0 -1
- package/lib/table-block/dnd/preview.d.ts +0 -3
- package/lib/table-block/dnd/preview.d.ts.map +0 -1
- package/lib/table-block/index.d.ts +0 -5
- package/lib/table-block/index.d.ts.map +0 -1
- package/lib/table-block/view/component.d.ts +0 -16
- package/lib/table-block/view/component.d.ts.map +0 -1
- package/lib/table-block/view/drag.d.ts +0 -10
- package/lib/table-block/view/drag.d.ts.map +0 -1
- package/lib/table-block/view/index.d.ts +0 -2
- package/lib/table-block/view/index.d.ts.map +0 -1
- package/lib/table-block/view/operation.d.ts +0 -13
- package/lib/table-block/view/operation.d.ts.map +0 -1
- package/lib/table-block/view/pointer.d.ts +0 -7
- package/lib/table-block/view/pointer.d.ts.map +0 -1
- package/lib/table-block/view/types.d.ts +0 -28
- package/lib/table-block/view/types.d.ts.map +0 -1
- package/lib/table-block/view/utils.d.ts +0 -12
- package/lib/table-block/view/utils.d.ts.map +0 -1
- package/lib/table-block/view/view.d.ts +0 -22
- package/lib/table-block/view/view.d.ts.map +0 -1
package/lib/code-block/index.js
CHANGED
|
@@ -51,7 +51,9 @@ const defaultConfig = {
|
|
|
51
51
|
renderPreview: () => null,
|
|
52
52
|
previewToggleButton: (previewOnlyMode) => previewOnlyMode ? "Edit" : "Hide",
|
|
53
53
|
previewLabel: "Preview",
|
|
54
|
-
previewLoading: "Loading..."
|
|
54
|
+
previewLoading: "Loading...",
|
|
55
|
+
wrapText: "Wrap",
|
|
56
|
+
wrapIcon: ""
|
|
55
57
|
};
|
|
56
58
|
const codeBlockConfig = $ctx(defaultConfig, "codeBlockConfigCtx");
|
|
57
59
|
withMeta(codeBlockConfig, {
|
|
@@ -442,6 +444,14 @@ const CodeBlock = defineComponent({
|
|
|
442
444
|
config: {
|
|
443
445
|
type: Object,
|
|
444
446
|
required: true
|
|
447
|
+
},
|
|
448
|
+
wordWrap: {
|
|
449
|
+
type: Object,
|
|
450
|
+
required: true
|
|
451
|
+
},
|
|
452
|
+
toggleWordWrap: {
|
|
453
|
+
type: Function,
|
|
454
|
+
required: true
|
|
445
455
|
}
|
|
446
456
|
},
|
|
447
457
|
setup(props) {
|
|
@@ -501,6 +511,18 @@ const CodeBlock = defineComponent({
|
|
|
501
511
|
onCopy: (_a2 = props.config.onCopy) != null ? _a2 : empty,
|
|
502
512
|
text: props.text.value
|
|
503
513
|
}
|
|
514
|
+
), /* @__PURE__ */ h(
|
|
515
|
+
"button",
|
|
516
|
+
{
|
|
517
|
+
class: props.wordWrap.value ? "word-wrap-active" : "",
|
|
518
|
+
onClick: (e) => {
|
|
519
|
+
e.preventDefault();
|
|
520
|
+
e.stopPropagation();
|
|
521
|
+
props.toggleWordWrap();
|
|
522
|
+
}
|
|
523
|
+
},
|
|
524
|
+
props.config.wrapIcon ? /* @__PURE__ */ h(Icon, { icon: props.config.wrapIcon }) : null,
|
|
525
|
+
props.config.wrapText || "Wrap"
|
|
504
526
|
), preview.value ? /* @__PURE__ */ h(
|
|
505
527
|
"button",
|
|
506
528
|
{
|
|
@@ -548,6 +570,7 @@ class CodeMirrorBlock {
|
|
|
548
570
|
this.selected = ref(false);
|
|
549
571
|
this.language = ref("");
|
|
550
572
|
this.text = ref("");
|
|
573
|
+
this.wordWrap = ref(false);
|
|
551
574
|
this.updating = false;
|
|
552
575
|
this.languageName = "";
|
|
553
576
|
this.forwardUpdate = (update) => {
|
|
@@ -583,7 +606,9 @@ class CodeMirrorBlock {
|
|
|
583
606
|
getAllLanguages: this.getAllLanguages,
|
|
584
607
|
getReadOnly: () => !this.view.editable,
|
|
585
608
|
setLanguage: this.setLanguage,
|
|
586
|
-
config: this.config
|
|
609
|
+
config: this.config,
|
|
610
|
+
wordWrap: this.wordWrap,
|
|
611
|
+
toggleWordWrap: this.toggleWordWrap
|
|
587
612
|
});
|
|
588
613
|
};
|
|
589
614
|
this.codeMirrorKeymap = () => {
|
|
@@ -656,16 +681,26 @@ class CodeMirrorBlock {
|
|
|
656
681
|
)
|
|
657
682
|
);
|
|
658
683
|
};
|
|
684
|
+
this.toggleWordWrap = () => {
|
|
685
|
+
this.wordWrap.value = !this.wordWrap.value;
|
|
686
|
+
this.cm.dispatch({
|
|
687
|
+
effects: this.lineWrappingConf.reconfigure(
|
|
688
|
+
this.wordWrap.value ? [EditorView.lineWrapping] : []
|
|
689
|
+
)
|
|
690
|
+
});
|
|
691
|
+
};
|
|
659
692
|
this.getAllLanguages = () => {
|
|
660
693
|
return this.loader.getAll();
|
|
661
694
|
};
|
|
662
695
|
this.languageConf = new Compartment();
|
|
663
696
|
this.readOnlyConf = new Compartment();
|
|
697
|
+
this.lineWrappingConf = new Compartment();
|
|
664
698
|
this.cm = new EditorView({
|
|
665
699
|
doc: this.node.textContent,
|
|
666
700
|
root: this.view.root,
|
|
667
701
|
extensions: [
|
|
668
702
|
this.readOnlyConf.of(EditorState.readOnly.of(!this.view.editable)),
|
|
703
|
+
this.lineWrappingConf.of([]),
|
|
669
704
|
drawSelection(),
|
|
670
705
|
keymap.of(this.codeMirrorKeymap()),
|
|
671
706
|
this.languageConf.of([]),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/__internal__/meta.ts","../../src/code-block/config.ts","../../src/code-block/view/loader.ts","../../src/__internal__/keep-alive.ts","../../src/__internal__/components/icon.tsx","../../src/code-block/view/components/copy-button.tsx","../../src/code-block/view/components/language-picker.tsx","../../src/code-block/view/components/preview-panel.tsx","../../src/code-block/view/components/code-block.tsx","../../src/code-block/view/node-view.ts","../../src/code-block/view/index.ts","../../src/code-block/index.ts"],"sourcesContent":["import type { Meta, MilkdownPlugin } from '@jvs-milkdown/ctx'\n\nexport function withMeta<T extends MilkdownPlugin>(\n plugin: T,\n meta: Partial<Meta> & Pick<Meta, 'displayName'>\n): T {\n Object.assign(plugin, {\n meta: {\n package: '@jvs-milkdown/components',\n ...meta,\n },\n })\n\n return plugin\n}\n","import type { LanguageDescription } from '@codemirror/language'\nimport type { Extension } from '@codemirror/state'\n\nimport { $ctx } from '@jvs-milkdown/utils'\n\nimport { withMeta } from '../__internal__/meta'\n\nexport interface CodeBlockConfig {\n extensions: Extension[]\n languages: LanguageDescription[]\n expandIcon: string\n searchIcon: string\n clearSearchIcon: string\n searchPlaceholder: string\n noResultText: string\n copyText: string\n copyIcon: string\n onCopy?: (text: string) => void\n renderLanguage: (language: string, selected: boolean) => string\n renderPreview: (\n language: string,\n content: string,\n applyPreview: (value: null | string | HTMLElement) => void\n ) => void | null | string | HTMLElement\n previewToggleButton: (previewOnlyMode: boolean) => string\n previewLabel: string\n previewOnlyByDefault?: boolean\n previewLoading: string | HTMLElement\n}\n\nexport const defaultConfig: CodeBlockConfig = {\n extensions: [],\n languages: [],\n expandIcon: '⬇',\n searchIcon: '🔍',\n clearSearchIcon: '⌫',\n searchPlaceholder: 'Search language',\n noResultText: 'No result',\n copyText: 'Copy',\n copyIcon: '📋',\n onCopy: () => {},\n renderLanguage: (language) => language,\n renderPreview: () => null,\n previewToggleButton: (previewOnlyMode) => (previewOnlyMode ? 'Edit' : 'Hide'),\n previewLabel: 'Preview',\n previewLoading: 'Loading...',\n}\n\nexport const codeBlockConfig = $ctx(defaultConfig, 'codeBlockConfigCtx')\n\nwithMeta(codeBlockConfig, {\n displayName: 'Config<code-block>',\n group: 'CodeBlock',\n})\n","import type { LanguageDescription, LanguageSupport } from '@codemirror/language'\n\nexport interface LanguageInfo {\n name: string\n alias: readonly string[]\n}\n\nexport class LanguageLoader {\n private readonly map: Record<string, LanguageDescription>\n\n constructor(private languages: LanguageDescription[]) {\n this.map = {}\n\n languages.forEach((language) => {\n language.alias.forEach((alias) => {\n this.map[alias] = language\n })\n })\n }\n\n getAll(): LanguageInfo[] {\n return this.languages.map((language): LanguageInfo => {\n return {\n name: language.name,\n alias: language.alias,\n }\n })\n }\n\n load(languageName: string): Promise<LanguageSupport | undefined> {\n const languageMap = this.map\n const language = languageMap[languageName.toLowerCase()]\n\n if (!language) return Promise.resolve(undefined)\n\n if (language.support) return Promise.resolve(language.support)\n\n return language.load()\n }\n}\n","// Prevent tree-shaking from removing Vue's `h` and `Fragment`,\n// which are required at runtime for TSX to work.\nexport function keepAlive(..._args: unknown[]) {}\n","import clsx from 'clsx'\nimport DOMPurify from 'dompurify'\nimport { h } from 'vue'\n\nimport { keepAlive } from '../keep-alive'\n\nkeepAlive(h)\n\ntype IconProps = {\n icon?: string | null\n class?: string\n onClick?: (event: PointerEvent) => void\n}\n\nexport function Icon({ icon, class: className, onClick }: IconProps) {\n return (\n <span\n class={clsx('milkdown-icon', className)}\n onPointerdown={onClick}\n innerHTML={icon ? DOMPurify.sanitize(icon.trim()) : undefined}\n />\n )\n}\n\nIcon.props = {\n icon: {\n type: String,\n required: false,\n },\n class: {\n type: String,\n required: false,\n },\n onClick: {\n type: Function,\n required: false,\n },\n}\n","import { defineComponent, h, Fragment } from 'vue'\n\nimport { Icon } from '../../../__internal__/components/icon'\nimport { keepAlive } from '../../../__internal__/keep-alive'\n\nkeepAlive(h, Fragment)\n\ntype CopyButtonProps = {\n copyText: string\n copyIcon: string\n onCopy: (text: string) => void\n text: string\n}\n\nasync function copyToClipboard(text: string) {\n try {\n return navigator.clipboard.writeText(text)\n } catch {\n const element = document.createElement('textarea')\n const previouslyFocusedElement = document.activeElement\n\n element.value = text\n\n // Prevent keyboard from showing on mobile\n element.setAttribute('readonly', '')\n\n element.style.contain = 'strict'\n element.style.position = 'absolute'\n element.style.left = '-9999px'\n element.style.fontSize = '12pt' // Prevent zooming on iOS\n\n const selection = document.getSelection()\n const originalRange = selection\n ? selection.rangeCount > 0 && selection.getRangeAt(0)\n : null\n\n document.body.appendChild(element)\n element.select()\n\n // Explicit selection workaround for iOS\n element.selectionStart = 0\n element.selectionEnd = text.length\n\n document.execCommand('copy')\n document.body.removeChild(element)\n\n if (originalRange) {\n selection!.removeAllRanges() // originalRange can't be truthy when selection is falsy\n selection!.addRange(originalRange)\n }\n\n // Get the focus back on the previously focused element, if any\n if (previouslyFocusedElement) {\n ;(previouslyFocusedElement as HTMLElement).focus()\n }\n }\n}\n\nexport const CopyButton = defineComponent<CopyButtonProps>({\n props: {\n copyText: {\n type: String,\n required: true,\n },\n copyIcon: {\n type: String,\n required: true,\n },\n onCopy: {\n type: Function,\n required: true,\n },\n text: {\n type: String,\n required: true,\n },\n },\n setup(props) {\n const onCopyCode = () => {\n copyToClipboard(props.text)\n .then(() => props.onCopy(props.text))\n .catch(console.error)\n }\n\n return () => {\n return (\n <>\n <button type=\"button\" class=\"copy-button\" onClick={onCopyCode}>\n <Icon icon={props.copyIcon} />\n {props.copyText}\n </button>\n </>\n )\n }\n },\n})\n","import { computePosition } from '@floating-ui/dom'\nimport clsx from 'clsx'\nimport {\n computed,\n defineComponent,\n ref,\n h,\n Fragment,\n onMounted,\n onUnmounted,\n watch,\n} from 'vue'\n\nimport type { CodeBlockProps } from './code-block'\n\nimport { Icon } from '../../../__internal__/components/icon'\nimport { keepAlive } from '../../../__internal__/keep-alive'\n\nkeepAlive(h, Fragment)\n\ntype LanguagePickerProps = Pick<\n CodeBlockProps,\n 'language' | 'config' | 'setLanguage' | 'getAllLanguages' | 'getReadOnly'\n>\n\nexport const LanguagePicker = defineComponent<LanguagePickerProps>({\n props: {\n language: {\n type: Object,\n required: true,\n },\n getReadOnly: {\n type: Function,\n required: true,\n },\n config: {\n type: Object,\n required: true,\n },\n getAllLanguages: {\n type: Function,\n required: true,\n },\n setLanguage: {\n type: Function,\n required: true,\n },\n },\n setup({ language, config, setLanguage, getAllLanguages, getReadOnly }) {\n const triggerRef = ref<HTMLButtonElement>()\n const showPicker = ref(false)\n const searchRef = ref<HTMLInputElement>()\n const pickerRef = ref<HTMLDivElement>()\n const filter = ref('')\n\n watch([showPicker, triggerRef, pickerRef], () => {\n filter.value = ''\n const picker = triggerRef.value\n const languageList = pickerRef.value\n if (!picker || !languageList) return\n\n computePosition(picker, languageList, {\n placement: 'bottom-start',\n })\n .then(({ x, y }) => {\n Object.assign(languageList.style, {\n left: `${x}px`,\n top: `${y}px`,\n })\n })\n .catch(console.error)\n })\n\n const onTogglePicker = (e: Event) => {\n e.preventDefault()\n e.stopPropagation()\n if (getReadOnly()) return\n\n const next = !showPicker.value\n showPicker.value = next\n if (next) {\n setTimeout(() => searchRef.value?.focus(), 0)\n }\n }\n\n const changeFilter = (e: Event) => {\n const target = e.target as HTMLInputElement\n filter.value = target.value\n }\n\n const onSearchKeydown = (e: Event) => {\n if ((e as KeyboardEvent).key === 'Escape') filter.value = ''\n }\n\n const languages = computed(() => {\n if (!showPicker.value) return []\n\n const all = getAllLanguages() ?? []\n\n const selected = all.find(\n (languageInfo) =>\n languageInfo.name.toLowerCase() === language.value.toLowerCase()\n )\n\n const filtered = all.filter((languageInfo) => {\n const currentValue = filter.value.toLowerCase()\n\n return (\n (languageInfo.name.toLowerCase().includes(currentValue) ||\n languageInfo.alias.some((alias) =>\n alias.toLowerCase().includes(currentValue)\n )) &&\n languageInfo !== selected\n )\n })\n\n if (filtered.length === 0) return []\n\n if (!selected) return filtered\n\n return [selected, ...filtered]\n })\n\n const clickHandler = (e: MouseEvent) => {\n const target = e.target as HTMLElement\n\n if (triggerRef.value && triggerRef.value.contains(target)) return\n\n const picker = pickerRef.value\n const trigger = triggerRef.value\n if (!trigger || !picker) return\n\n if (trigger.dataset.expanded !== 'true') return\n\n if (!picker.contains(target)) showPicker.value = false\n }\n\n onMounted(() => {\n window.addEventListener('click', clickHandler)\n })\n\n onUnmounted(() => {\n window.removeEventListener('click', clickHandler)\n })\n\n return () => {\n return (\n <>\n <button\n type=\"button\"\n ref={triggerRef}\n class=\"language-button\"\n onClick={onTogglePicker}\n data-expanded={String(showPicker.value)}\n >\n {language.value || 'Text'}\n <div class=\"expand-icon\">\n <Icon icon={config.expandIcon} />\n </div>\n </button>\n <div ref={pickerRef} class=\"language-picker\">\n {showPicker.value ? (\n <div class=\"list-wrapper\">\n <div class=\"search-box\">\n <div class=\"search-icon\">\n <Icon icon={config.searchIcon} />\n </div>\n <input\n ref={searchRef}\n class=\"search-input\"\n placeholder={config.searchPlaceholder}\n value={filter.value}\n onInput={changeFilter}\n onKeydown={onSearchKeydown}\n />\n <div\n class={clsx(\n 'clear-icon',\n filter.value.length === 0 && 'hidden'\n )}\n onMousedown={(e) => {\n e.preventDefault()\n filter.value = ''\n }}\n >\n <Icon icon={config.clearSearchIcon} />\n </div>\n </div>\n <ul\n class=\"language-list\"\n role=\"listbox\"\n onKeydown={(e) => {\n if (e.key === 'Enter') {\n const active = document.activeElement\n if (\n active instanceof HTMLElement &&\n active.dataset.language\n )\n setLanguage(active.dataset.language)\n }\n }}\n >\n {!languages.value.length ? (\n <li class=\"language-list-item no-result\">\n {config.noResultText}\n </li>\n ) : (\n languages.value.map((languageInfo) => (\n <li\n role=\"listitem\"\n tabindex=\"0\"\n class=\"language-list-item\"\n aria-selected={\n languageInfo.name.toLowerCase() ===\n language.value.toLowerCase()\n }\n data-language={languageInfo.name}\n onClick={() => {\n setLanguage(languageInfo.name)\n showPicker.value = false\n }}\n >\n {config.renderLanguage(\n languageInfo.name,\n languageInfo.name.toLowerCase() ===\n language.value.toLowerCase()\n )}\n </li>\n ))\n )}\n </ul>\n </div>\n ) : null}\n </div>\n </>\n )\n }\n },\n})\n","import DOMPurify from 'dompurify'\nimport { defineComponent, ref, watchEffect, type Ref, h, Fragment } from 'vue'\n\nimport type { CodeBlockProps } from './code-block'\n\nimport { keepAlive } from '../../../__internal__/keep-alive'\n\nkeepAlive(h, Fragment)\n\ntype PreviewPanelProps = Pick<\n CodeBlockProps,\n 'text' | 'language' | 'config'\n> & {\n previewOnlyMode: Ref<boolean>\n preview: Ref<string | HTMLElement | null>\n}\n\nexport const PreviewPanel = defineComponent<PreviewPanelProps>({\n props: {\n text: {\n type: Object,\n required: true,\n },\n language: {\n type: Object,\n required: true,\n },\n config: {\n type: Object,\n required: true,\n },\n previewOnlyMode: {\n type: Object,\n required: true,\n },\n preview: {\n type: Object,\n required: true,\n },\n },\n setup(props) {\n const { previewOnlyMode, config, preview } = props\n const previewRef = ref<HTMLDivElement>()\n\n watchEffect(() => {\n const previewContainer = previewRef.value\n if (!previewContainer) return\n\n while (previewContainer.firstChild) {\n previewContainer.removeChild(previewContainer.firstChild)\n }\n\n const previewContent = preview.value\n\n if (\n typeof previewContent === 'string' ||\n previewContent instanceof Element\n ) {\n previewContainer.innerHTML = DOMPurify.sanitize(previewContent)\n }\n })\n\n return () => {\n if (!preview.value) return null\n\n return (\n <div class=\"preview-panel\">\n {!previewOnlyMode.value && (\n <>\n <div class=\"preview-divider\" />\n <div class=\"preview-label\">{config.previewLabel}</div>\n </>\n )}\n <div ref={previewRef} class=\"preview\" />\n </div>\n )\n }\n },\n})\n","import type { EditorView as CodeMirror } from '@codemirror/view'\n\nimport clsx from 'clsx'\nimport DOMPurify from 'dompurify'\nimport {\n defineComponent,\n ref,\n type Ref,\n h,\n Fragment,\n onMounted,\n watch,\n} from 'vue'\n\nimport type { CodeBlockConfig } from '../../config'\nimport type { LanguageInfo } from '../loader'\n\nimport { Icon } from '../../../__internal__/components/icon'\nimport { keepAlive } from '../../../__internal__/keep-alive'\nimport { CopyButton } from './copy-button'\nimport { LanguagePicker } from './language-picker'\nimport { PreviewPanel } from './preview-panel'\n\nkeepAlive(h, Fragment)\n\nexport type CodeBlockProps = {\n text: Ref<string>\n selected: Ref<boolean>\n getReadOnly: () => boolean\n codemirror: CodeMirror\n language: Ref<string>\n getAllLanguages: () => Array<LanguageInfo>\n setLanguage: (language: string) => void\n config: Omit<CodeBlockConfig, 'languages' | 'extensions'>\n}\n\nexport const CodeBlock = defineComponent<CodeBlockProps>({\n props: {\n text: {\n type: Object,\n required: true,\n },\n selected: {\n type: Object,\n required: true,\n },\n getReadOnly: {\n type: Function,\n required: true,\n },\n codemirror: {\n type: Object,\n required: true,\n },\n language: {\n type: Object,\n required: true,\n },\n getAllLanguages: {\n type: Function,\n required: true,\n },\n setLanguage: {\n type: Function,\n required: true,\n },\n config: {\n type: Object,\n required: true,\n },\n },\n setup(props) {\n const previewOnlyByDefault =\n props.config.previewOnlyByDefault ?? props.getReadOnly()\n const previewOnlyMode = ref(previewOnlyByDefault)\n const codemirrorHostRef = ref<HTMLDivElement>()\n const preview = ref<null | string | HTMLElement>(null)\n\n onMounted(() => {\n while (codemirrorHostRef.value?.firstChild) {\n codemirrorHostRef.value.removeChild(codemirrorHostRef.value.firstChild)\n }\n\n if (codemirrorHostRef.value) {\n codemirrorHostRef.value.appendChild(props.codemirror.dom)\n }\n })\n\n watch(\n () => [props.text.value, props.language.value],\n () => {\n const result = props.config.renderPreview(\n props.language.value,\n props.text.value,\n (value) => (preview.value = value)\n )\n if (result) {\n preview.value = result\n }\n\n // set default value for async renderPreview\n const isAsyncPreview = result === undefined\n if (isAsyncPreview && !preview.value) {\n preview.value = DOMPurify.sanitize(props.config.previewLoading)\n }\n\n if (result === null) {\n preview.value = null\n }\n },\n { immediate: true }\n )\n\n const empty = () => {}\n\n return () => {\n return (\n <>\n <div class=\"tools\">\n <LanguagePicker\n language={props.language}\n config={props.config}\n setLanguage={props.setLanguage}\n getAllLanguages={props.getAllLanguages}\n getReadOnly={props.getReadOnly}\n />\n\n <div class=\"tools-button-group\">\n <CopyButton\n copyIcon={props.config.copyIcon}\n copyText={props.config.copyText}\n onCopy={props.config.onCopy ?? empty}\n text={props.text.value}\n />\n\n {preview.value ? (\n <button\n class=\"preview-toggle-button\"\n onClick={() =>\n (previewOnlyMode.value = !previewOnlyMode.value)\n }\n >\n <Icon\n icon={props.config.previewToggleButton(\n previewOnlyMode.value\n )}\n />\n </button>\n ) : null}\n </div>\n </div>\n <div\n ref={codemirrorHostRef}\n class={clsx(\n 'codemirror-host',\n preview.value && previewOnlyMode.value && 'hidden'\n )}\n />\n <PreviewPanel\n text={props.text}\n language={props.language}\n config={props.config}\n previewOnlyMode={previewOnlyMode}\n preview={preview}\n />\n </>\n )\n }\n },\n})\n","import type { Line, SelectionRange } from '@codemirror/state'\nimport type { Node } from '@jvs-milkdown/prose/model'\nimport type { EditorView, NodeView } from '@jvs-milkdown/prose/view'\n\nimport { Compartment, EditorState } from '@codemirror/state'\nimport {\n EditorView as CodeMirror,\n type KeyBinding,\n type ViewUpdate,\n keymap as cmKeymap,\n drawSelection,\n} from '@codemirror/view'\nimport { exitCode } from '@jvs-milkdown/prose/commands'\nimport { redo, undo } from '@jvs-milkdown/prose/history'\nimport { TextSelection } from '@jvs-milkdown/prose/state'\nimport { createApp, ref, watchEffect, type App, type WatchHandle } from 'vue'\n\nimport type { CodeBlockConfig } from '../config'\nimport type { LanguageLoader } from './loader'\n\nimport { CodeBlock } from './components/code-block'\n\nexport class CodeMirrorBlock implements NodeView {\n dom: HTMLElement\n cm: CodeMirror\n app: App\n\n selected = ref(false)\n language = ref('')\n text = ref('')\n\n private updating = false\n private languageName: string = ''\n private disposeSelectedWatcher: WatchHandle\n\n private readonly languageConf: Compartment\n private readonly readOnlyConf: Compartment\n\n constructor(\n public node: Node,\n public view: EditorView,\n public getPos: () => number | undefined,\n public loader: LanguageLoader,\n public config: CodeBlockConfig\n ) {\n this.languageConf = new Compartment()\n this.readOnlyConf = new Compartment()\n\n this.cm = new CodeMirror({\n doc: this.node.textContent,\n root: this.view.root,\n extensions: [\n this.readOnlyConf.of(EditorState.readOnly.of(!this.view.editable)),\n drawSelection(),\n cmKeymap.of(this.codeMirrorKeymap()),\n this.languageConf.of([]),\n EditorState.changeFilter.of(() => this.view.editable),\n ...config.extensions,\n CodeMirror.updateListener.of(this.forwardUpdate),\n ],\n })\n\n this.app = this.createApp()\n\n this.dom = this.createDom(this.app)\n\n this.disposeSelectedWatcher = watchEffect(() => {\n const isSelected = this.selected.value\n if (isSelected) {\n this.dom.classList.add('selected')\n } else {\n this.dom.classList.remove('selected')\n }\n })\n\n this.updateLanguage()\n }\n\n private forwardUpdate = (update: ViewUpdate) => {\n if (this.updating || !this.cm.hasFocus) return\n let offset = (this.getPos() ?? 0) + 1\n const { main } = update.state.selection\n const selFrom = offset + main.from\n const selTo = offset + main.to\n const pmSel = this.view.state.selection\n if (update.docChanged || pmSel.from !== selFrom || pmSel.to !== selTo) {\n const tr = this.view.state.tr\n update.changes.iterChanges((fromA, toA, fromB, toB, text) => {\n if (text.length)\n tr.replaceWith(\n offset + fromA,\n offset + toA,\n this.view.state.schema.text(text.toString())\n )\n else tr.delete(offset + fromA, offset + toA)\n offset += toB - fromB - (toA - fromA)\n })\n tr.setSelection(TextSelection.create(tr.doc, selFrom, selTo))\n this.view.dispatch(tr)\n }\n }\n\n private createApp = () => {\n return createApp(CodeBlock, {\n text: this.text,\n selected: this.selected,\n codemirror: this.cm,\n language: this.language,\n getAllLanguages: this.getAllLanguages,\n getReadOnly: () => !this.view.editable,\n setLanguage: this.setLanguage,\n config: this.config,\n })\n }\n\n private createDom(app: App) {\n const dom = document.createElement('div')\n dom.className = 'milkdown-code-block'\n this.text.value = this.node.textContent\n app.mount(dom)\n return dom\n }\n\n private updateLanguage() {\n const languageName = this.node.attrs.language\n\n if (languageName === this.languageName) return\n\n this.language.value = languageName\n const language = this.loader.load(languageName ?? '')\n\n language\n .then((lang) => {\n if (lang) {\n this.cm.dispatch({\n effects: this.languageConf.reconfigure(lang),\n })\n this.languageName = languageName\n }\n })\n .catch(console.error)\n }\n\n private codeMirrorKeymap = (): KeyBinding[] => {\n const view = this.view\n return [\n { key: 'ArrowUp', run: () => this.maybeEscape('line', -1) },\n { key: 'ArrowLeft', run: () => this.maybeEscape('char', -1) },\n { key: 'ArrowDown', run: () => this.maybeEscape('line', 1) },\n { key: 'ArrowRight', run: () => this.maybeEscape('char', 1) },\n {\n key: 'Mod-Enter',\n run: () => {\n if (!exitCode(view.state, view.dispatch)) return false\n\n view.focus()\n return true\n },\n },\n { key: 'Mod-z', run: () => undo(view.state, view.dispatch) },\n { key: 'Shift-Mod-z', run: () => redo(view.state, view.dispatch) },\n { key: 'Mod-y', run: () => redo(view.state, view.dispatch) },\n {\n key: 'Backspace',\n run: () => {\n const ranges = this.cm.state.selection.ranges\n\n if (ranges.length > 1) return false\n\n const selection = ranges[0]\n\n if (selection && (!selection.empty || selection.anchor > 0))\n return false\n\n if (this.cm.state.doc.lines >= 2) return false\n\n const state = this.view.state\n const pos = this.getPos() ?? 0\n const tr = state.tr.replaceWith(\n pos,\n pos + this.node.nodeSize,\n state.schema.nodes.paragraph!.createChecked({}, this.node.content)\n )\n\n tr.setSelection(TextSelection.near(tr.doc.resolve(pos)))\n\n this.view.dispatch(tr)\n this.view.focus()\n return true\n },\n },\n ]\n }\n\n private maybeEscape = (unit: 'line' | 'char', dir: -1 | 1): boolean => {\n const { state } = this.cm\n let main: SelectionRange | Line = state.selection.main\n if (!main.empty) return false\n if (unit === 'line') main = state.doc.lineAt(main.head)\n if (dir < 0 ? main.from > 0 : main.to < state.doc.length) return false\n\n const targetPos = (this.getPos() ?? 0) + (dir < 0 ? 0 : this.node.nodeSize)\n const selection = TextSelection.near(\n this.view.state.doc.resolve(targetPos),\n dir\n )\n const tr = this.view.state.tr.setSelection(selection).scrollIntoView()\n this.view.dispatch(tr)\n this.view.focus()\n return true\n }\n\n setSelection(anchor: number, head: number) {\n if (!this.cm.dom.isConnected) return\n\n this.cm.focus()\n this.updating = true\n this.cm.dispatch({ selection: { anchor, head } })\n this.updating = false\n }\n\n update(node: Node) {\n if (node.type !== this.node.type) return false\n\n if (this.updating) return true\n\n this.node = node\n this.text.value = node.textContent\n this.updateLanguage()\n if (this.view.editable === this.cm.state.readOnly) {\n this.cm.dispatch({\n effects: this.readOnlyConf.reconfigure(\n EditorState.readOnly.of(!this.view.editable)\n ),\n })\n }\n\n const change = computeChange(this.cm.state.doc.toString(), node.textContent)\n if (change) {\n this.updating = true\n this.cm.dispatch({\n changes: { from: change.from, to: change.to, insert: change.text },\n scrollIntoView: true,\n })\n this.updating = false\n }\n return true\n }\n\n selectNode() {\n this.selected.value = true\n this.cm.focus()\n }\n\n deselectNode() {\n this.selected.value = false\n }\n\n stopEvent() {\n return true\n }\n\n destroy() {\n this.app.unmount()\n this.cm.destroy()\n this.disposeSelectedWatcher()\n }\n\n setLanguage = (language: string) => {\n this.view.dispatch(\n this.view.state.tr.setNodeAttribute(\n this.getPos() ?? 0,\n 'language',\n language\n )\n )\n }\n\n getAllLanguages = () => {\n return this.loader.getAll()\n }\n}\n\nfunction computeChange(\n oldVal: string,\n newVal: string\n): { from: number; to: number; text: string } | null {\n if (oldVal === newVal) return null\n\n let start = 0\n let oldEnd = oldVal.length\n let newEnd = newVal.length\n\n while (\n start < oldEnd &&\n oldVal.charCodeAt(start) === newVal.charCodeAt(start)\n )\n ++start\n\n while (\n oldEnd > start &&\n newEnd > start &&\n oldVal.charCodeAt(oldEnd - 1) === newVal.charCodeAt(newEnd - 1)\n ) {\n oldEnd--\n newEnd--\n }\n\n return { from: start, to: oldEnd, text: newVal.slice(start, newEnd) }\n}\n","import type { NodeViewConstructor } from '@jvs-milkdown/prose/view'\n\nimport { codeBlockSchema } from '@jvs-milkdown/preset-commonmark'\nimport { $view } from '@jvs-milkdown/utils'\n\nimport { withMeta } from '../../__internal__/meta'\nimport { codeBlockConfig } from '../config'\nimport { LanguageLoader } from './loader'\nimport { CodeMirrorBlock } from './node-view'\n\nexport const codeBlockView = $view(\n codeBlockSchema.node,\n (ctx): NodeViewConstructor => {\n const config = ctx.get(codeBlockConfig.key)\n const languageLoader = new LanguageLoader(config.languages)\n return (node, view, getPos) =>\n new CodeMirrorBlock(node, view, getPos, languageLoader, config)\n }\n)\n\nwithMeta(codeBlockView, {\n displayName: 'NodeView<code-block>',\n group: 'CodeBlock',\n})\n","import type { MilkdownPlugin } from '@jvs-milkdown/ctx'\n\nimport { codeBlockConfig } from './config'\nimport { codeBlockView } from './view'\n\nexport * from './config'\nexport * from './view'\n\nexport const codeBlockComponent: MilkdownPlugin[] = [\n codeBlockView,\n codeBlockConfig,\n]\n"],"names":["_a","CodeMirror","cmKeymap"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEO,SAAS,QAAA,CACd,QACA,IAAA,EACG;AACH,EAAA,MAAA,CAAO,OAAO,MAAA,EAAQ;AAAA,IACpB,IAAA,EAAM,cAAA,CAAA;AAAA,MACJ,OAAA,EAAS;AAAA,KAAA,EACN,IAAA;AAAA,GAEN,CAAA;AAED,EAAA,OAAO,MAAA;AACT;;ACgBO,MAAM,aAAA,GAAiC;AAAA,EAC5C,YAAY,EAAC;AAAA,EACb,WAAW,EAAC;AAAA,EACZ,UAAA,EAAY,QAAA;AAAA,EACZ,UAAA,EAAY,WAAA;AAAA,EACZ,eAAA,EAAiB,QAAA;AAAA,EACjB,iBAAA,EAAmB,iBAAA;AAAA,EACnB,YAAA,EAAc,WAAA;AAAA,EACd,QAAA,EAAU,MAAA;AAAA,EACV,QAAA,EAAU,WAAA;AAAA,EACV,QAAQ,MAAM;AAAA,EAAC,CAAA;AAAA,EACf,cAAA,EAAgB,CAAC,QAAA,KAAa,QAAA;AAAA,EAC9B,eAAe,MAAM,IAAA;AAAA,EACrB,mBAAA,EAAqB,CAAC,eAAA,KAAqB,eAAA,GAAkB,MAAA,GAAS,MAAA;AAAA,EACtE,YAAA,EAAc,SAAA;AAAA,EACd,cAAA,EAAgB;AAClB;AAEO,MAAM,eAAA,GAAkB,IAAA,CAAK,aAAA,EAAe,oBAAoB;AAEvE,QAAA,CAAS,eAAA,EAAiB;AAAA,EACxB,WAAA,EAAa,oBAAA;AAAA,EACb,KAAA,EAAO;AACT,CAAC,CAAA;;AC9CM,MAAM,cAAA,CAAe;AAAA,EAG1B,YAAoB,SAAA,EAAkC;AAAlC,IAAA,IAAA,CAAA,SAAA,GAAA,SAAA;AAClB,IAAA,IAAA,CAAK,MAAM,EAAC;AAEZ,IAAA,SAAA,CAAU,OAAA,CAAQ,CAAC,QAAA,KAAa;AAC9B,MAAA,QAAA,CAAS,KAAA,CAAM,OAAA,CAAQ,CAAC,KAAA,KAAU;AAChC,QAAA,IAAA,CAAK,GAAA,CAAI,KAAK,CAAA,GAAI,QAAA;AAAA,MACpB,CAAC,CAAA;AAAA,IACH,CAAC,CAAA;AAAA,EACH;AAAA,EAEA,MAAA,GAAyB;AACvB,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,CAAC,QAAA,KAA2B;AACpD,MAAA,OAAO;AAAA,QACL,MAAM,QAAA,CAAS,IAAA;AAAA,QACf,OAAO,QAAA,CAAS;AAAA,OAClB;AAAA,IACF,CAAC,CAAA;AAAA,EACH;AAAA,EAEA,KAAK,YAAA,EAA4D;AAC/D,IAAA,MAAM,cAAc,IAAA,CAAK,GAAA;AACzB,IAAA,MAAM,QAAA,GAAW,WAAA,CAAY,YAAA,CAAa,WAAA,EAAa,CAAA;AAEvD,IAAA,IAAI,CAAC,QAAA,EAAU,OAAO,OAAA,CAAQ,QAAQ,MAAS,CAAA;AAE/C,IAAA,IAAI,SAAS,OAAA,EAAS,OAAO,OAAA,CAAQ,OAAA,CAAQ,SAAS,OAAO,CAAA;AAE7D,IAAA,OAAO,SAAS,IAAA,EAAK;AAAA,EACvB;AACF;;ACrCO,SAAS,aAAa,KAAA,EAAkB;AAAC;;ACIhD,SAAA,CAAU,CAAC,CAAA;AAQJ,SAAS,KAAK,EAAE,IAAA,EAAM,KAAA,EAAO,SAAA,EAAW,SAAQ,EAAc;AACnE,EAAA,uBACE,CAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,IAAA,CAAK,eAAA,EAAiB,SAAS,CAAA;AAAA,MACtC,aAAA,EAAe,OAAA;AAAA,MACf,WAAW,IAAA,GAAO,SAAA,CAAU,SAAS,IAAA,CAAK,IAAA,EAAM,CAAA,GAAI;AAAA;AAAA,GACtD;AAEJ;AAEA,IAAA,CAAK,KAAA,GAAQ;AAAA,EACX,IAAA,EAAM;AAAA,IACJ,IAAA,EAAM,MAAA;AAAA,IACN,QAAA,EAAU;AAAA,GACZ;AAAA,EACA,KAAA,EAAO;AAAA,IACL,IAAA,EAAM,MAAA;AAAA,IACN,QAAA,EAAU;AAAA,GACZ;AAAA,EACA,OAAA,EAAS;AAAA,IACP,IAAA,EAAM,QAAA;AAAA,IACN,QAAA,EAAU;AAAA;AAEd,CAAA;;;;;;;;;;;;;;;;;;;;;;AChCA,SAAA,CAAU,GAAG,QAAQ,CAAA;AASrB,SAAe,gBAAgB,IAAA,EAAc;AAAA,EAAA,OAAA,OAAA,CAAA,IAAA,EAAA,IAAA,EAAA,aAAA;AAC3C,IAAA,IAAI;AACF,MAAA,OAAO,SAAA,CAAU,SAAA,CAAU,SAAA,CAAU,IAAI,CAAA;AAAA,IAC3C,CAAA,CAAA,OAAQ,CAAA,EAAA;AACN,MAAA,MAAM,OAAA,GAAU,QAAA,CAAS,aAAA,CAAc,UAAU,CAAA;AACjD,MAAA,MAAM,2BAA2B,QAAA,CAAS,aAAA;AAE1C,MAAA,OAAA,CAAQ,KAAA,GAAQ,IAAA;AAGhB,MAAA,OAAA,CAAQ,YAAA,CAAa,YAAY,EAAE,CAAA;AAEnC,MAAA,OAAA,CAAQ,MAAM,OAAA,GAAU,QAAA;AACxB,MAAA,OAAA,CAAQ,MAAM,QAAA,GAAW,UAAA;AACzB,MAAA,OAAA,CAAQ,MAAM,IAAA,GAAO,SAAA;AACrB,MAAA,OAAA,CAAQ,MAAM,QAAA,GAAW,MAAA;AAEzB,MAAA,MAAM,SAAA,GAAY,SAAS,YAAA,EAAa;AACxC,MAAA,MAAM,aAAA,GAAgB,YAClB,SAAA,CAAU,UAAA,GAAa,KAAK,SAAA,CAAU,UAAA,CAAW,CAAC,CAAA,GAClD,IAAA;AAEJ,MAAA,QAAA,CAAS,IAAA,CAAK,YAAY,OAAO,CAAA;AACjC,MAAA,OAAA,CAAQ,MAAA,EAAO;AAGf,MAAA,OAAA,CAAQ,cAAA,GAAiB,CAAA;AACzB,MAAA,OAAA,CAAQ,eAAe,IAAA,CAAK,MAAA;AAE5B,MAAA,QAAA,CAAS,YAAY,MAAM,CAAA;AAC3B,MAAA,QAAA,CAAS,IAAA,CAAK,YAAY,OAAO,CAAA;AAEjC,MAAA,IAAI,aAAA,EAAe;AACjB,QAAA,SAAA,CAAW,eAAA,EAAgB;AAC3B,QAAA,SAAA,CAAW,SAAS,aAAa,CAAA;AAAA,MACnC;AAGA,MAAA,IAAI,wBAAA,EAA0B;AAC3B,QAAC,yBAAyC,KAAA,EAAM;AAAA,MACnD;AAAA,IACF;AAAA,EACF,CAAA,CAAA;AAAA;AAEO,MAAM,aAAa,eAAA,CAAiC;AAAA,EACzD,KAAA,EAAO;AAAA,IACL,QAAA,EAAU;AAAA,MACR,IAAA,EAAM,MAAA;AAAA,MACN,QAAA,EAAU;AAAA,KACZ;AAAA,IACA,QAAA,EAAU;AAAA,MACR,IAAA,EAAM,MAAA;AAAA,MACN,QAAA,EAAU;AAAA,KACZ;AAAA,IACA,MAAA,EAAQ;AAAA,MACN,IAAA,EAAM,QAAA;AAAA,MACN,QAAA,EAAU;AAAA,KACZ;AAAA,IACA,IAAA,EAAM;AAAA,MACJ,IAAA,EAAM,MAAA;AAAA,MACN,QAAA,EAAU;AAAA;AACZ,GACF;AAAA,EACA,MAAM,KAAA,EAAO;AACX,IAAA,MAAM,aAAa,MAAM;AACvB,MAAA,eAAA,CAAgB,KAAA,CAAM,IAAI,CAAA,CACvB,IAAA,CAAK,MAAM,KAAA,CAAM,MAAA,CAAO,KAAA,CAAM,IAAI,CAAC,CAAA,CACnC,KAAA,CAAM,QAAQ,KAAK,CAAA;AAAA,IACxB,CAAA;AAEA,IAAA,OAAO,MAAM;AACX,MAAA,yDAEI,CAAA,CAAC,QAAA,EAAA,EAAO,IAAA,EAAK,QAAA,EAAS,OAAM,aAAA,EAAc,OAAA,EAAS,UAAA,EAAA,kBACjD,CAAA,CAAC,QAAK,IAAA,EAAM,KAAA,CAAM,UAAU,CAAA,EAC3B,KAAA,CAAM,QACT,CACF,CAAA;AAAA,IAEJ,CAAA;AAAA,EACF;AACF,CAAC,CAAA;;AC7ED,SAAA,CAAU,GAAG,QAAQ,CAAA;AAOd,MAAM,iBAAiB,eAAA,CAAqC;AAAA,EACjE,KAAA,EAAO;AAAA,IACL,QAAA,EAAU;AAAA,MACR,IAAA,EAAM,MAAA;AAAA,MACN,QAAA,EAAU;AAAA,KACZ;AAAA,IACA,WAAA,EAAa;AAAA,MACX,IAAA,EAAM,QAAA;AAAA,MACN,QAAA,EAAU;AAAA,KACZ;AAAA,IACA,MAAA,EAAQ;AAAA,MACN,IAAA,EAAM,MAAA;AAAA,MACN,QAAA,EAAU;AAAA,KACZ;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,IAAA,EAAM,QAAA;AAAA,MACN,QAAA,EAAU;AAAA,KACZ;AAAA,IACA,WAAA,EAAa;AAAA,MACX,IAAA,EAAM,QAAA;AAAA,MACN,QAAA,EAAU;AAAA;AACZ,GACF;AAAA,EACA,MAAM,EAAE,QAAA,EAAU,QAAQ,WAAA,EAAa,eAAA,EAAiB,aAAY,EAAG;AACrE,IAAA,MAAM,aAAa,GAAA,EAAuB;AAC1C,IAAA,MAAM,UAAA,GAAa,IAAI,KAAK,CAAA;AAC5B,IAAA,MAAM,YAAY,GAAA,EAAsB;AACxC,IAAA,MAAM,YAAY,GAAA,EAAoB;AACtC,IAAA,MAAM,MAAA,GAAS,IAAI,EAAE,CAAA;AAErB,IAAA,KAAA,CAAM,CAAC,UAAA,EAAY,UAAA,EAAY,SAAS,GAAG,MAAM;AAC/C,MAAA,MAAA,CAAO,KAAA,GAAQ,EAAA;AACf,MAAA,MAAM,SAAS,UAAA,CAAW,KAAA;AAC1B,MAAA,MAAM,eAAe,SAAA,CAAU,KAAA;AAC/B,MAAA,IAAI,CAAC,MAAA,IAAU,CAAC,YAAA,EAAc;AAE9B,MAAA,eAAA,CAAgB,QAAQ,YAAA,EAAc;AAAA,QACpC,SAAA,EAAW;AAAA,OACZ,CAAA,CACE,IAAA,CAAK,CAAC,EAAE,CAAA,EAAG,GAAE,KAAM;AAClB,QAAA,MAAA,CAAO,MAAA,CAAO,aAAa,KAAA,EAAO;AAAA,UAChC,IAAA,EAAM,GAAG,CAAC,CAAA,EAAA,CAAA;AAAA,UACV,GAAA,EAAK,GAAG,CAAC,CAAA,EAAA;AAAA,SACV,CAAA;AAAA,MACH,CAAC,CAAA,CACA,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA;AAAA,IACxB,CAAC,CAAA;AAED,IAAA,MAAM,cAAA,GAAiB,CAAC,CAAA,KAAa;AACnC,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,MAAA,IAAI,aAAY,EAAG;AAEnB,MAAA,MAAM,IAAA,GAAO,CAAC,UAAA,CAAW,KAAA;AACzB,MAAA,UAAA,CAAW,KAAA,GAAQ,IAAA;AACnB,MAAA,IAAI,IAAA,EAAM;AACR,QAAA,UAAA,CAAW,MAAG;AAjFtB,UAAA,IAAA,EAAA;AAiFyB,UAAA,OAAA,CAAA,EAAA,GAAA,SAAA,CAAU,UAAV,IAAA,GAAA,MAAA,GAAA,EAAA,CAAiB,KAAA,EAAA;AAAA,QAAA,CAAA,EAAS,CAAC,CAAA;AAAA,MAC9C;AAAA,IACF,CAAA;AAEA,IAAA,MAAM,YAAA,GAAe,CAAC,CAAA,KAAa;AACjC,MAAA,MAAM,SAAS,CAAA,CAAE,MAAA;AACjB,MAAA,MAAA,CAAO,QAAQ,MAAA,CAAO,KAAA;AAAA,IACxB,CAAA;AAEA,IAAA,MAAM,eAAA,GAAkB,CAAC,CAAA,KAAa;AACpC,MAAA,IAAK,CAAA,CAAoB,GAAA,KAAQ,QAAA,EAAU,MAAA,CAAO,KAAA,GAAQ,EAAA;AAAA,IAC5D,CAAA;AAEA,IAAA,MAAM,SAAA,GAAY,SAAS,MAAM;AA9FrC,MAAA,IAAA,EAAA;AA+FM,MAAA,IAAI,CAAC,UAAA,CAAW,KAAA,EAAO,OAAO,EAAC;AAE/B,MAAA,MAAM,GAAA,GAAA,CAAM,EAAA,GAAA,eAAA,EAAgB,KAAhB,IAAA,GAAA,EAAA,GAAqB,EAAC;AAElC,MAAA,MAAM,WAAW,GAAA,CAAI,IAAA;AAAA,QACnB,CAAC,iBACC,YAAA,CAAa,IAAA,CAAK,aAAY,KAAM,QAAA,CAAS,MAAM,WAAA;AAAY,OACnE;AAEA,MAAA,MAAM,QAAA,GAAW,GAAA,CAAI,MAAA,CAAO,CAAC,YAAA,KAAiB;AAC5C,QAAA,MAAM,YAAA,GAAe,MAAA,CAAO,KAAA,CAAM,WAAA,EAAY;AAE9C,QAAA,OAAA,CACG,YAAA,CAAa,KAAK,WAAA,EAAY,CAAE,SAAS,YAAY,CAAA,IACpD,aAAa,KAAA,CAAM,IAAA;AAAA,UAAK,CAAC,KAAA,KACvB,KAAA,CAAM,WAAA,EAAY,CAAE,SAAS,YAAY;AAAA,cAE7C,YAAA,KAAiB,QAAA;AAAA,MAErB,CAAC,CAAA;AAED,MAAA,IAAI,QAAA,CAAS,MAAA,KAAW,CAAA,EAAG,OAAO,EAAC;AAEnC,MAAA,IAAI,CAAC,UAAU,OAAO,QAAA;AAEtB,MAAA,OAAO,CAAC,QAAA,EAAU,GAAG,QAAQ,CAAA;AAAA,IAC/B,CAAC,CAAA;AAED,IAAA,MAAM,YAAA,GAAe,CAAC,CAAA,KAAkB;AACtC,MAAA,MAAM,SAAS,CAAA,CAAE,MAAA;AAEjB,MAAA,IAAI,WAAW,KAAA,IAAS,UAAA,CAAW,KAAA,CAAM,QAAA,CAAS,MAAM,CAAA,EAAG;AAE3D,MAAA,MAAM,SAAS,SAAA,CAAU,KAAA;AACzB,MAAA,MAAM,UAAU,UAAA,CAAW,KAAA;AAC3B,MAAA,IAAI,CAAC,OAAA,IAAW,CAAC,MAAA,EAAQ;AAEzB,MAAA,IAAI,OAAA,CAAQ,OAAA,CAAQ,QAAA,KAAa,MAAA,EAAQ;AAEzC,MAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,MAAM,CAAA,aAAc,KAAA,GAAQ,KAAA;AAAA,IACnD,CAAA;AAEA,IAAA,SAAA,CAAU,MAAM;AACd,MAAA,MAAA,CAAO,gBAAA,CAAiB,SAAS,YAAY,CAAA;AAAA,IAC/C,CAAC,CAAA;AAED,IAAA,WAAA,CAAY,MAAM;AAChB,MAAA,MAAA,CAAO,mBAAA,CAAoB,SAAS,YAAY,CAAA;AAAA,IAClD,CAAC,CAAA;AAED,IAAA,OAAO,MAAM;AACX,MAAA,uBACE,CAAA,CAAA,QAAA,EAAA,IAAA,kBACE,CAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,QAAA;AAAA,UACL,GAAA,EAAK,UAAA;AAAA,UACL,KAAA,EAAM,iBAAA;AAAA,UACN,OAAA,EAAS,cAAA;AAAA,UACT,eAAA,EAAe,MAAA,CAAO,UAAA,CAAW,KAAK;AAAA,SAAA;AAAA,QAErC,SAAS,KAAA,IAAS,MAAA;AAAA,wBACnB,CAAA,CAAC,SAAI,KAAA,EAAM,aAAA,EAAA,oBACR,IAAA,EAAA,EAAK,IAAA,EAAM,MAAA,CAAO,UAAA,EAAY,CACjC;AAAA,OACF,kBACA,CAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAK,SAAA,EAAW,KAAA,EAAM,iBAAA,EAAA,EACxB,UAAA,CAAW,KAAA,mBACV,CAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,cAAA,EAAA,kBACT,CAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,YAAA,EAAA,kBACT,CAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,aAAA,EAAA,kBACT,CAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAM,MAAA,CAAO,UAAA,EAAY,CACjC,CAAA,kBACA,CAAA;AAAA,QAAC,OAAA;AAAA,QAAA;AAAA,UACC,GAAA,EAAK,SAAA;AAAA,UACL,KAAA,EAAM,cAAA;AAAA,UACN,aAAa,MAAA,CAAO,iBAAA;AAAA,UACpB,OAAO,MAAA,CAAO,KAAA;AAAA,UACd,OAAA,EAAS,YAAA;AAAA,UACT,SAAA,EAAW;AAAA;AAAA,OACb,kBACA,CAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,KAAA,EAAO,IAAA;AAAA,YACL,YAAA;AAAA,YACA,MAAA,CAAO,KAAA,CAAM,MAAA,KAAW,CAAA,IAAK;AAAA,WAC/B;AAAA,UACA,WAAA,EAAa,CAAC,CAAA,KAAM;AAClB,YAAA,CAAA,CAAE,cAAA,EAAe;AACjB,YAAA,MAAA,CAAO,KAAA,GAAQ,EAAA;AAAA,UACjB;AAAA,SAAA;AAAA,wBAEA,CAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAM,MAAA,CAAO,eAAA,EAAiB;AAAA,OAExC,CAAA,kBACA,CAAA;AAAA,QAAC,IAAA;AAAA,QAAA;AAAA,UACC,KAAA,EAAM,eAAA;AAAA,UACN,IAAA,EAAK,SAAA;AAAA,UACL,SAAA,EAAW,CAAC,CAAA,KAAM;AAChB,YAAA,IAAI,CAAA,CAAE,QAAQ,OAAA,EAAS;AACrB,cAAA,MAAM,SAAS,QAAA,CAAS,aAAA;AACxB,cAAA,IACE,MAAA,YAAkB,WAAA,IAClB,MAAA,CAAO,OAAA,CAAQ,QAAA;AAEf,gBAAA,WAAA,CAAY,MAAA,CAAO,QAAQ,QAAQ,CAAA;AAAA,YACvC;AAAA,UACF;AAAA,SAAA;AAAA,QAEC,CAAC,SAAA,CAAU,KAAA,CAAM,MAAA,qBACf,IAAA,EAAA,EAAG,KAAA,EAAM,8BAAA,EAAA,EACP,MAAA,CAAO,YACV,CAAA,GAEA,SAAA,CAAU,KAAA,CAAM,GAAA,CAAI,CAAC,YAAA,qBACnB,CAAA;AAAA,UAAC,IAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,UAAA;AAAA,YACL,QAAA,EAAS,GAAA;AAAA,YACT,KAAA,EAAM,oBAAA;AAAA,YACN,iBACE,YAAA,CAAa,IAAA,CAAK,aAAY,KAC9B,QAAA,CAAS,MAAM,WAAA,EAAY;AAAA,YAE7B,iBAAe,YAAA,CAAa,IAAA;AAAA,YAC5B,SAAS,MAAM;AACb,cAAA,WAAA,CAAY,aAAa,IAAI,CAAA;AAC7B,cAAA,UAAA,CAAW,KAAA,GAAQ,KAAA;AAAA,YACrB;AAAA,WAAA;AAAA,UAEC,MAAA,CAAO,cAAA;AAAA,YACN,YAAA,CAAa,IAAA;AAAA,YACb,aAAa,IAAA,CAAK,WAAA,EAAY,KAC5B,QAAA,CAAS,MAAM,WAAA;AAAY;AAC/B,SAEH;AAAA,OAGP,CAAA,GACE,IACN,CACF,CAAA;AAAA,IAEJ,CAAA;AAAA,EACF;AACF,CAAC,CAAA;;ACvOD,SAAA,CAAU,GAAG,QAAQ,CAAA;AAUd,MAAM,eAAe,eAAA,CAAmC;AAAA,EAC7D,KAAA,EAAO;AAAA,IACL,IAAA,EAAM;AAAA,MACJ,IAAA,EAAM,MAAA;AAAA,MACN,QAAA,EAAU;AAAA,KACZ;AAAA,IACA,QAAA,EAAU;AAAA,MACR,IAAA,EAAM,MAAA;AAAA,MACN,QAAA,EAAU;AAAA,KACZ;AAAA,IACA,MAAA,EAAQ;AAAA,MACN,IAAA,EAAM,MAAA;AAAA,MACN,QAAA,EAAU;AAAA,KACZ;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,IAAA,EAAM,MAAA;AAAA,MACN,QAAA,EAAU;AAAA,KACZ;AAAA,IACA,OAAA,EAAS;AAAA,MACP,IAAA,EAAM,MAAA;AAAA,MACN,QAAA,EAAU;AAAA;AACZ,GACF;AAAA,EACA,MAAM,KAAA,EAAO;AACX,IAAA,MAAM,EAAE,eAAA,EAAiB,MAAA,EAAQ,OAAA,EAAQ,GAAI,KAAA;AAC7C,IAAA,MAAM,aAAa,GAAA,EAAoB;AAEvC,IAAA,WAAA,CAAY,MAAM;AAChB,MAAA,MAAM,mBAAmB,UAAA,CAAW,KAAA;AACpC,MAAA,IAAI,CAAC,gBAAA,EAAkB;AAEvB,MAAA,OAAO,iBAAiB,UAAA,EAAY;AAClC,QAAA,gBAAA,CAAiB,WAAA,CAAY,iBAAiB,UAAU,CAAA;AAAA,MAC1D;AAEA,MAAA,MAAM,iBAAiB,OAAA,CAAQ,KAAA;AAE/B,MAAA,IACE,OAAO,cAAA,KAAmB,QAAA,IAC1B,cAAA,YAA0B,OAAA,EAC1B;AACA,QAAA,gBAAA,CAAiB,SAAA,GAAY,SAAA,CAAU,QAAA,CAAS,cAAc,CAAA;AAAA,MAChE;AAAA,IACF,CAAC,CAAA;AAED,IAAA,OAAO,MAAM;AACX,MAAA,IAAI,CAAC,OAAA,CAAQ,KAAA,EAAO,OAAO,IAAA;AAE3B,MAAA,uBACE,CAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,eAAA,EAAA,EACR,CAAC,eAAA,CAAgB,KAAA,oBAChB,CAAA,CAAA,QAAA,EAAA,IAAA,kBACE,CAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,iBAAA,EAAkB,CAAA,kBAC7B,CAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,eAAA,EAAA,EAAiB,MAAA,CAAO,YAAa,CAClD,CAAA,kBAEF,CAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAK,UAAA,EAAY,KAAA,EAAM,SAAA,EAAU,CACxC,CAAA;AAAA,IAEJ,CAAA;AAAA,EACF;AACF,CAAC,CAAA;;ACvDD,SAAA,CAAU,GAAG,QAAQ,CAAA;AAad,MAAM,YAAY,eAAA,CAAgC;AAAA,EACvD,KAAA,EAAO;AAAA,IACL,IAAA,EAAM;AAAA,MACJ,IAAA,EAAM,MAAA;AAAA,MACN,QAAA,EAAU;AAAA,KACZ;AAAA,IACA,QAAA,EAAU;AAAA,MACR,IAAA,EAAM,MAAA;AAAA,MACN,QAAA,EAAU;AAAA,KACZ;AAAA,IACA,WAAA,EAAa;AAAA,MACX,IAAA,EAAM,QAAA;AAAA,MACN,QAAA,EAAU;AAAA,KACZ;AAAA,IACA,UAAA,EAAY;AAAA,MACV,IAAA,EAAM,MAAA;AAAA,MACN,QAAA,EAAU;AAAA,KACZ;AAAA,IACA,QAAA,EAAU;AAAA,MACR,IAAA,EAAM,MAAA;AAAA,MACN,QAAA,EAAU;AAAA,KACZ;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,IAAA,EAAM,QAAA;AAAA,MACN,QAAA,EAAU;AAAA,KACZ;AAAA,IACA,WAAA,EAAa;AAAA,MACX,IAAA,EAAM,QAAA;AAAA,MACN,QAAA,EAAU;AAAA,KACZ;AAAA,IACA,MAAA,EAAQ;AAAA,MACN,IAAA,EAAM,MAAA;AAAA,MACN,QAAA,EAAU;AAAA;AACZ,GACF;AAAA,EACA,MAAM,KAAA,EAAO;AAvEf,IAAA,IAAA,EAAA;AAwEI,IAAA,MAAM,wBACJ,EAAA,GAAA,KAAA,CAAM,MAAA,CAAO,oBAAA,KAAb,IAAA,GAAA,EAAA,GAAqC,MAAM,WAAA,EAAY;AACzD,IAAA,MAAM,eAAA,GAAkB,IAAI,oBAAoB,CAAA;AAChD,IAAA,MAAM,oBAAoB,GAAA,EAAoB;AAC9C,IAAA,MAAM,OAAA,GAAU,IAAiC,IAAI,CAAA;AAErD,IAAA,SAAA,CAAU,MAAM;AA9EpB,MAAA,IAAAA,GAAAA;AA+EM,MAAA,OAAA,CAAOA,GAAAA,GAAA,iBAAA,CAAkB,KAAA,KAAlB,IAAA,GAAA,MAAA,GAAAA,IAAyB,UAAA,EAAY;AAC1C,QAAA,iBAAA,CAAkB,KAAA,CAAM,WAAA,CAAY,iBAAA,CAAkB,KAAA,CAAM,UAAU,CAAA;AAAA,MACxE;AAEA,MAAA,IAAI,kBAAkB,KAAA,EAAO;AAC3B,QAAA,iBAAA,CAAkB,KAAA,CAAM,WAAA,CAAY,KAAA,CAAM,UAAA,CAAW,GAAG,CAAA;AAAA,MAC1D;AAAA,IACF,CAAC,CAAA;AAED,IAAA,KAAA;AAAA,MACE,MAAM,CAAC,KAAA,CAAM,KAAK,KAAA,EAAO,KAAA,CAAM,SAAS,KAAK,CAAA;AAAA,MAC7C,MAAM;AACJ,QAAA,MAAM,MAAA,GAAS,MAAM,MAAA,CAAO,aAAA;AAAA,UAC1B,MAAM,QAAA,CAAS,KAAA;AAAA,UACf,MAAM,IAAA,CAAK,KAAA;AAAA,UACX,CAAC,KAAA,KAAW,OAAA,CAAQ,KAAA,GAAQ;AAAA,SAC9B;AACA,QAAA,IAAI,MAAA,EAAQ;AACV,UAAA,OAAA,CAAQ,KAAA,GAAQ,MAAA;AAAA,QAClB;AAGA,QAAA,MAAM,iBAAiB,MAAA,KAAW,MAAA;AAClC,QAAA,IAAI,cAAA,IAAkB,CAAC,OAAA,CAAQ,KAAA,EAAO;AACpC,UAAA,OAAA,CAAQ,KAAA,GAAQ,SAAA,CAAU,QAAA,CAAS,KAAA,CAAM,OAAO,cAAc,CAAA;AAAA,QAChE;AAEA,QAAA,IAAI,WAAW,IAAA,EAAM;AACnB,UAAA,OAAA,CAAQ,KAAA,GAAQ,IAAA;AAAA,QAClB;AAAA,MACF,CAAA;AAAA,MACA,EAAE,WAAW,IAAA;AAAK,KACpB;AAEA,IAAA,MAAM,QAAQ,MAAM;AAAA,IAAC,CAAA;AAErB,IAAA,OAAO,MAAM;AAnHjB,MAAA,IAAAA,GAAAA;AAoHM,MAAA,uBACE,CAAA,CAAA,QAAA,EAAA,IAAA,kBACE,CAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,OAAA,EAAA,kBACT,CAAA;AAAA,QAAC,cAAA;AAAA,QAAA;AAAA,UACC,UAAU,KAAA,CAAM,QAAA;AAAA,UAChB,QAAQ,KAAA,CAAM,MAAA;AAAA,UACd,aAAa,KAAA,CAAM,WAAA;AAAA,UACnB,iBAAiB,KAAA,CAAM,eAAA;AAAA,UACvB,aAAa,KAAA,CAAM;AAAA;AAAA,OACrB,kBAEA,CAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,oBAAA,EAAA,kBACT,CAAA;AAAA,QAAC,UAAA;AAAA,QAAA;AAAA,UACC,QAAA,EAAU,MAAM,MAAA,CAAO,QAAA;AAAA,UACvB,QAAA,EAAU,MAAM,MAAA,CAAO,QAAA;AAAA,UACvB,SAAQA,GAAAA,GAAA,KAAA,CAAM,MAAA,CAAO,MAAA,KAAb,OAAAA,GAAAA,GAAuB,KAAA;AAAA,UAC/B,IAAA,EAAM,MAAM,IAAA,CAAK;AAAA;AAAA,OACnB,EAEC,QAAQ,KAAA,mBACP,CAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,KAAA,EAAM,uBAAA;AAAA,UACN,OAAA,EAAS,MACN,eAAA,CAAgB,KAAA,GAAQ,CAAC,eAAA,CAAgB;AAAA,SAAA;AAAA,wBAG5C,CAAA;AAAA,UAAC,IAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAM,MAAM,MAAA,CAAO,mBAAA;AAAA,cACjB,eAAA,CAAgB;AAAA;AAClB;AAAA;AACF,OACF,GACE,IACN,CACF,CAAA,kBACA,CAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,GAAA,EAAK,iBAAA;AAAA,UACL,KAAA,EAAO,IAAA;AAAA,YACL,iBAAA;AAAA,YACA,OAAA,CAAQ,KAAA,IAAS,eAAA,CAAgB,KAAA,IAAS;AAAA;AAC5C;AAAA,OACF,kBACA,CAAA;AAAA,QAAC,YAAA;AAAA,QAAA;AAAA,UACC,MAAM,KAAA,CAAM,IAAA;AAAA,UACZ,UAAU,KAAA,CAAM,QAAA;AAAA,UAChB,QAAQ,KAAA,CAAM,MAAA;AAAA,UACd,eAAA;AAAA,UACA;AAAA;AAAA,OAEJ,CAAA;AAAA,IAEJ,CAAA;AAAA,EACF;AACF,CAAC,CAAA;;ACnJM,MAAM,eAAA,CAAoC;AAAA,EAgB/C,WAAA,CACS,IAAA,EACA,IAAA,EACA,MAAA,EACA,QACA,MAAA,EACP;AALO,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AACA,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AACA,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AACA,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AACA,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AAhBT,IAAA,IAAA,CAAA,QAAA,GAAW,IAAI,KAAK,CAAA;AACpB,IAAA,IAAA,CAAA,QAAA,GAAW,IAAI,EAAE,CAAA;AACjB,IAAA,IAAA,CAAA,IAAA,GAAO,IAAI,EAAE,CAAA;AAEb,IAAA,IAAA,CAAQ,QAAA,GAAW,KAAA;AACnB,IAAA,IAAA,CAAQ,YAAA,GAAuB,EAAA;AA8C/B,IAAA,IAAA,CAAQ,aAAA,GAAgB,CAAC,MAAA,KAAuB;AA9ElD,MAAA,IAAA,EAAA;AA+EI,MAAA,IAAI,IAAA,CAAK,QAAA,IAAY,CAAC,IAAA,CAAK,GAAG,QAAA,EAAU;AACxC,MAAA,IAAI,MAAA,GAAA,CAAA,CAAU,EAAA,GAAA,IAAA,CAAK,MAAA,EAAO,KAAZ,YAAiB,CAAA,IAAK,CAAA;AACpC,MAAA,MAAM,EAAE,IAAA,EAAK,GAAI,MAAA,CAAO,KAAA,CAAM,SAAA;AAC9B,MAAA,MAAM,OAAA,GAAU,SAAS,IAAA,CAAK,IAAA;AAC9B,MAAA,MAAM,KAAA,GAAQ,SAAS,IAAA,CAAK,EAAA;AAC5B,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,IAAA,CAAK,KAAA,CAAM,SAAA;AAC9B,MAAA,IAAI,OAAO,UAAA,IAAc,KAAA,CAAM,SAAS,OAAA,IAAW,KAAA,CAAM,OAAO,KAAA,EAAO;AACrE,QAAA,MAAM,EAAA,GAAK,IAAA,CAAK,IAAA,CAAK,KAAA,CAAM,EAAA;AAC3B,QAAA,MAAA,CAAO,QAAQ,WAAA,CAAY,CAAC,OAAO,GAAA,EAAK,KAAA,EAAO,KAAK,IAAA,KAAS;AAC3D,UAAA,IAAI,IAAA,CAAK,MAAA;AACP,YAAA,EAAA,CAAG,WAAA;AAAA,cACD,MAAA,GAAS,KAAA;AAAA,cACT,MAAA,GAAS,GAAA;AAAA,cACT,KAAK,IAAA,CAAK,KAAA,CAAM,OAAO,IAAA,CAAK,IAAA,CAAK,UAAU;AAAA,aAC7C;AAAA,eACG,EAAA,CAAG,MAAA,CAAO,MAAA,GAAS,KAAA,EAAO,SAAS,GAAG,CAAA;AAC3C,UAAA,MAAA,IAAU,GAAA,GAAM,SAAS,GAAA,GAAM,KAAA,CAAA;AAAA,QACjC,CAAC,CAAA;AACD,QAAA,EAAA,CAAG,aAAa,aAAA,CAAc,MAAA,CAAO,GAAG,GAAA,EAAK,OAAA,EAAS,KAAK,CAAC,CAAA;AAC5D,QAAA,IAAA,CAAK,IAAA,CAAK,SAAS,EAAE,CAAA;AAAA,MACvB;AAAA,IACF,CAAA;AAEA,IAAA,IAAA,CAAQ,YAAY,MAAM;AACxB,MAAA,OAAO,UAAU,SAAA,EAAW;AAAA,QAC1B,MAAM,IAAA,CAAK,IAAA;AAAA,QACX,UAAU,IAAA,CAAK,QAAA;AAAA,QACf,YAAY,IAAA,CAAK,EAAA;AAAA,QACjB,UAAU,IAAA,CAAK,QAAA;AAAA,QACf,iBAAiB,IAAA,CAAK,eAAA;AAAA,QACtB,WAAA,EAAa,MAAM,CAAC,IAAA,CAAK,IAAA,CAAK,QAAA;AAAA,QAC9B,aAAa,IAAA,CAAK,WAAA;AAAA,QAClB,QAAQ,IAAA,CAAK;AAAA,OACd,CAAA;AAAA,IACH,CAAA;AA8BA,IAAA,IAAA,CAAQ,mBAAmB,MAAoB;AAC7C,MAAA,MAAM,OAAO,IAAA,CAAK,IAAA;AAClB,MAAA,OAAO;AAAA,QACL,EAAE,KAAK,SAAA,EAAW,GAAA,EAAK,MAAM,IAAA,CAAK,WAAA,CAAY,MAAA,EAAQ,EAAE,CAAA,EAAE;AAAA,QAC1D,EAAE,KAAK,WAAA,EAAa,GAAA,EAAK,MAAM,IAAA,CAAK,WAAA,CAAY,MAAA,EAAQ,EAAE,CAAA,EAAE;AAAA,QAC5D,EAAE,KAAK,WAAA,EAAa,GAAA,EAAK,MAAM,IAAA,CAAK,WAAA,CAAY,MAAA,EAAQ,CAAC,CAAA,EAAE;AAAA,QAC3D,EAAE,KAAK,YAAA,EAAc,GAAA,EAAK,MAAM,IAAA,CAAK,WAAA,CAAY,MAAA,EAAQ,CAAC,CAAA,EAAE;AAAA,QAC5D;AAAA,UACE,GAAA,EAAK,WAAA;AAAA,UACL,KAAK,MAAM;AACT,YAAA,IAAI,CAAC,QAAA,CAAS,IAAA,CAAK,OAAO,IAAA,CAAK,QAAQ,GAAG,OAAO,KAAA;AAEjD,YAAA,IAAA,CAAK,KAAA,EAAM;AACX,YAAA,OAAO,IAAA;AAAA,UACT;AAAA,SACF;AAAA,QACA,EAAE,GAAA,EAAK,OAAA,EAAS,GAAA,EAAK,MAAM,KAAK,IAAA,CAAK,KAAA,EAAO,IAAA,CAAK,QAAQ,CAAA,EAAE;AAAA,QAC3D,EAAE,GAAA,EAAK,aAAA,EAAe,GAAA,EAAK,MAAM,KAAK,IAAA,CAAK,KAAA,EAAO,IAAA,CAAK,QAAQ,CAAA,EAAE;AAAA,QACjE,EAAE,GAAA,EAAK,OAAA,EAAS,GAAA,EAAK,MAAM,KAAK,IAAA,CAAK,KAAA,EAAO,IAAA,CAAK,QAAQ,CAAA,EAAE;AAAA,QAC3D;AAAA,UACE,GAAA,EAAK,WAAA;AAAA,UACL,KAAK,MAAM;AApKnB,YAAA,IAAA,EAAA;AAqKU,YAAA,MAAM,MAAA,GAAS,IAAA,CAAK,EAAA,CAAG,KAAA,CAAM,SAAA,CAAU,MAAA;AAEvC,YAAA,IAAI,MAAA,CAAO,MAAA,GAAS,CAAA,EAAG,OAAO,KAAA;AAE9B,YAAA,MAAM,SAAA,GAAY,OAAO,CAAC,CAAA;AAE1B,YAAA,IAAI,SAAA,KAAc,CAAC,SAAA,CAAU,KAAA,IAAS,UAAU,MAAA,GAAS,CAAA,CAAA;AACvD,cAAA,OAAO,KAAA;AAET,YAAA,IAAI,KAAK,EAAA,CAAG,KAAA,CAAM,GAAA,CAAI,KAAA,IAAS,GAAG,OAAO,KAAA;AAEzC,YAAA,MAAM,KAAA,GAAQ,KAAK,IAAA,CAAK,KAAA;AACxB,YAAA,MAAM,GAAA,GAAA,CAAM,EAAA,GAAA,IAAA,CAAK,MAAA,EAAO,KAAZ,IAAA,GAAA,EAAA,GAAiB,CAAA;AAC7B,YAAA,MAAM,EAAA,GAAK,MAAM,EAAA,CAAG,WAAA;AAAA,cAClB,GAAA;AAAA,cACA,GAAA,GAAM,KAAK,IAAA,CAAK,QAAA;AAAA,cAChB,KAAA,CAAM,OAAO,KAAA,CAAM,SAAA,CAAW,cAAc,EAAC,EAAG,IAAA,CAAK,IAAA,CAAK,OAAO;AAAA,aACnE;AAEA,YAAA,EAAA,CAAG,YAAA,CAAa,cAAc,IAAA,CAAK,EAAA,CAAG,IAAI,OAAA,CAAQ,GAAG,CAAC,CAAC,CAAA;AAEvD,YAAA,IAAA,CAAK,IAAA,CAAK,SAAS,EAAE,CAAA;AACrB,YAAA,IAAA,CAAK,KAAK,KAAA,EAAM;AAChB,YAAA,OAAO,IAAA;AAAA,UACT;AAAA;AACF,OACF;AAAA,IACF,CAAA;AAEA,IAAA,IAAA,CAAQ,WAAA,GAAc,CAAC,IAAA,EAAuB,GAAA,KAAyB;AAlMzE,MAAA,IAAA,EAAA;AAmMI,MAAA,MAAM,EAAE,KAAA,EAAM,GAAI,IAAA,CAAK,EAAA;AACvB,MAAA,IAAI,IAAA,GAA8B,MAAM,SAAA,CAAU,IAAA;AAClD,MAAA,IAAI,CAAC,IAAA,CAAK,KAAA,EAAO,OAAO,KAAA;AACxB,MAAA,IAAI,SAAS,MAAA,EAAQ,IAAA,GAAO,MAAM,GAAA,CAAI,MAAA,CAAO,KAAK,IAAI,CAAA;AACtD,MAAA,IAAI,GAAA,GAAM,CAAA,GAAI,IAAA,CAAK,IAAA,GAAO,CAAA,GAAI,KAAK,EAAA,GAAK,KAAA,CAAM,GAAA,CAAI,MAAA,EAAQ,OAAO,KAAA;AAEjE,MAAA,MAAM,SAAA,GAAA,CAAA,CAAa,EAAA,GAAA,IAAA,CAAK,MAAA,EAAO,KAAZ,IAAA,GAAA,EAAA,GAAiB,MAAM,GAAA,GAAM,CAAA,GAAI,CAAA,GAAI,IAAA,CAAK,IAAA,CAAK,QAAA,CAAA;AAClE,MAAA,MAAM,YAAY,aAAA,CAAc,IAAA;AAAA,QAC9B,IAAA,CAAK,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,QAAQ,SAAS,CAAA;AAAA,QACrC;AAAA,OACF;AACA,MAAA,MAAM,EAAA,GAAK,KAAK,IAAA,CAAK,KAAA,CAAM,GAAG,YAAA,CAAa,SAAS,EAAE,cAAA,EAAe;AACrE,MAAA,IAAA,CAAK,IAAA,CAAK,SAAS,EAAE,CAAA;AACrB,MAAA,IAAA,CAAK,KAAK,KAAA,EAAM;AAChB,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AA0DA,IAAA,IAAA,CAAA,WAAA,GAAc,CAAC,QAAA,KAAqB;AA5QtC,MAAA,IAAA,EAAA;AA6QI,MAAA,IAAA,CAAK,IAAA,CAAK,QAAA;AAAA,QACR,IAAA,CAAK,IAAA,CAAK,KAAA,CAAM,EAAA,CAAG,gBAAA;AAAA,UAAA,CACjB,EAAA,GAAA,IAAA,CAAK,MAAA,EAAO,KAAZ,IAAA,GAAA,EAAA,GAAiB,CAAA;AAAA,UACjB,UAAA;AAAA,UACA;AAAA;AACF,OACF;AAAA,IACF,CAAA;AAEA,IAAA,IAAA,CAAA,eAAA,GAAkB,MAAM;AACtB,MAAA,OAAO,IAAA,CAAK,OAAO,MAAA,EAAO;AAAA,IAC5B,CAAA;AA3OE,IAAA,IAAA,CAAK,YAAA,GAAe,IAAI,WAAA,EAAY;AACpC,IAAA,IAAA,CAAK,YAAA,GAAe,IAAI,WAAA,EAAY;AAEpC,IAAA,IAAA,CAAK,EAAA,GAAK,IAAIC,UAAA,CAAW;AAAA,MACvB,GAAA,EAAK,KAAK,IAAA,CAAK,WAAA;AAAA,MACf,IAAA,EAAM,KAAK,IAAA,CAAK,IAAA;AAAA,MAChB,UAAA,EAAY;AAAA,QACV,IAAA,CAAK,YAAA,CAAa,EAAA,CAAG,WAAA,CAAY,QAAA,CAAS,GAAG,CAAC,IAAA,CAAK,IAAA,CAAK,QAAQ,CAAC,CAAA;AAAA,QACjE,aAAA,EAAc;AAAA,QACdC,MAAA,CAAS,EAAA,CAAG,IAAA,CAAK,gBAAA,EAAkB,CAAA;AAAA,QACnC,IAAA,CAAK,YAAA,CAAa,EAAA,CAAG,EAAE,CAAA;AAAA,QACvB,YAAY,YAAA,CAAa,EAAA,CAAG,MAAM,IAAA,CAAK,KAAK,QAAQ,CAAA;AAAA,QACpD,GAAG,MAAA,CAAO,UAAA;AAAA,QACVD,UAAA,CAAW,cAAA,CAAe,EAAA,CAAG,IAAA,CAAK,aAAa;AAAA;AACjD,KACD,CAAA;AAED,IAAA,IAAA,CAAK,GAAA,GAAM,KAAK,SAAA,EAAU;AAE1B,IAAA,IAAA,CAAK,GAAA,GAAM,IAAA,CAAK,SAAA,CAAU,IAAA,CAAK,GAAG,CAAA;AAElC,IAAA,IAAA,CAAK,sBAAA,GAAyB,YAAY,MAAM;AAC9C,MAAA,MAAM,UAAA,GAAa,KAAK,QAAA,CAAS,KAAA;AACjC,MAAA,IAAI,UAAA,EAAY;AACd,QAAA,IAAA,CAAK,GAAA,CAAI,SAAA,CAAU,GAAA,CAAI,UAAU,CAAA;AAAA,MACnC,CAAA,MAAO;AACL,QAAA,IAAA,CAAK,GAAA,CAAI,SAAA,CAAU,MAAA,CAAO,UAAU,CAAA;AAAA,MACtC;AAAA,IACF,CAAC,CAAA;AAED,IAAA,IAAA,CAAK,cAAA,EAAe;AAAA,EACtB;AAAA,EAuCQ,UAAU,GAAA,EAAU;AAC1B,IAAA,MAAM,GAAA,GAAM,QAAA,CAAS,aAAA,CAAc,KAAK,CAAA;AACxC,IAAA,GAAA,CAAI,SAAA,GAAY,qBAAA;AAChB,IAAA,IAAA,CAAK,IAAA,CAAK,KAAA,GAAQ,IAAA,CAAK,IAAA,CAAK,WAAA;AAC5B,IAAA,GAAA,CAAI,MAAM,GAAG,CAAA;AACb,IAAA,OAAO,GAAA;AAAA,EACT;AAAA,EAEQ,cAAA,GAAiB;AACvB,IAAA,MAAM,YAAA,GAAe,IAAA,CAAK,IAAA,CAAK,KAAA,CAAM,QAAA;AAErC,IAAA,IAAI,YAAA,KAAiB,KAAK,YAAA,EAAc;AAExC,IAAA,IAAA,CAAK,SAAS,KAAA,GAAQ,YAAA;AACtB,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,sCAAgB,EAAE,CAAA;AAEpD,IAAA,QAAA,CACG,IAAA,CAAK,CAAC,IAAA,KAAS;AACd,MAAA,IAAI,IAAA,EAAM;AACR,QAAA,IAAA,CAAK,GAAG,QAAA,CAAS;AAAA,UACf,OAAA,EAAS,IAAA,CAAK,YAAA,CAAa,WAAA,CAAY,IAAI;AAAA,SAC5C,CAAA;AACD,QAAA,IAAA,CAAK,YAAA,GAAe,YAAA;AAAA,MACtB;AAAA,IACF,CAAC,CAAA,CACA,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA;AAAA,EACxB;AAAA,EAuEA,YAAA,CAAa,QAAgB,IAAA,EAAc;AACzC,IAAA,IAAI,CAAC,IAAA,CAAK,EAAA,CAAG,GAAA,CAAI,WAAA,EAAa;AAE9B,IAAA,IAAA,CAAK,GAAG,KAAA,EAAM;AACd,IAAA,IAAA,CAAK,QAAA,GAAW,IAAA;AAChB,IAAA,IAAA,CAAK,EAAA,CAAG,SAAS,EAAE,SAAA,EAAW,EAAE,MAAA,EAAQ,IAAA,IAAQ,CAAA;AAChD,IAAA,IAAA,CAAK,QAAA,GAAW,KAAA;AAAA,EAClB;AAAA,EAEA,OAAO,IAAA,EAAY;AACjB,IAAA,IAAI,IAAA,CAAK,IAAA,KAAS,IAAA,CAAK,IAAA,CAAK,MAAM,OAAO,KAAA;AAEzC,IAAA,IAAI,IAAA,CAAK,UAAU,OAAO,IAAA;AAE1B,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,IAAA,CAAK,IAAA,CAAK,QAAQ,IAAA,CAAK,WAAA;AACvB,IAAA,IAAA,CAAK,cAAA,EAAe;AACpB,IAAA,IAAI,KAAK,IAAA,CAAK,QAAA,KAAa,IAAA,CAAK,EAAA,CAAG,MAAM,QAAA,EAAU;AACjD,MAAA,IAAA,CAAK,GAAG,QAAA,CAAS;AAAA,QACf,OAAA,EAAS,KAAK,YAAA,CAAa,WAAA;AAAA,UACzB,YAAY,QAAA,CAAS,EAAA,CAAG,CAAC,IAAA,CAAK,KAAK,QAAQ;AAAA;AAC7C,OACD,CAAA;AAAA,IACH;AAEA,IAAA,MAAM,MAAA,GAAS,cAAc,IAAA,CAAK,EAAA,CAAG,MAAM,GAAA,CAAI,QAAA,EAAS,EAAG,IAAA,CAAK,WAAW,CAAA;AAC3E,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,IAAA,CAAK,QAAA,GAAW,IAAA;AAChB,MAAA,IAAA,CAAK,GAAG,QAAA,CAAS;AAAA,QACf,OAAA,EAAS,EAAE,IAAA,EAAM,MAAA,CAAO,IAAA,EAAM,IAAI,MAAA,CAAO,EAAA,EAAI,MAAA,EAAQ,MAAA,CAAO,IAAA,EAAK;AAAA,QACjE,cAAA,EAAgB;AAAA,OACjB,CAAA;AACD,MAAA,IAAA,CAAK,QAAA,GAAW,KAAA;AAAA,IAClB;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,UAAA,GAAa;AACX,IAAA,IAAA,CAAK,SAAS,KAAA,GAAQ,IAAA;AACtB,IAAA,IAAA,CAAK,GAAG,KAAA,EAAM;AAAA,EAChB;AAAA,EAEA,YAAA,GAAe;AACb,IAAA,IAAA,CAAK,SAAS,KAAA,GAAQ,KAAA;AAAA,EACxB;AAAA,EAEA,SAAA,GAAY;AACV,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,OAAA,GAAU;AACR,IAAA,IAAA,CAAK,IAAI,OAAA,EAAQ;AACjB,IAAA,IAAA,CAAK,GAAG,OAAA,EAAQ;AAChB,IAAA,IAAA,CAAK,sBAAA,EAAuB;AAAA,EAC9B;AAeF;AAEA,SAAS,aAAA,CACP,QACA,MAAA,EACmD;AACnD,EAAA,IAAI,MAAA,KAAW,QAAQ,OAAO,IAAA;AAE9B,EAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,EAAA,IAAI,SAAS,MAAA,CAAO,MAAA;AACpB,EAAA,IAAI,SAAS,MAAA,CAAO,MAAA;AAEpB,EAAA,OACE,KAAA,GAAQ,UACR,MAAA,CAAO,UAAA,CAAW,KAAK,CAAA,KAAM,MAAA,CAAO,WAAW,KAAK,CAAA;AAEpD,IAAA,EAAE,KAAA;AAEJ,EAAA,OACE,MAAA,GAAS,KAAA,IACT,MAAA,GAAS,KAAA,IACT,MAAA,CAAO,UAAA,CAAW,MAAA,GAAS,CAAC,CAAA,KAAM,MAAA,CAAO,UAAA,CAAW,MAAA,GAAS,CAAC,CAAA,EAC9D;AACA,IAAA,MAAA,EAAA;AACA,IAAA,MAAA,EAAA;AAAA,EACF;AAEA,EAAA,OAAO,EAAE,IAAA,EAAM,KAAA,EAAO,EAAA,EAAI,MAAA,EAAQ,MAAM,MAAA,CAAO,KAAA,CAAM,KAAA,EAAO,MAAM,CAAA,EAAE;AACtE;;AC3SO,MAAM,aAAA,GAAgB,KAAA;AAAA,EAC3B,eAAA,CAAgB,IAAA;AAAA,EAChB,CAAC,GAAA,KAA6B;AAC5B,IAAA,MAAM,MAAA,GAAS,GAAA,CAAI,GAAA,CAAI,eAAA,CAAgB,GAAG,CAAA;AAC1C,IAAA,MAAM,cAAA,GAAiB,IAAI,cAAA,CAAe,MAAA,CAAO,SAAS,CAAA;AAC1D,IAAA,OAAO,CAAC,IAAA,EAAM,IAAA,EAAM,MAAA,KAClB,IAAI,gBAAgB,IAAA,EAAM,IAAA,EAAM,MAAA,EAAQ,cAAA,EAAgB,MAAM,CAAA;AAAA,EAClE;AACF;AAEA,QAAA,CAAS,aAAA,EAAe;AAAA,EACtB,WAAA,EAAa,sBAAA;AAAA,EACb,KAAA,EAAO;AACT,CAAC,CAAA;;ACfM,MAAM,kBAAA,GAAuC;AAAA,EAClD,aAAA;AAAA,EACA;AACF;;;;"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/__internal__/meta.ts","../../src/code-block/config.ts","../../src/code-block/view/loader.ts","../../src/__internal__/keep-alive.ts","../../src/__internal__/components/icon.tsx","../../src/code-block/view/components/copy-button.tsx","../../src/code-block/view/components/language-picker.tsx","../../src/code-block/view/components/preview-panel.tsx","../../src/code-block/view/components/code-block.tsx","../../src/code-block/view/node-view.ts","../../src/code-block/view/index.ts","../../src/code-block/index.ts"],"sourcesContent":["import type { Meta, MilkdownPlugin } from '@jvs-milkdown/ctx'\n\nexport function withMeta<T extends MilkdownPlugin>(\n plugin: T,\n meta: Partial<Meta> & Pick<Meta, 'displayName'>\n): T {\n Object.assign(plugin, {\n meta: {\n package: '@jvs-milkdown/components',\n ...meta,\n },\n })\n\n return plugin\n}\n","import type { LanguageDescription } from '@codemirror/language'\nimport type { Extension } from '@codemirror/state'\n\nimport { $ctx } from '@jvs-milkdown/utils'\n\nimport { withMeta } from '../__internal__/meta'\n\nexport interface CodeBlockConfig {\n extensions: Extension[]\n languages: LanguageDescription[]\n expandIcon: string\n searchIcon: string\n clearSearchIcon: string\n searchPlaceholder: string\n noResultText: string\n copyText: string\n copyIcon: string\n onCopy?: (text: string) => void\n renderLanguage: (language: string, selected: boolean) => string\n renderPreview: (\n language: string,\n content: string,\n applyPreview: (value: null | string | HTMLElement) => void\n ) => void | null | string | HTMLElement\n previewToggleButton: (previewOnlyMode: boolean) => string\n previewLabel: string\n previewOnlyByDefault?: boolean\n previewLoading: string | HTMLElement\n wrapText: string\n wrapIcon: string\n}\n\nexport const defaultConfig: CodeBlockConfig = {\n extensions: [],\n languages: [],\n expandIcon: '⬇',\n searchIcon: '🔍',\n clearSearchIcon: '⌫',\n searchPlaceholder: 'Search language',\n noResultText: 'No result',\n copyText: 'Copy',\n copyIcon: '📋',\n onCopy: () => {},\n renderLanguage: (language) => language,\n renderPreview: () => null,\n previewToggleButton: (previewOnlyMode) => (previewOnlyMode ? 'Edit' : 'Hide'),\n previewLabel: 'Preview',\n previewLoading: 'Loading...',\n wrapText: 'Wrap',\n wrapIcon: '',\n}\n\nexport const codeBlockConfig = $ctx(defaultConfig, 'codeBlockConfigCtx')\n\nwithMeta(codeBlockConfig, {\n displayName: 'Config<code-block>',\n group: 'CodeBlock',\n})\n","import type { LanguageDescription, LanguageSupport } from '@codemirror/language'\n\nexport interface LanguageInfo {\n name: string\n alias: readonly string[]\n}\n\nexport class LanguageLoader {\n private readonly map: Record<string, LanguageDescription>\n\n constructor(private languages: LanguageDescription[]) {\n this.map = {}\n\n languages.forEach((language) => {\n language.alias.forEach((alias) => {\n this.map[alias] = language\n })\n })\n }\n\n getAll(): LanguageInfo[] {\n return this.languages.map((language): LanguageInfo => {\n return {\n name: language.name,\n alias: language.alias,\n }\n })\n }\n\n load(languageName: string): Promise<LanguageSupport | undefined> {\n const languageMap = this.map\n const language = languageMap[languageName.toLowerCase()]\n\n if (!language) return Promise.resolve(undefined)\n\n if (language.support) return Promise.resolve(language.support)\n\n return language.load()\n }\n}\n","// Prevent tree-shaking from removing Vue's `h` and `Fragment`,\n// which are required at runtime for TSX to work.\nexport function keepAlive(..._args: unknown[]) {}\n","import clsx from 'clsx'\nimport DOMPurify from 'dompurify'\nimport { h } from 'vue'\n\nimport { keepAlive } from '../keep-alive'\n\nkeepAlive(h)\n\ntype IconProps = {\n icon?: string | null\n class?: string\n onClick?: (event: PointerEvent) => void\n}\n\nexport function Icon({ icon, class: className, onClick }: IconProps) {\n return (\n <span\n class={clsx('milkdown-icon', className)}\n onPointerdown={onClick}\n innerHTML={icon ? DOMPurify.sanitize(icon.trim()) : undefined}\n />\n )\n}\n\nIcon.props = {\n icon: {\n type: String,\n required: false,\n },\n class: {\n type: String,\n required: false,\n },\n onClick: {\n type: Function,\n required: false,\n },\n}\n","import { defineComponent, h, Fragment } from 'vue'\n\nimport { Icon } from '../../../__internal__/components/icon'\nimport { keepAlive } from '../../../__internal__/keep-alive'\n\nkeepAlive(h, Fragment)\n\ntype CopyButtonProps = {\n copyText: string\n copyIcon: string\n onCopy: (text: string) => void\n text: string\n}\n\nasync function copyToClipboard(text: string) {\n try {\n return navigator.clipboard.writeText(text)\n } catch {\n const element = document.createElement('textarea')\n const previouslyFocusedElement = document.activeElement\n\n element.value = text\n\n // Prevent keyboard from showing on mobile\n element.setAttribute('readonly', '')\n\n element.style.contain = 'strict'\n element.style.position = 'absolute'\n element.style.left = '-9999px'\n element.style.fontSize = '12pt' // Prevent zooming on iOS\n\n const selection = document.getSelection()\n const originalRange = selection\n ? selection.rangeCount > 0 && selection.getRangeAt(0)\n : null\n\n document.body.appendChild(element)\n element.select()\n\n // Explicit selection workaround for iOS\n element.selectionStart = 0\n element.selectionEnd = text.length\n\n document.execCommand('copy')\n document.body.removeChild(element)\n\n if (originalRange) {\n selection!.removeAllRanges() // originalRange can't be truthy when selection is falsy\n selection!.addRange(originalRange)\n }\n\n // Get the focus back on the previously focused element, if any\n if (previouslyFocusedElement) {\n ;(previouslyFocusedElement as HTMLElement).focus()\n }\n }\n}\n\nexport const CopyButton = defineComponent<CopyButtonProps>({\n props: {\n copyText: {\n type: String,\n required: true,\n },\n copyIcon: {\n type: String,\n required: true,\n },\n onCopy: {\n type: Function,\n required: true,\n },\n text: {\n type: String,\n required: true,\n },\n },\n setup(props) {\n const onCopyCode = () => {\n copyToClipboard(props.text)\n .then(() => props.onCopy(props.text))\n .catch(console.error)\n }\n\n return () => {\n return (\n <>\n <button type=\"button\" class=\"copy-button\" onClick={onCopyCode}>\n <Icon icon={props.copyIcon} />\n {props.copyText}\n </button>\n </>\n )\n }\n },\n})\n","import { computePosition } from '@floating-ui/dom'\nimport clsx from 'clsx'\nimport {\n computed,\n defineComponent,\n ref,\n h,\n Fragment,\n onMounted,\n onUnmounted,\n watch,\n} from 'vue'\n\nimport type { CodeBlockProps } from './code-block'\n\nimport { Icon } from '../../../__internal__/components/icon'\nimport { keepAlive } from '../../../__internal__/keep-alive'\n\nkeepAlive(h, Fragment)\n\ntype LanguagePickerProps = Pick<\n CodeBlockProps,\n 'language' | 'config' | 'setLanguage' | 'getAllLanguages' | 'getReadOnly'\n>\n\nexport const LanguagePicker = defineComponent<LanguagePickerProps>({\n props: {\n language: {\n type: Object,\n required: true,\n },\n getReadOnly: {\n type: Function,\n required: true,\n },\n config: {\n type: Object,\n required: true,\n },\n getAllLanguages: {\n type: Function,\n required: true,\n },\n setLanguage: {\n type: Function,\n required: true,\n },\n },\n setup({ language, config, setLanguage, getAllLanguages, getReadOnly }) {\n const triggerRef = ref<HTMLButtonElement>()\n const showPicker = ref(false)\n const searchRef = ref<HTMLInputElement>()\n const pickerRef = ref<HTMLDivElement>()\n const filter = ref('')\n\n watch([showPicker, triggerRef, pickerRef], () => {\n filter.value = ''\n const picker = triggerRef.value\n const languageList = pickerRef.value\n if (!picker || !languageList) return\n\n computePosition(picker, languageList, {\n placement: 'bottom-start',\n })\n .then(({ x, y }) => {\n Object.assign(languageList.style, {\n left: `${x}px`,\n top: `${y}px`,\n })\n })\n .catch(console.error)\n })\n\n const onTogglePicker = (e: Event) => {\n e.preventDefault()\n e.stopPropagation()\n if (getReadOnly()) return\n\n const next = !showPicker.value\n showPicker.value = next\n if (next) {\n setTimeout(() => searchRef.value?.focus(), 0)\n }\n }\n\n const changeFilter = (e: Event) => {\n const target = e.target as HTMLInputElement\n filter.value = target.value\n }\n\n const onSearchKeydown = (e: Event) => {\n if ((e as KeyboardEvent).key === 'Escape') filter.value = ''\n }\n\n const languages = computed(() => {\n if (!showPicker.value) return []\n\n const all = getAllLanguages() ?? []\n\n const selected = all.find(\n (languageInfo) =>\n languageInfo.name.toLowerCase() === language.value.toLowerCase()\n )\n\n const filtered = all.filter((languageInfo) => {\n const currentValue = filter.value.toLowerCase()\n\n return (\n (languageInfo.name.toLowerCase().includes(currentValue) ||\n languageInfo.alias.some((alias) =>\n alias.toLowerCase().includes(currentValue)\n )) &&\n languageInfo !== selected\n )\n })\n\n if (filtered.length === 0) return []\n\n if (!selected) return filtered\n\n return [selected, ...filtered]\n })\n\n const clickHandler = (e: MouseEvent) => {\n const target = e.target as HTMLElement\n\n if (triggerRef.value && triggerRef.value.contains(target)) return\n\n const picker = pickerRef.value\n const trigger = triggerRef.value\n if (!trigger || !picker) return\n\n if (trigger.dataset.expanded !== 'true') return\n\n if (!picker.contains(target)) showPicker.value = false\n }\n\n onMounted(() => {\n window.addEventListener('click', clickHandler)\n })\n\n onUnmounted(() => {\n window.removeEventListener('click', clickHandler)\n })\n\n return () => {\n return (\n <>\n <button\n type=\"button\"\n ref={triggerRef}\n class=\"language-button\"\n onClick={onTogglePicker}\n data-expanded={String(showPicker.value)}\n >\n {language.value || 'Text'}\n <div class=\"expand-icon\">\n <Icon icon={config.expandIcon} />\n </div>\n </button>\n <div ref={pickerRef} class=\"language-picker\">\n {showPicker.value ? (\n <div class=\"list-wrapper\">\n <div class=\"search-box\">\n <div class=\"search-icon\">\n <Icon icon={config.searchIcon} />\n </div>\n <input\n ref={searchRef}\n class=\"search-input\"\n placeholder={config.searchPlaceholder}\n value={filter.value}\n onInput={changeFilter}\n onKeydown={onSearchKeydown}\n />\n <div\n class={clsx(\n 'clear-icon',\n filter.value.length === 0 && 'hidden'\n )}\n onMousedown={(e) => {\n e.preventDefault()\n filter.value = ''\n }}\n >\n <Icon icon={config.clearSearchIcon} />\n </div>\n </div>\n <ul\n class=\"language-list\"\n role=\"listbox\"\n onKeydown={(e) => {\n if (e.key === 'Enter') {\n const active = document.activeElement\n if (\n active instanceof HTMLElement &&\n active.dataset.language\n )\n setLanguage(active.dataset.language)\n }\n }}\n >\n {!languages.value.length ? (\n <li class=\"language-list-item no-result\">\n {config.noResultText}\n </li>\n ) : (\n languages.value.map((languageInfo) => (\n <li\n role=\"listitem\"\n tabindex=\"0\"\n class=\"language-list-item\"\n aria-selected={\n languageInfo.name.toLowerCase() ===\n language.value.toLowerCase()\n }\n data-language={languageInfo.name}\n onClick={() => {\n setLanguage(languageInfo.name)\n showPicker.value = false\n }}\n >\n {config.renderLanguage(\n languageInfo.name,\n languageInfo.name.toLowerCase() ===\n language.value.toLowerCase()\n )}\n </li>\n ))\n )}\n </ul>\n </div>\n ) : null}\n </div>\n </>\n )\n }\n },\n})\n","import DOMPurify from 'dompurify'\nimport { defineComponent, ref, watchEffect, type Ref, h, Fragment } from 'vue'\n\nimport type { CodeBlockProps } from './code-block'\n\nimport { keepAlive } from '../../../__internal__/keep-alive'\n\nkeepAlive(h, Fragment)\n\ntype PreviewPanelProps = Pick<\n CodeBlockProps,\n 'text' | 'language' | 'config'\n> & {\n previewOnlyMode: Ref<boolean>\n preview: Ref<string | HTMLElement | null>\n}\n\nexport const PreviewPanel = defineComponent<PreviewPanelProps>({\n props: {\n text: {\n type: Object,\n required: true,\n },\n language: {\n type: Object,\n required: true,\n },\n config: {\n type: Object,\n required: true,\n },\n previewOnlyMode: {\n type: Object,\n required: true,\n },\n preview: {\n type: Object,\n required: true,\n },\n },\n setup(props) {\n const { previewOnlyMode, config, preview } = props\n const previewRef = ref<HTMLDivElement>()\n\n watchEffect(() => {\n const previewContainer = previewRef.value\n if (!previewContainer) return\n\n while (previewContainer.firstChild) {\n previewContainer.removeChild(previewContainer.firstChild)\n }\n\n const previewContent = preview.value\n\n if (\n typeof previewContent === 'string' ||\n previewContent instanceof Element\n ) {\n previewContainer.innerHTML = DOMPurify.sanitize(previewContent)\n }\n })\n\n return () => {\n if (!preview.value) return null\n\n return (\n <div class=\"preview-panel\">\n {!previewOnlyMode.value && (\n <>\n <div class=\"preview-divider\" />\n <div class=\"preview-label\">{config.previewLabel}</div>\n </>\n )}\n <div ref={previewRef} class=\"preview\" />\n </div>\n )\n }\n },\n})\n","import type { EditorView as CodeMirror } from '@codemirror/view'\n\nimport clsx from 'clsx'\nimport DOMPurify from 'dompurify'\nimport {\n defineComponent,\n ref,\n type Ref,\n h,\n Fragment,\n onMounted,\n watch,\n} from 'vue'\n\nimport type { CodeBlockConfig } from '../../config'\nimport type { LanguageInfo } from '../loader'\n\nimport { Icon } from '../../../__internal__/components/icon'\nimport { keepAlive } from '../../../__internal__/keep-alive'\nimport { CopyButton } from './copy-button'\nimport { LanguagePicker } from './language-picker'\nimport { PreviewPanel } from './preview-panel'\n\nkeepAlive(h, Fragment)\n\nexport type CodeBlockProps = {\n text: Ref<string>\n selected: Ref<boolean>\n getReadOnly: () => boolean\n codemirror: CodeMirror\n language: Ref<string>\n getAllLanguages: () => Array<LanguageInfo>\n setLanguage: (language: string) => void\n config: Omit<CodeBlockConfig, 'languages' | 'extensions'>\n wordWrap: Ref<boolean>\n toggleWordWrap: () => void\n}\n\nexport const CodeBlock = defineComponent<CodeBlockProps>({\n props: {\n text: {\n type: Object,\n required: true,\n },\n selected: {\n type: Object,\n required: true,\n },\n getReadOnly: {\n type: Function,\n required: true,\n },\n codemirror: {\n type: Object,\n required: true,\n },\n language: {\n type: Object,\n required: true,\n },\n getAllLanguages: {\n type: Function,\n required: true,\n },\n setLanguage: {\n type: Function,\n required: true,\n },\n config: {\n type: Object,\n required: true,\n },\n wordWrap: {\n type: Object,\n required: true,\n },\n toggleWordWrap: {\n type: Function,\n required: true,\n },\n },\n setup(props) {\n const previewOnlyByDefault =\n props.config.previewOnlyByDefault ?? props.getReadOnly()\n const previewOnlyMode = ref(previewOnlyByDefault)\n const codemirrorHostRef = ref<HTMLDivElement>()\n const preview = ref<null | string | HTMLElement>(null)\n\n onMounted(() => {\n while (codemirrorHostRef.value?.firstChild) {\n codemirrorHostRef.value.removeChild(codemirrorHostRef.value.firstChild)\n }\n\n if (codemirrorHostRef.value) {\n codemirrorHostRef.value.appendChild(props.codemirror.dom)\n }\n })\n\n watch(\n () => [props.text.value, props.language.value],\n () => {\n const result = props.config.renderPreview(\n props.language.value,\n props.text.value,\n (value) => (preview.value = value)\n )\n if (result) {\n preview.value = result\n }\n\n // set default value for async renderPreview\n const isAsyncPreview = result === undefined\n if (isAsyncPreview && !preview.value) {\n preview.value = DOMPurify.sanitize(props.config.previewLoading)\n }\n\n if (result === null) {\n preview.value = null\n }\n },\n { immediate: true }\n )\n\n const empty = () => {}\n\n return () => {\n return (\n <>\n <div class=\"tools\">\n <LanguagePicker\n language={props.language}\n config={props.config}\n setLanguage={props.setLanguage}\n getAllLanguages={props.getAllLanguages}\n getReadOnly={props.getReadOnly}\n />\n\n <div class=\"tools-button-group\">\n <CopyButton\n copyIcon={props.config.copyIcon}\n copyText={props.config.copyText}\n onCopy={props.config.onCopy ?? empty}\n text={props.text.value}\n />\n\n <button\n class={props.wordWrap.value ? 'word-wrap-active' : ''}\n onClick={(e) => {\n e.preventDefault()\n e.stopPropagation()\n props.toggleWordWrap()\n }}\n >\n {props.config.wrapIcon ? (\n <Icon icon={props.config.wrapIcon} />\n ) : null}\n {props.config.wrapText || 'Wrap'}\n </button>\n\n {preview.value ? (\n <button\n class=\"preview-toggle-button\"\n onClick={() =>\n (previewOnlyMode.value = !previewOnlyMode.value)\n }\n >\n <Icon\n icon={props.config.previewToggleButton(\n previewOnlyMode.value\n )}\n />\n </button>\n ) : null}\n </div>\n </div>\n <div\n ref={codemirrorHostRef}\n class={clsx(\n 'codemirror-host',\n preview.value && previewOnlyMode.value && 'hidden'\n )}\n />\n <PreviewPanel\n text={props.text}\n language={props.language}\n config={props.config}\n previewOnlyMode={previewOnlyMode}\n preview={preview}\n />\n </>\n )\n }\n },\n})\n","import type { Line, SelectionRange } from '@codemirror/state'\nimport type { Node } from '@jvs-milkdown/prose/model'\nimport type { EditorView, NodeView } from '@jvs-milkdown/prose/view'\n\nimport { Compartment, EditorState } from '@codemirror/state'\nimport {\n EditorView as CodeMirror,\n type KeyBinding,\n type ViewUpdate,\n keymap as cmKeymap,\n drawSelection,\n} from '@codemirror/view'\nimport { exitCode } from '@jvs-milkdown/prose/commands'\nimport { redo, undo } from '@jvs-milkdown/prose/history'\nimport { TextSelection } from '@jvs-milkdown/prose/state'\nimport { createApp, ref, watchEffect, type App, type WatchHandle } from 'vue'\n\nimport type { CodeBlockConfig } from '../config'\nimport type { LanguageLoader } from './loader'\n\nimport { CodeBlock } from './components/code-block'\n\nexport class CodeMirrorBlock implements NodeView {\n dom: HTMLElement\n cm: CodeMirror\n app: App\n\n selected = ref(false)\n language = ref('')\n text = ref('')\n wordWrap = ref(false)\n\n private updating = false\n private languageName: string = ''\n private disposeSelectedWatcher: WatchHandle\n\n private readonly languageConf: Compartment\n private readonly readOnlyConf: Compartment\n private readonly lineWrappingConf: Compartment\n\n constructor(\n public node: Node,\n public view: EditorView,\n public getPos: () => number | undefined,\n public loader: LanguageLoader,\n public config: CodeBlockConfig\n ) {\n this.languageConf = new Compartment()\n this.readOnlyConf = new Compartment()\n this.lineWrappingConf = new Compartment()\n\n this.cm = new CodeMirror({\n doc: this.node.textContent,\n root: this.view.root,\n extensions: [\n this.readOnlyConf.of(EditorState.readOnly.of(!this.view.editable)),\n this.lineWrappingConf.of([]),\n drawSelection(),\n cmKeymap.of(this.codeMirrorKeymap()),\n this.languageConf.of([]),\n EditorState.changeFilter.of(() => this.view.editable),\n ...config.extensions,\n CodeMirror.updateListener.of(this.forwardUpdate),\n ],\n })\n\n this.app = this.createApp()\n\n this.dom = this.createDom(this.app)\n\n this.disposeSelectedWatcher = watchEffect(() => {\n const isSelected = this.selected.value\n if (isSelected) {\n this.dom.classList.add('selected')\n } else {\n this.dom.classList.remove('selected')\n }\n })\n\n this.updateLanguage()\n }\n\n private forwardUpdate = (update: ViewUpdate) => {\n if (this.updating || !this.cm.hasFocus) return\n let offset = (this.getPos() ?? 0) + 1\n const { main } = update.state.selection\n const selFrom = offset + main.from\n const selTo = offset + main.to\n const pmSel = this.view.state.selection\n if (update.docChanged || pmSel.from !== selFrom || pmSel.to !== selTo) {\n const tr = this.view.state.tr\n update.changes.iterChanges((fromA, toA, fromB, toB, text) => {\n if (text.length)\n tr.replaceWith(\n offset + fromA,\n offset + toA,\n this.view.state.schema.text(text.toString())\n )\n else tr.delete(offset + fromA, offset + toA)\n offset += toB - fromB - (toA - fromA)\n })\n tr.setSelection(TextSelection.create(tr.doc, selFrom, selTo))\n this.view.dispatch(tr)\n }\n }\n\n private createApp = () => {\n return createApp(CodeBlock, {\n text: this.text,\n selected: this.selected,\n codemirror: this.cm,\n language: this.language,\n getAllLanguages: this.getAllLanguages,\n getReadOnly: () => !this.view.editable,\n setLanguage: this.setLanguage,\n config: this.config,\n wordWrap: this.wordWrap,\n toggleWordWrap: this.toggleWordWrap,\n })\n }\n\n private createDom(app: App) {\n const dom = document.createElement('div')\n dom.className = 'milkdown-code-block'\n this.text.value = this.node.textContent\n app.mount(dom)\n return dom\n }\n\n private updateLanguage() {\n const languageName = this.node.attrs.language\n\n if (languageName === this.languageName) return\n\n this.language.value = languageName\n const language = this.loader.load(languageName ?? '')\n\n language\n .then((lang) => {\n if (lang) {\n this.cm.dispatch({\n effects: this.languageConf.reconfigure(lang),\n })\n this.languageName = languageName\n }\n })\n .catch(console.error)\n }\n\n private codeMirrorKeymap = (): KeyBinding[] => {\n const view = this.view\n return [\n { key: 'ArrowUp', run: () => this.maybeEscape('line', -1) },\n { key: 'ArrowLeft', run: () => this.maybeEscape('char', -1) },\n { key: 'ArrowDown', run: () => this.maybeEscape('line', 1) },\n { key: 'ArrowRight', run: () => this.maybeEscape('char', 1) },\n {\n key: 'Mod-Enter',\n run: () => {\n if (!exitCode(view.state, view.dispatch)) return false\n\n view.focus()\n return true\n },\n },\n { key: 'Mod-z', run: () => undo(view.state, view.dispatch) },\n { key: 'Shift-Mod-z', run: () => redo(view.state, view.dispatch) },\n { key: 'Mod-y', run: () => redo(view.state, view.dispatch) },\n {\n key: 'Backspace',\n run: () => {\n const ranges = this.cm.state.selection.ranges\n\n if (ranges.length > 1) return false\n\n const selection = ranges[0]\n\n if (selection && (!selection.empty || selection.anchor > 0))\n return false\n\n if (this.cm.state.doc.lines >= 2) return false\n\n const state = this.view.state\n const pos = this.getPos() ?? 0\n const tr = state.tr.replaceWith(\n pos,\n pos + this.node.nodeSize,\n state.schema.nodes.paragraph!.createChecked({}, this.node.content)\n )\n\n tr.setSelection(TextSelection.near(tr.doc.resolve(pos)))\n\n this.view.dispatch(tr)\n this.view.focus()\n return true\n },\n },\n ]\n }\n\n private maybeEscape = (unit: 'line' | 'char', dir: -1 | 1): boolean => {\n const { state } = this.cm\n let main: SelectionRange | Line = state.selection.main\n if (!main.empty) return false\n if (unit === 'line') main = state.doc.lineAt(main.head)\n if (dir < 0 ? main.from > 0 : main.to < state.doc.length) return false\n\n const targetPos = (this.getPos() ?? 0) + (dir < 0 ? 0 : this.node.nodeSize)\n const selection = TextSelection.near(\n this.view.state.doc.resolve(targetPos),\n dir\n )\n const tr = this.view.state.tr.setSelection(selection).scrollIntoView()\n this.view.dispatch(tr)\n this.view.focus()\n return true\n }\n\n setSelection(anchor: number, head: number) {\n if (!this.cm.dom.isConnected) return\n\n this.cm.focus()\n this.updating = true\n this.cm.dispatch({ selection: { anchor, head } })\n this.updating = false\n }\n\n update(node: Node) {\n if (node.type !== this.node.type) return false\n\n if (this.updating) return true\n\n this.node = node\n this.text.value = node.textContent\n this.updateLanguage()\n if (this.view.editable === this.cm.state.readOnly) {\n this.cm.dispatch({\n effects: this.readOnlyConf.reconfigure(\n EditorState.readOnly.of(!this.view.editable)\n ),\n })\n }\n\n const change = computeChange(this.cm.state.doc.toString(), node.textContent)\n if (change) {\n this.updating = true\n this.cm.dispatch({\n changes: { from: change.from, to: change.to, insert: change.text },\n scrollIntoView: true,\n })\n this.updating = false\n }\n return true\n }\n\n selectNode() {\n this.selected.value = true\n this.cm.focus()\n }\n\n deselectNode() {\n this.selected.value = false\n }\n\n stopEvent() {\n return true\n }\n\n destroy() {\n this.app.unmount()\n this.cm.destroy()\n this.disposeSelectedWatcher()\n }\n\n setLanguage = (language: string) => {\n this.view.dispatch(\n this.view.state.tr.setNodeAttribute(\n this.getPos() ?? 0,\n 'language',\n language\n )\n )\n }\n\n toggleWordWrap = () => {\n this.wordWrap.value = !this.wordWrap.value\n this.cm.dispatch({\n effects: this.lineWrappingConf.reconfigure(\n this.wordWrap.value ? [CodeMirror.lineWrapping] : []\n ),\n })\n }\n\n getAllLanguages = () => {\n return this.loader.getAll()\n }\n}\n\nfunction computeChange(\n oldVal: string,\n newVal: string\n): { from: number; to: number; text: string } | null {\n if (oldVal === newVal) return null\n\n let start = 0\n let oldEnd = oldVal.length\n let newEnd = newVal.length\n\n while (\n start < oldEnd &&\n oldVal.charCodeAt(start) === newVal.charCodeAt(start)\n )\n ++start\n\n while (\n oldEnd > start &&\n newEnd > start &&\n oldVal.charCodeAt(oldEnd - 1) === newVal.charCodeAt(newEnd - 1)\n ) {\n oldEnd--\n newEnd--\n }\n\n return { from: start, to: oldEnd, text: newVal.slice(start, newEnd) }\n}\n","import type { NodeViewConstructor } from '@jvs-milkdown/prose/view'\n\nimport { codeBlockSchema } from '@jvs-milkdown/preset-commonmark'\nimport { $view } from '@jvs-milkdown/utils'\n\nimport { withMeta } from '../../__internal__/meta'\nimport { codeBlockConfig } from '../config'\nimport { LanguageLoader } from './loader'\nimport { CodeMirrorBlock } from './node-view'\n\nexport const codeBlockView = $view(\n codeBlockSchema.node,\n (ctx): NodeViewConstructor => {\n const config = ctx.get(codeBlockConfig.key)\n const languageLoader = new LanguageLoader(config.languages)\n return (node, view, getPos) =>\n new CodeMirrorBlock(node, view, getPos, languageLoader, config)\n }\n)\n\nwithMeta(codeBlockView, {\n displayName: 'NodeView<code-block>',\n group: 'CodeBlock',\n})\n","import type { MilkdownPlugin } from '@jvs-milkdown/ctx'\n\nimport { codeBlockConfig } from './config'\nimport { codeBlockView } from './view'\n\nexport * from './config'\nexport * from './view'\n\nexport const codeBlockComponent: MilkdownPlugin[] = [\n codeBlockView,\n codeBlockConfig,\n]\n"],"names":["_a","CodeMirror","cmKeymap"],"mappings":"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"}
|