@k2b/ui 0.45.0 → 0.47.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser/actions/Dropdown.js +8 -1
- package/dist/browser/actions/Dropdown.js.map +1 -1
- package/dist/browser/actions/FilterChip.js +11 -5
- package/dist/browser/actions/FilterChip.js.map +1 -1
- package/dist/browser/actions/ViewTabs.js +225 -93
- package/dist/browser/actions/ViewTabs.js.map +1 -1
- package/dist/browser/chat/ChatDecision.js +10 -6
- package/dist/browser/chat/ChatDecision.js.map +1 -1
- package/dist/browser/content/FileGrid.js +125 -99
- package/dist/browser/content/FileGrid.js.map +1 -1
- package/dist/browser/content/VirtualFeed.js +26 -21
- package/dist/browser/content/VirtualFeed.js.map +1 -1
- package/dist/browser/inputs/Combobox.js +14 -6
- package/dist/browser/inputs/Combobox.js.map +1 -1
- package/dist/browser/inputs/choice.js +36 -9
- package/dist/browser/inputs/choice.js.map +1 -1
- package/dist/browser/layout/AnchoredPopover.js +2 -1
- package/dist/browser/layout/AnchoredPopover.js.map +1 -1
- package/dist/browser/layout/AppWorkspace.js +348 -444
- package/dist/browser/layout/AppWorkspace.js.map +1 -1
- package/dist/browser/layout/AppWorkspaceSidebarItemStatus.js +113 -0
- package/dist/browser/layout/AppWorkspaceSidebarItemStatus.js.map +1 -0
- package/dist/browser/layout/DetailPanel.js +130 -108
- package/dist/browser/layout/DetailPanel.js.map +1 -1
- package/dist/browser/layout/DetailSections.js +1123 -0
- package/dist/browser/layout/DetailSections.js.map +1 -0
- package/dist/browser/layout/DetailsToggle.js +32 -0
- package/dist/browser/layout/DetailsToggle.js.map +1 -0
- package/dist/browser/layout/Discussion.js +3 -0
- package/dist/browser/layout/Discussion.js.map +1 -1
- package/dist/browser/layout/MobileShell.js +141 -102
- package/dist/browser/layout/MobileShell.js.map +1 -1
- package/dist/browser/layout/PageTitle.js +33 -10
- package/dist/browser/layout/PageTitle.js.map +1 -1
- package/dist/browser/layout/app-workspace-controller.js +12 -0
- package/dist/browser/layout/app-workspace-controller.js.map +1 -1
- package/dist/browser/layout/detail-sections-messages.js +127 -0
- package/dist/browser/layout/detail-sections-messages.js.map +1 -0
- package/dist/browser/layout/index.js +3 -0
- package/dist/browser/layout/index.js.map +1 -1
- package/dist/browser/surfaces/Avatar.js +3 -1
- package/dist/browser/surfaces/Avatar.js.map +1 -1
- package/dist/browser/surfaces/AvatarStack.js +95 -61
- package/dist/browser/surfaces/AvatarStack.js.map +1 -1
- package/dist/browser/surfaces/ChangeList.js +77 -0
- package/dist/browser/surfaces/ChangeList.js.map +1 -0
- package/dist/browser/surfaces/index.js +2 -1
- package/dist/browser/surfaces/index.js.map +1 -1
- package/dist/browser/text-editor/TextEditor.js +19 -8
- package/dist/browser/text-editor/TextEditor.js.map +1 -1
- package/dist/ssr/actions/Dropdown.js +6 -0
- package/dist/ssr/actions/Dropdown.js.map +1 -1
- package/dist/ssr/actions/FilterChip.js +1 -1
- package/dist/ssr/actions/FilterChip.js.map +1 -1
- package/dist/ssr/actions/ViewTabs.js +144 -37
- package/dist/ssr/actions/ViewTabs.js.map +1 -1
- package/dist/ssr/chat/ChatDecision.js +10 -6
- package/dist/ssr/chat/ChatDecision.js.map +1 -1
- package/dist/ssr/content/FileGrid.js +36 -22
- package/dist/ssr/content/FileGrid.js.map +1 -1
- package/dist/ssr/content/VirtualFeed.js +26 -21
- package/dist/ssr/content/VirtualFeed.js.map +1 -1
- package/dist/ssr/inputs/Combobox.js +6 -3
- package/dist/ssr/inputs/Combobox.js.map +1 -1
- package/dist/ssr/inputs/choice.js +36 -9
- package/dist/ssr/inputs/choice.js.map +1 -1
- package/dist/ssr/layout/AnchoredPopover.js +2 -1
- package/dist/ssr/layout/AnchoredPopover.js.map +1 -1
- package/dist/ssr/layout/AppWorkspace.js +66 -132
- package/dist/ssr/layout/AppWorkspace.js.map +1 -1
- package/dist/ssr/layout/AppWorkspaceSidebarItemStatus.js +76 -0
- package/dist/ssr/layout/AppWorkspaceSidebarItemStatus.js.map +1 -0
- package/dist/ssr/layout/DetailPanel.js +18 -1
- package/dist/ssr/layout/DetailPanel.js.map +1 -1
- package/dist/ssr/layout/DetailSections.js +838 -0
- package/dist/ssr/layout/DetailSections.js.map +1 -0
- package/dist/ssr/layout/DetailsToggle.js +29 -0
- package/dist/ssr/layout/DetailsToggle.js.map +1 -0
- package/dist/ssr/layout/Discussion.js +3 -0
- package/dist/ssr/layout/Discussion.js.map +1 -1
- package/dist/ssr/layout/MobileShell.js +60 -29
- package/dist/ssr/layout/MobileShell.js.map +1 -1
- package/dist/ssr/layout/PageTitle.js +29 -6
- package/dist/ssr/layout/PageTitle.js.map +1 -1
- package/dist/ssr/layout/app-workspace-controller.js +12 -0
- package/dist/ssr/layout/app-workspace-controller.js.map +1 -1
- package/dist/ssr/layout/detail-sections-messages.js +127 -0
- package/dist/ssr/layout/detail-sections-messages.js.map +1 -0
- package/dist/ssr/layout/index.js +3 -0
- package/dist/ssr/layout/index.js.map +1 -1
- package/dist/ssr/surfaces/Avatar.js +3 -1
- package/dist/ssr/surfaces/Avatar.js.map +1 -1
- package/dist/ssr/surfaces/AvatarStack.js +61 -32
- package/dist/ssr/surfaces/AvatarStack.js.map +1 -1
- package/dist/ssr/surfaces/ChangeList.js +37 -0
- package/dist/ssr/surfaces/ChangeList.js.map +1 -0
- package/dist/ssr/surfaces/index.js +2 -1
- package/dist/ssr/surfaces/index.js.map +1 -1
- package/dist/ssr/text-editor/TextEditor.js +19 -8
- package/dist/ssr/text-editor/TextEditor.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/types/actions/FilterChip.d.ts +4 -0
- package/dist/types/actions/ViewTabs.d.ts +11 -1
- package/dist/types/chat/ChatDecision.d.ts +5 -0
- package/dist/types/content/FileGrid.d.ts +6 -0
- package/dist/types/inputs/Combobox.d.ts +2 -0
- package/dist/types/inputs/choice.d.ts +9 -3
- package/dist/types/layout/AppWorkspace.d.ts +2 -28
- package/dist/types/layout/AppWorkspaceSidebarItemStatus.d.ts +30 -0
- package/dist/types/layout/DetailPanel.d.ts +9 -0
- package/dist/types/layout/DetailSections.d.ts +186 -0
- package/dist/types/layout/DetailsToggle.d.ts +13 -0
- package/dist/types/layout/MobileShell.d.ts +12 -0
- package/dist/types/layout/PageTitle.d.ts +7 -0
- package/dist/types/layout/detail-sections-messages.d.ts +61 -0
- package/dist/types/layout/index.d.ts +5 -1
- package/dist/types/surfaces/Avatar.d.ts +3 -0
- package/dist/types/surfaces/AvatarStack.d.ts +20 -1
- package/dist/types/surfaces/ChangeList.d.ts +20 -0
- package/dist/types/surfaces/index.d.ts +5 -3
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["text-editor/TextEditor.tsx"],"sourcesContent":["import { history, historyKeymap, redo, undo } from \"@codemirror/commands\";\nimport type { Extension } from \"@codemirror/state\";\nimport { EditorView, keymap } from \"@codemirror/view\";\nimport { clipboard } from \"@k2b/stdlib/solid\";\nimport {\n children,\n createEffect,\n createMemo,\n createSignal,\n createUniqueId,\n For,\n type JSX,\n on,\n onCleanup,\n onMount,\n Show,\n untrack,\n} from \"solid-js\";\nimport { Button, IconButton } from \"../actions/Button\";\nimport {\n Dropdown,\n type DropdownAction,\n type DropdownAnchor,\n type DropdownChoice,\n type DropdownItem,\n type DropdownPosition,\n} from \"../actions/Dropdown\";\nimport { SegmentedControl } from \"../actions/SegmentedControl\";\nimport { Toolbar } from \"../actions/Toolbar\";\nimport { Kbd } from \"../content/Kbd\";\nimport { dialogCore } from \"../feedback/dialog-core\";\nimport { createDictation } from \"../inputs/dictation/create-dictation\";\nimport { DictationBar, DictationButton, dictationBarShown } from \"../inputs/dictation/Dictation\";\nimport type { DictationAlternative, DictationSource } from \"../inputs/dictation/types\";\nimport { NumberInput } from \"../inputs/NumberInput\";\nimport { LocaleProvider, useLocale } from \"../intl/locale\";\nimport { formatShortcut, type KeyboardPlatform, keyboardPlatform } from \"../intl/shortcut\";\nimport BottomSheet, { bottomSheetAdaptiveOptions } from \"../layout/BottomSheet\";\nimport { codeMirrorDictationTarget, dictationExtension } from \"./dictation\";\nimport { createTextEditor, type TextEditorController, type TextEditorMode, type TextEditorOptions } from \"./engine\";\nimport { commands, formatLabels, type InlineFormat } from \"./format\";\nimport { findTables, inspectTableStructure } from \"./markdown-table\";\nimport { textEditorMessages } from \"./messages\";\nimport {\n copyTable,\n editTableSource,\n formatActiveCell,\n type MenuAction,\n runMenuAction,\n runTableAction,\n type TableHost,\n tableActionEnabled,\n} from \"./table\";\n\nexport type TextEditorProps = {\n label: string;\n initialValue?: string;\n mode?: TextEditorMode;\n onModeChange?: (mode: TextEditorMode) => void;\n readOnly?: boolean;\n loading?: boolean;\n placeholder?: string;\n extensions?: Extension;\n /** Host-owned Markdown presentation; see `createTextEditor`. The host then also styles the editor surface. */\n presentation?: TextEditorOptions[\"presentation\"];\n /** `false` when the host renders its own formatting toolbar and mode control; place `controls.TableMenu` in it. */\n toolbar?: boolean;\n /** Collaboration supplies history and server-owned structure here. */\n host?: Pick<TableHost, \"structure\" | \"renderCell\" | \"onCellSelection\" | \"tabMovesFocus\"> &\n Partial<Pick<TableHost, \"undo\" | \"redo\" | \"boundary\">>;\n maxLength: number;\n maxPasteCells?: number;\n onChange?: (text: string) => void;\n onReady?: (editor: TextEditorController, controls: TextEditorControls) => void;\n /** Return `true` when the host attached the images itself; otherwise the editor shows its attachment hint. */\n onDroppedImages?: (count: number, files: File[]) => boolean | void;\n /** Opens the host's attachment picker when clipboard images cannot be inserted. */\n onAttachImages?: () => void;\n onTableCheck?: (needsCheck: boolean) => void;\n /** Host-owned sync status. Its row appears only while there is a status or a table check; keep it set across transitions. */\n status?: JSX.Element;\n /**\n * Live dictation as the last control of the toolbar, so it never scrolls away. While it runs, the dictation bar\n * stands in for the formatting controls in the same row. Words land at the caret as typed text does.\n */\n dictation?: { source: DictationSource; alternative?: DictationAlternative };\n class?: string;\n};\n\nexport type TableSizePickerProps = {\n maxRows: number;\n maxColumns: number;\n onPick: (size: { rows: number; columns: number }) => void;\n /** Share this picker with slash commands or secondary menus. */\n onReady?: (open: () => void) => void;\n disabled?: boolean;\n class?: string;\n size?: \"xs\" | \"sm\";\n};\n\n/** Shared table-size control: pointer grid on desktop, large fields in a phone sheet. */\nexport function TableSizePicker(props: TableSizePickerProps) {\n const locale = useLocale();\n const t = () => textEditorMessages.resolve([locale()]).t;\n const [rows, setRows] = createSignal<number | null>(3);\n const [columns, setColumns] = createSignal<number | null>(3);\n const [expanded, setExpanded] = createSignal(false);\n const id = createUniqueId();\n const abort = new AbortController();\n let disposed = false;\n onCleanup(() => {\n disposed = true;\n abort.abort();\n });\n let trigger!: HTMLButtonElement;\n let popup!: HTMLDivElement;\n const reset = () => {\n setRows(Math.min(3, props.maxRows));\n setColumns(Math.min(3, props.maxColumns));\n };\n const choose = (r: number, c: number) => {\n popup.hidePopover();\n if (!disposed && !props.disabled) props.onPick({ rows: r, columns: c });\n };\n const open = async () => {\n if (disposed || props.disabled || expanded()) return;\n reset();\n if (!window.matchMedia(\"(max-width: 47.999rem)\").matches) {\n popup.showPopover();\n const anchor = trigger.getBoundingClientRect(),\n box = popup.getBoundingClientRect();\n popup.style.left = `${Math.max(8, Math.min(anchor.left, innerWidth - box.width - 8))}px`;\n popup.style.top = `${Math.max(8, anchor.top > box.height + 8 ? anchor.top - box.height - 8 : Math.min(anchor.bottom + 8, innerHeight - box.height - 8))}px`;\n popup.focus();\n return;\n }\n setExpanded(true);\n const chosen = await dialogCore.open<{ rows: number; columns: number }>(\n (close, context) => (\n <LocaleProvider locale={locale()}>\n <BottomSheet onDismiss={context.requestDismiss}>\n <BottomSheet.Header title={t().insertTable} close={context.requestDismiss} />\n <BottomSheet.Body>\n <div class=\"k2b-ste-size-picker\">\n <NumberInput label={t().rows} value={rows()} onValueChange={setRows} min={1} max={props.maxRows} step={1} />\n <NumberInput label={t().columns} value={columns()} onValueChange={setColumns} min={1} max={props.maxColumns} step={1} />\n </div>\n </BottomSheet.Body>\n <BottomSheet.Footer>\n <Button\n disabled={!rows() || !columns()}\n onClick={() => {\n const r = rows(),\n c = columns();\n if (r && c) close({ rows: r, columns: c });\n }}\n >\n {t().insertSize({ rows: rows() ?? 0, columns: columns() ?? 0 })}\n </Button>\n </BottomSheet.Footer>\n </BottomSheet>\n </LocaleProvider>\n ),\n { ...bottomSheetAdaptiveOptions, ariaLabel: t().insertTable, history: true, signal: abort.signal },\n );\n setExpanded(false);\n if (chosen && !disposed && !props.disabled) props.onPick(chosen);\n };\n onMount(() => props.onReady?.(() => void open()));\n const keyboard = (event: KeyboardEvent) => {\n const directions: Record<string, [number, number]> = { ArrowUp: [-1, 0], ArrowDown: [1, 0], ArrowLeft: [0, -1], ArrowRight: [0, 1] };\n const direction = directions[event.key];\n if (direction) {\n event.preventDefault();\n setRows(Math.max(1, Math.min(Math.min(9, props.maxRows), (rows() ?? 1) + direction[0])));\n setColumns(Math.max(1, Math.min(Math.min(10, props.maxColumns), (columns() ?? 1) + direction[1])));\n } else if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n choose(rows() ?? 1, columns() ?? 1);\n } else if (event.key === \"Escape\") trigger.focus();\n };\n return (\n <>\n <IconButton\n ref={trigger}\n variant=\"ghost\"\n class={props.class}\n size={props.size ?? \"sm\"}\n disabled={props.disabled}\n label={t().insertTable}\n aria-haspopup=\"dialog\"\n aria-controls={id}\n aria-expanded={expanded()}\n tooltip={t().insertTable}\n onMouseDown={(event) => event.preventDefault()}\n onClick={() => void open()}\n >\n <i class=\"ti ti-table\" aria-hidden=\"true\" />\n </IconButton>\n <div\n ref={popup}\n id={id}\n popover=\"auto\"\n class=\"k2b-ste-size-popover\"\n role=\"dialog\"\n aria-label={t().insertTable}\n tabIndex={-1}\n onKeyDown={keyboard}\n on:toggle={() => setExpanded(popup.matches(\":popover-open\"))}\n >\n <div class=\"k2b-ste-size-grid\" role=\"group\" aria-label={t().insertTable}>\n <For each={Array.from({ length: Math.min(9, props.maxRows) }, (_, index) => index + 1)}>\n {(r) => (\n <div class=\"k2b-ste-size-row\">\n <For each={Array.from({ length: Math.min(10, props.maxColumns) }, (_, index) => index + 1)}>\n {(c) => (\n <button\n type=\"button\"\n tabIndex={-1}\n aria-label={t().insertSize({ rows: r, columns: c })}\n data-selected={r <= (rows() ?? 0) && c <= (columns() ?? 0) ? \"true\" : undefined}\n onPointerEnter={() => {\n setRows(r);\n setColumns(c);\n }}\n onClick={() => choose(r, c)}\n />\n )}\n </For>\n </div>\n )}\n </For>\n </div>\n <div class=\"k2b-ste-size-caption\" role=\"status\">\n {t().insertSize({ rows: rows() ?? 0, columns: columns() ?? 0 })}\n </div>\n </div>\n </>\n );\n}\n\ntype TableMenuTrigger = { text?: string; class?: string; size?: \"xs\" | \"sm\"; position?: DropdownPosition };\n/** Shared table controls for a host-owned toolbar (`toolbar={false}`). */\nexport type TextEditorControls = {\n /** A table cell has focus in the formatted view. */\n tableActive: () => boolean;\n /** The shared cell menu behind a host-styled trigger; on phones it opens as a sheet. */\n TableMenu: (props: TableMenuTrigger) => JSX.Element;\n /** Formats the focused cell's selection; `false` when no cell has focus. */\n formatCell: (format: InlineFormat) => boolean;\n /** Shows a host message, such as a server's reason for a rejected table action, in the editor's notice. */\n notify: (message: string) => void;\n};\n\nconst toolbar = [\n [\"bold\", \"bold\"],\n [\"italic\", \"italic\"],\n [\"heading\", \"heading\"],\n [\"bulletList\", \"list\"],\n [\"orderedList\", \"list-numbers\"],\n [\"quote\", \"quote\"],\n [\"link\", \"link\"],\n [\"code\", \"code\"],\n [\"table\", \"table\"],\n [\"rule\", \"separator\"],\n] as const;\nconst actionIcons = {\n rowAbove: \"row-insert-top\",\n rowBelow: \"row-insert-bottom\",\n colLeft: \"column-insert-left\",\n colRight: \"column-insert-right\",\n alignLeft: \"align-left\",\n alignCenter: \"align-center\",\n alignRight: \"align-right\",\n deleteRow: \"row-remove\",\n deleteCol: \"column-remove\",\n moveRowUp: \"arrow-up\",\n moveRowDown: \"arrow-down\",\n moveColLeft: \"arrow-left\",\n moveColRight: \"arrow-right\",\n toggleHeader: \"table-row\",\n deleteTable: \"trash\",\n} as const;\ntype MenuScope = \"row\" | \"column\" | \"cell\";\nconst isInlineCommand = (command: string): command is Extract<InlineFormat, string> => inlineCommands.has(command);\nconst shortcuts: Partial<Record<keyof typeof commands, string>> = { bold: \"mod+b\", italic: \"mod+i\", link: \"mod+k\" };\nconst inlineCommands = new Set<string>([\"bold\", \"italic\", \"code\", \"link\", \"strike\"]);\n\n/** A Markdown text field with app-injected collaboration and a directly editable table view. */\nexport function TextEditor(props: TextEditorProps) {\n const locale = useLocale();\n const t = () => textEditorMessages.resolve([locale()]).t;\n const [mode, setMode] = createSignal<TextEditorMode>(props.mode ?? \"formatted\");\n const status = children(() => props.status);\n const [ready, setReady] = createSignal(false);\n const [recovery, setRecovery] = createSignal<string>();\n const [notice, setNotice] = createSignal<{ message: string; images?: boolean }>();\n const [cell, setCell] = createSignal<HTMLElement>();\n const [localSource, setLocalSource] = createSignal(false);\n const [announcement, setAnnouncement] = createSignal(\"\");\n const [check, setCheck] = createSignal(false);\n const [missingSeparator, setMissingSeparator] = createSignal(false);\n const [active, setActive] = createSignal(false);\n const [documentRevision, setDocumentRevision] = createSignal(0);\n const [phoneMenu, setPhoneMenu] = createSignal(false);\n const [platform, setPlatform] = createSignal<KeyboardPlatform>(\"other\");\n /** What the open cell menu acts on: a row grip, a column grip, or the cell (right-click, keys, toolbar). */\n const [scope, setScope] = createSignal<MenuScope>(\"cell\");\n let grip: HTMLElement | undefined;\n createEffect(() => {\n const target = cell();\n const kind = scope();\n if (!target) return;\n if (kind === \"cell\") {\n target.setAttribute(\"data-active\", \"\");\n onCleanup(() => target.removeAttribute(\"data-active\"));\n return;\n }\n // A grip's menu marks its whole row or column, and the grip stays visible while the menu is open.\n const marked =\n kind === \"row\"\n ? [target.closest(\"tr\")]\n : [...(target.closest(\".k2b-ste-table\")?.querySelectorAll<HTMLElement>(`.k2b-ste-cell[data-c=\"${target.dataset.c}\"]`) ?? [])].map(\n (element) => element.parentElement,\n );\n const opener = grip;\n for (const element of marked) element?.setAttribute(\"data-marked\", \"\");\n opener?.setAttribute(\"data-open\", \"\");\n onCleanup(() => {\n for (const element of marked) element?.removeAttribute(\"data-marked\");\n opener?.removeAttribute(\"data-open\");\n });\n });\n let disposed = false;\n onCleanup(() => {\n disposed = true;\n const text = recovery();\n if (text !== undefined) detachedRecovery(text);\n });\n // A local draft can outlive an island during navigation. Keep its recovery\n // surface in the shared dialog root so disposal never silently drops it.\n const detachedRecovery = (text: string) => {\n const language = locale();\n const labels = t();\n const beforeUnload = (event: BeforeUnloadEvent) => {\n event.preventDefault();\n event.returnValue = \"\";\n };\n window.addEventListener(\"beforeunload\", beforeUnload);\n const show = () =>\n void dialogCore\n .open<\"discard\">(\n (close, context) => {\n context.setDismissHandler(() => {});\n return (\n <LocaleProvider locale={language}>\n <BottomSheet handle={false} onDismiss={() => {}}>\n <BottomSheet.Header title={labels.recoveredInput} />\n <BottomSheet.Body>\n <label class=\"k2b-ste-recovery-label\">\n {labels.recoveredInput}\n <textarea class=\"k2b-ste-recovery\" readOnly value={text} />\n </label>\n </BottomSheet.Body>\n <BottomSheet.Footer>\n <Button variant=\"ghost\" onClick={() => close(\"discard\")}>\n {labels.discardRecovery}\n </Button>\n </BottomSheet.Footer>\n </BottomSheet>\n </LocaleProvider>\n );\n },\n { ...bottomSheetAdaptiveOptions, ariaLabel: labels.recoveredInput },\n )\n .then((result) => {\n if (result === \"discard\") window.removeEventListener(\"beforeunload\", beforeUnload);\n // The shared dialog root closes on each island disposal. Retain the\n // draft across subsequent navigation until the person explicitly discards it.\n else queueMicrotask(show);\n });\n show();\n };\n let menuOpen = false;\n let openCellMenu: ((anchor: DropdownAnchor, returnFocus?: () => HTMLElement | undefined) => void) | undefined;\n let closeCellMenu: (() => void) | undefined;\n let copyTrigger: HTMLButtonElement | undefined;\n const tableTriggers = new Set<HTMLButtonElement>();\n let frame = 0;\n const [menuPosition, setMenuPosition] = createSignal({ left: \"0px\", top: \"0px\" });\n let root!: HTMLDivElement;\n let mount!: HTMLDivElement;\n let editor: TextEditorController | undefined;\n // The view is read-only while it loads or recovers, too; dictation only runs where words can land.\n const dictationWritable = () => !props.readOnly && !props.loading && ready() && recovery() === undefined && mode() !== \"plain\";\n const dictation = createDictation({\n source: {\n start: (options) => props.dictation!.source.start(options),\n devices: () => props.dictation?.source.devices() ?? Promise.resolve([]),\n },\n get alternative() {\n return props.dictation?.alternative;\n },\n target: codeMirrorDictationTarget(() => editor?.view),\n disabled: () => !props.dictation || !dictationWritable(),\n });\n // A field that turns read-only or plain hides the toolbar; dictation then ends and the words so far stay.\n // A memo compares the value, so ordinary edits never end it.\n const dictationScope = createMemo(() => `${Boolean(props.dictation)}:${dictationWritable()}`);\n createEffect(on(dictationScope, () => dictation.end(), { defer: true }));\n const dictating = () => Boolean(props.dictation) && dictationBarShown(dictation);\n const menuBlocked = () => !!props.loading || !ready() || recovery() !== undefined;\n const blocked = () => !!props.readOnly || menuBlocked();\n const updateCheck = () => {\n const issue =\n mode() === \"plain\"\n ? { extraCells: false, missingSeparator: false }\n : inspectTableStructure(editor?.view.state.doc.toString() ?? props.initialValue ?? \"\");\n const needsCheck = issue.extraCells || issue.missingSeparator;\n setMissingSeparator(issue.missingSeparator);\n setCheck(needsCheck);\n props.onTableCheck?.(needsCheck);\n };\n const positionMenu = () => {\n const target = cell();\n if (!target) return;\n const wrap = target.closest<HTMLElement>(\".k2b-ste-table\");\n const table = wrap?.querySelector(\"table\");\n if (!target.isConnected || !wrap || !table || mode() !== \"formatted\") {\n closeCellMenu?.();\n menuOpen = false;\n setCell(undefined);\n checkFocus();\n return;\n }\n // Only the read-only phone copy control sits below its table; every other menu opens beside its anchor.\n if (!props.readOnly) return;\n const bounds = root.getBoundingClientRect();\n setMenuPosition({\n left: `${wrap.getBoundingClientRect().left - bounds.left}px`,\n top: `${wrap.getBoundingClientRect().bottom - bounds.top - (window.matchMedia(\"(max-width: 47.999rem)\").matches ? 44 : 0)}px`,\n });\n };\n const schedulePosition = () => {\n if (!frame)\n frame = requestAnimationFrame(() => {\n frame = 0;\n positionMenu();\n });\n };\n const unavailable = () => !!props.host?.structure && !props.host.structure.available();\n const actionDisabled = (action: MenuAction) => {\n documentRevision();\n const wrap = cell()?.closest<HTMLElement>(\".k2b-ste-table\");\n return blocked() || !editor || !wrap || !tableActionEnabled(editor.view, wrap, action);\n };\n const isMove = (action: MenuAction) => action.startsWith(\"move\");\n const runAction = (action: MenuAction) => {\n const wrap = cell()?.closest<HTMLElement>(\".k2b-ste-table\");\n const focused = document.activeElement;\n const menuElement = focused instanceof HTMLElement ? focused.closest<HTMLElement>('[role=\"menu\"]') : null;\n if (editor && wrap && !actionDisabled(action)) runMenuAction(editor.view, wrap, action);\n // The phone move sheet remains usable for another move. Local structural\n // focus belongs to the cell only after the menu has closed.\n if (isMove(action) && focused instanceof HTMLElement && menuElement) {\n const restore = () => {\n if (disposed || !menuElement.isConnected) return;\n const target =\n focused.isConnected && !focused.matches(\":disabled\")\n ? focused\n : menuElement.querySelector<HTMLElement>('[role^=\"menuitem\"]:not(:disabled)');\n target?.focus({ preventScroll: true });\n };\n restore();\n queueMicrotask(restore);\n }\n };\n const moveKeys: Partial<Record<MenuAction, string>> = {\n moveRowUp: \"alt+arrowup\",\n moveRowDown: \"alt+arrowdown\",\n moveColLeft: \"alt+arrowleft\",\n moveColRight: \"alt+arrowright\",\n };\n const shortActionLabels = {\n rowAbove: \"menuAbove\",\n rowBelow: \"menuBelow\",\n moveRowUp: \"menuUp\",\n moveRowDown: \"menuDown\",\n deleteRow: \"menuDelete\",\n colLeft: \"menuInsertLeft\",\n colRight: \"menuInsertRight\",\n moveColLeft: \"menuMoveLeft\",\n moveColRight: \"menuMoveRight\",\n deleteCol: \"menuDelete\",\n } as const;\n const menuRow = () => {\n documentRevision();\n return t().menuRow(Number(cell()?.dataset.r ?? 0));\n };\n const menuColumn = () => {\n documentRevision();\n const column = Number(cell()?.dataset.c ?? 0);\n const header = cell()?.closest(\".k2b-ste-table\")?.querySelector<HTMLElement>(`.k2b-ste-cell[data-r=\"0\"][data-c=\"${column}\"]`);\n return t().menuColumn(header?.dataset.raw || t().column(column + 1));\n };\n const menuHeading = (kind: MenuScope = scope()) =>\n kind === \"row\" ? menuRow() : kind === \"column\" ? menuColumn() : `${menuRow()} · ${menuColumn()}`;\n const actionItem = (\n action: keyof typeof actionIcons,\n choice?: Pick<DropdownChoice, \"choice\" | \"checked\" | \"class\" | \"ariaLabel\">,\n kind: MenuScope = \"cell\",\n ) =>\n ({\n get label() {\n // A grip's sheet has no row or column heading over its entries, so deleting keeps its full name.\n const short = phoneMenu() && action in shortActionLabels && !(kind !== \"cell\" && action.startsWith(\"delete\"));\n return short ? t()[shortActionLabels[action as keyof typeof shortActionLabels]] : t()[action];\n },\n icon: `ti ti-${actionIcons[action]}`,\n get disabled() {\n return actionDisabled(action);\n },\n immediate: true,\n trailing: moveKeys[action] ? <Kbd keys={moveKeys[action]!} /> : action === \"rowBelow\" ? <Kbd keys=\"enter\" /> : undefined,\n variant: action === \"deleteRow\" || action === \"deleteCol\" || action === \"deleteTable\" ? \"danger\" : undefined,\n closeOnSelect: !isMove(action),\n action: () => runAction(action),\n ...choice,\n }) satisfies DropdownAction;\n const [copying, setCopying] = createSignal(false);\n const tableCopy = clipboard.createWriter({\n write: ({ view, wrap, format }: { view: EditorView; wrap: HTMLElement; format: \"table\" | \"markdown\" }) => copyTable(view, wrap, format),\n });\n const copy = async (format: \"table\" | \"markdown\") => {\n const wrap = cell()?.closest<HTMLElement>(\".k2b-ste-table\");\n if (!editor || !wrap || copying()) return;\n setCopying(true);\n setNotice({ message: t().copyingTable });\n const success = await tableCopy.copy({ view: editor.view, wrap, format });\n if (disposed) return;\n setCopying(false);\n setNotice({ message: success ? (format === \"table\" ? t().copiedTable : t().copiedMarkdown) : t().copyFailed });\n };\n const copyItems = (): DropdownAction[] => [\n {\n get label() {\n return phoneMenu() && !props.readOnly ? t().menuCopy : t().copyTable;\n },\n icon: \"ti ti-copy\",\n get disabled() {\n return copying();\n },\n immediate: true,\n action: () => {\n void copy(\"table\");\n },\n },\n {\n get label() {\n return phoneMenu() && !props.readOnly ? t().menuMarkdown : t().copyMarkdown;\n },\n icon: \"ti ti-markdown\",\n get disabled() {\n return copying();\n },\n immediate: true,\n action: () => {\n void copy(\"markdown\");\n },\n },\n ];\n /** The row grip shows row and table actions, the column grip column, alignment and table actions; the rest everything. */\n const items = (kind: MenuScope): DropdownItem[] => {\n if (props.readOnly) return copyItems();\n const align = () => {\n documentRevision();\n return cell()?.parentElement?.style.textAlign || \"left\";\n };\n const row: DropdownItem[] = [\n {\n get sectionLabel() {\n return kind === \"cell\" ? menuRow() : undefined;\n },\n items: ([\"rowAbove\", \"rowBelow\", \"moveRowUp\", \"moveRowDown\", \"deleteRow\"] as const).map((action) =>\n actionItem(action, undefined, kind),\n ),\n },\n ];\n const column: DropdownItem[] = [\n {\n get sectionLabel() {\n return kind === \"cell\" ? menuColumn() : undefined;\n },\n items: ([\"colLeft\", \"colRight\", \"moveColLeft\", \"moveColRight\"] as const).map((action) => actionItem(action)),\n },\n {\n sectionLabel: t().alignment,\n layout: \"row\",\n items: ([\"alignLeft\", \"alignCenter\", \"alignRight\"] as const).map((action, index) =>\n actionItem(action, {\n choice: \"radio\",\n class: \"k2b-ste-align-choice\",\n ariaLabel: t()[action],\n checked: () => align() === [\"left\", \"center\", \"right\"][index],\n }),\n ),\n },\n { items: [actionItem(\"deleteCol\", undefined, kind)] },\n ];\n return [\n {\n get sectionLabel() {\n return menuHeading(kind);\n },\n items: [],\n },\n ...(kind === \"column\" ? [] : row),\n ...(kind === \"row\" ? [] : column),\n {\n sectionLabel: t().table,\n items: [\n actionItem(\"toggleHeader\", {\n choice: \"checkbox\",\n class: \"k2b-ste-header-choice\",\n checked: () => {\n documentRevision();\n return cell()?.closest<HTMLElement>(\".k2b-ste-table\")?.dataset.header === \"true\";\n },\n }),\n {\n label: t().editMarkdown,\n icon: \"ti ti-markdown\",\n action: () => {\n const wrap = cell()?.closest<HTMLElement>(\".k2b-ste-table\");\n if (editor && wrap) editTableSource(editor.view, wrap);\n },\n },\n ...copyItems(),\n actionItem(\"deleteTable\"),\n ...(unavailable() ? [{ label: t().structureUnavailable, disabled: true as const }] : []),\n ],\n },\n ];\n };\n const preserveSelection = (event: MouseEvent) => event.preventDefault();\n const menuChange = (open: boolean) => {\n menuOpen = open;\n };\n // A press beside an open table menu only closes it: no cell takes focus, no\n // text is selected and no column is marked. The menu's light dismiss closes it.\n let tableMenuOpen = false;\n const tableMenuChange = (open: boolean) => {\n menuOpen = open;\n tableMenuOpen = open && !phoneMenu();\n };\n let swallow: AbortController | undefined;\n const pressBesideMenu = (event: PointerEvent) => {\n swallow?.abort();\n if (!tableMenuOpen || (event.target instanceof Element && event.target.closest(\".k2b-ste-table-menu\"))) return;\n event.stopPropagation();\n const current = new AbortController();\n swallow = current;\n const block = (blocked: Event) => {\n blocked.preventDefault();\n blocked.stopPropagation();\n if (blocked.type === \"click\" || blocked.type === \"contextmenu\") current.abort();\n };\n for (const type of [\"mousedown\", \"mouseup\", \"click\", \"contextmenu\"])\n document.addEventListener(type, block, { capture: true, signal: current.signal });\n // Only this press is swallowed: its click follows the release in the same task, and a cancelled press never\n // clicks. A key other than a modifier, which may come with the press, starts new input.\n const end = () => current.abort();\n document.addEventListener(\"pointerup\", () => setTimeout(end), { capture: true, once: true, signal: current.signal });\n document.addEventListener(\"pointercancel\", end, { capture: true, once: true, signal: current.signal });\n document.addEventListener(\n \"keydown\",\n (key) => {\n if (![\"Shift\", \"Control\", \"Alt\", \"Meta\"].includes(key.key)) end();\n },\n { capture: true, signal: current.signal },\n );\n };\n const menuClose = () => {\n menuOpen = false;\n tableMenuOpen = false;\n setScope(\"cell\");\n grip = undefined;\n schedulePosition();\n queueMicrotask(() => {\n if (disposed) return;\n const focused = document.activeElement;\n if (focused instanceof HTMLElement && focused.matches(\".k2b-ste-copy-menu, .k2b-ste-table-tool\")) cell()?.focus();\n checkFocus();\n });\n };\n const sheetTop = (kind: () => MenuScope) =>\n props.readOnly\n ? undefined\n : (close: () => void) => (\n <div class=\"k2b-ste-table-sheet-heading\">\n <span title={menuHeading(kind())}>{menuHeading(kind())}</span>\n <Button variant=\"ghost\" onClick={close}>\n {t().done}\n </Button>\n </div>\n );\n const menuLabel = () => (props.readOnly ? t().copyTable : t().tableMenu);\n const menuDisabled = () => menuBlocked() || localSource() || !cell()?.isConnected;\n // A sheet owns its item inventory until it closes. Replace that owner when\n // edit access changes so an already open sheet cannot retain edit entries.\n /** The toolbar's table button: the whole menu for the focused cell. */\n const menu = (trigger?: TableMenuTrigger) => (\n <Show when={props.readOnly ? \"read\" : \"write\"} keyed>\n {(_access) => (\n <Dropdown\n items={items(\"cell\")}\n phone=\"sheet\"\n sheetTop={sheetTop(() => \"cell\")}\n menuClass=\"k2b-ste-table-menu\"\n position={trigger?.position ?? \"bottom-right\"}\n width=\"18rem\"\n label={menuLabel()}\n disabled={menuDisabled()}\n onOpenChange={tableMenuChange}\n onClose={menuClose}\n >\n <Dropdown.Trigger\n ref={(element) => {\n tableTriggers.add(element);\n onCleanup(() => tableTriggers.delete(element));\n }}\n class={`k2b-ste-tool k2b-ste-table-tool ${trigger?.class ?? \"\"}`}\n variant=\"ghost\"\n size={trigger?.size ?? \"sm\"}\n iconOnly={!trigger?.text}\n label={trigger?.text ?? t().tableMenu}\n aria-pressed={true}\n onMouseDown={preserveSelection}\n >\n <i class=\"ti ti-table\" aria-hidden=\"true\" />\n {trigger?.text}\n <Show when={trigger?.text}>\n <i class=\"ti ti-chevron-down\" aria-hidden=\"true\" />\n </Show>\n </Dropdown.Trigger>\n </Dropdown>\n )}\n </Show>\n );\n /** Grips, right-click and Shift+F10 open this menu beside its anchor; it has no button of its own. */\n const cellMenu = () => (\n <Show when={props.readOnly ? \"read\" : \"write\"} keyed>\n {(_access) => (\n <Dropdown\n items={items(scope())}\n phone=\"sheet\"\n sheetTop={sheetTop(scope)}\n menuClass=\"k2b-ste-table-menu\"\n position=\"bottom-right\"\n width=\"18rem\"\n label={menuLabel()}\n disabled={menuDisabled()}\n onOpenChange={tableMenuChange}\n onClose={menuClose}\n openAt={(open) => {\n openCellMenu = open;\n }}\n closeWith={(close) => {\n closeCellMenu = close;\n }}\n >\n {/* Phones have no right-click: a read-only table keeps a visible copy control below it. */}\n <Show when={props.readOnly && cell() && mode() === \"formatted\" && !menuBlocked()}>\n <Dropdown.Trigger\n ref={(element) => {\n copyTrigger = element;\n }}\n class=\"k2b-ste-copy-menu\"\n variant=\"ghost\"\n size=\"sm\"\n label={t().copyTable}\n onMouseDown={preserveSelection}\n >\n <i class=\"ti ti-copy\" aria-hidden=\"true\" />\n {t().copyTable}\n </Dropdown.Trigger>\n </Show>\n </Dropdown>\n )}\n </Show>\n );\n const runFormat = (command: keyof typeof commands) => {\n if (!editor || blocked()) return;\n if (cell()?.isConnected && isInlineCommand(command) && formatActiveCell(editor.view, command)) return;\n commands[command](editor.view);\n };\n const checkFocus = () => {\n if (disposed) return;\n // A host toolbar sits outside this root. Native popover focus moves before\n // its toggle callback, but Dropdown already exposes its synchronous state.\n if (\n menuOpen ||\n [...tableTriggers, copyTrigger].some((trigger) => trigger?.isConnected && trigger.getAttribute(\"aria-expanded\") === \"true\")\n )\n return;\n const focused = document.activeElement;\n setLocalSource(focused instanceof HTMLElement && !!focused.closest(\".k2b-ste-table-source\"));\n const inside = focused instanceof Node && root.contains(focused);\n setActive(inside);\n if (!inside || focused === editor?.view.contentDOM) setCell(undefined);\n else if (!cell()?.isConnected) setCell(undefined);\n };\n const formatMenu = (command: \"heading\" | \"code\") => (\n <Dropdown\n phone=\"sheet\"\n label={t()[command]}\n disabled={blocked() || (command === \"heading\" && !!cell())}\n onOpenChange={menuChange}\n onClose={menuClose}\n items={\n command === \"heading\"\n ? [\n {\n items: ([\"heading1\", \"heading2\", \"heading3\"] as const).map((name, index) => ({\n label: t()[name],\n icon: `ti ti-h-${index + 1}`,\n action: () => runFormat(name),\n })),\n },\n ]\n : [\n { label: t().inlineCode, icon: \"ti ti-code\", action: () => runFormat(\"code\") },\n { label: t().codeBlock, icon: \"ti ti-source-code\", disabled: !!cell(), action: () => runFormat(\"codeBlock\") },\n { label: t().strike, icon: \"ti ti-strikethrough\", trailing: <Kbd keys=\"mod+shift+x\" />, action: () => runFormat(\"strike\") },\n ]\n }\n >\n <Dropdown.Trigger class=\"k2b-ste-tool\" variant=\"ghost\" size=\"sm\" iconOnly label={t()[command]} onMouseDown={preserveSelection}>\n <i class={`ti ti-${command}`} aria-hidden=\"true\" />\n </Dropdown.Trigger>\n </Dropdown>\n );\n const selectMode = (next: TextEditorMode) => {\n // Returning from the source view removes its switch; keyboard focus then moves into the text.\n const restoreEditorFocus =\n !!editor?.view.contentDOM.contains(document.activeElement) ||\n !!root.querySelector(\".k2b-ste-views\")?.contains(document.activeElement);\n menuOpen = false;\n setCell(undefined);\n setMode(next);\n props.onModeChange?.(next);\n if (restoreEditorFocus) queueMicrotask(() => editor?.view.focus());\n };\n onMount(() => {\n setPlatform(keyboardPlatform());\n const menuMedia = window.matchMedia(\"(max-width: 47.999rem)\");\n const menuViewport = () => setPhoneMenu(menuMedia.matches);\n menuViewport();\n menuMedia.addEventListener(\"change\", menuViewport);\n onCleanup(() => menuMedia.removeEventListener(\"change\", menuViewport));\n // A standalone editor has no binding history; collaboration supplies its own instead.\n const nativeHistory = !props.host?.undo;\n editor = createTextEditor({\n parent: mount,\n doc: props.initialValue,\n mode: mode(),\n label: props.label,\n readOnly: props.readOnly,\n placeholder: props.placeholder,\n presentation: props.presentation,\n extensions: [\n nativeHistory ? [history(), keymap.of(historyKeymap)] : [],\n formatLabels.of({\n get link() {\n return t().link;\n },\n column: (column) => t().column(column),\n }),\n EditorView.updateListener.of((update) => {\n schedulePosition();\n if (update.docChanged) queueMicrotask(() => setDocumentRevision((revision) => revision + 1));\n }),\n // The caret never moves under a toolbar that stays at the top of a scrolling host.\n EditorView.scrollMargins.of(() => {\n const slot = root.querySelector<HTMLElement>(\".k2b-ste-toolbar-slot\");\n return slot && getComputedStyle(slot).position === \"sticky\" ? { top: slot.offsetHeight } : null;\n }),\n props.extensions ?? [],\n props.dictation ? dictationExtension() : [],\n ],\n host: {\n ...props.host,\n undo: props.host?.undo ?? (() => editor && undo(editor.view)),\n redo: props.host?.redo ?? (() => editor && redo(editor.view)),\n boundary: props.host?.boundary ?? (() => {}),\n cellLabel: (row, column, name) => t().cellLabel({ row, column, name }),\n actionLabel: (name) => t()[name],\n sourceLabels: () => ({\n edit: t().editMarkdown,\n valid: t().markdownValid,\n invalid: t().markdownInvalid,\n changed: t().markdownChanged,\n structural: t().markdownStructural,\n applying: t().applyingTable,\n applyFailed: t().markdownApplyFailed,\n done: phoneMenu() ? t().done : t().showTable,\n discard: t().discardMarkdown,\n continue: t().continueMarkdown,\n line: t().markdownLine,\n separator: (header, separator) => t().markdownSeparator({ header, separator }),\n extra: t().markdownExtra,\n complete: t().completeColumns,\n }),\n maxLength: props.maxLength,\n maxPasteCells: props.maxPasteCells ?? 2000,\n onRecovery: (text) => {\n if (disposed) detachedRecovery(text);\n else setRecovery((previous) => (previous === undefined ? text : `${previous}\\n\\n${text}`));\n },\n onError: (code) => setNotice({ message: t()[code] }),\n },\n onChange: (text) => {\n props.onChange?.(text);\n queueMicrotask(updateCheck);\n },\n onDroppedImages: (count, files) => {\n if (props.onDroppedImages?.(count, files) !== true) setNotice({ message: t().imageHint, images: true });\n },\n });\n const focus = (event: Event) => {\n if (!(event instanceof CustomEvent) || !(event.detail.cell instanceof HTMLElement)) return;\n setActive(true);\n setCell(event.detail.cell);\n positionMenu();\n };\n const structureAnnouncement = (event: Event) => {\n if (!(event instanceof CustomEvent)) return;\n const detail: unknown = event.detail;\n if (\n detail &&\n typeof detail === \"object\" &&\n \"rows\" in detail &&\n \"columns\" in detail &&\n typeof detail.rows === \"number\" &&\n typeof detail.columns === \"number\"\n )\n setAnnouncement(t().tableChanged({ rows: detail.rows, columns: detail.columns }));\n };\n const focusChange = () => queueMicrotask(checkFocus);\n let pointerCheck: ReturnType<typeof setTimeout> | undefined;\n const pointer = (event: PointerEvent) => {\n if (event.target instanceof Node && root.contains(event.target)) setActive(true);\n // After the press moved focus: a host toolbar control that keeps focus in the cell keeps it active.\n else if (!menuOpen) {\n clearTimeout(pointerCheck);\n pointerCheck = setTimeout(checkFocus);\n }\n };\n // A grip opens its row's or column's menu below itself; right-click opens\n // at the pointer and a key below the cell. Focus returns to the cell.\n const keyboardMenu = (event: Event) => {\n if (menuBlocked() || menuOpen || !(event instanceof CustomEvent) || !(event.detail.cell instanceof HTMLElement)) return;\n const target: HTMLElement = event.detail.cell;\n const opener = event.detail.anchor instanceof HTMLElement ? event.detail.anchor : undefined;\n const kind: MenuScope = event.detail.scope === \"row\" || event.detail.scope === \"column\" ? event.detail.scope : \"cell\";\n const { x, y } = event.detail;\n let anchor: DropdownAnchor = opener ?? target;\n if (!opener && typeof x === \"number\" && typeof y === \"number\") {\n // Keep the pointer's place inside the cell, so the menu follows it while the page scrolls.\n const start = target.getBoundingClientRect();\n anchor = {\n getBoundingClientRect: () => {\n const box = target.getBoundingClientRect();\n const left = box.left + x - start.left;\n const top = box.top + y - start.top;\n return { left, top, right: left, bottom: top };\n },\n };\n }\n grip = opener;\n setScope(kind);\n focus(event);\n // Focus returns to the menu's cell as it closes; moving a row or column moves that cell.\n queueMicrotask(() => {\n if (!disposed && cell()?.isConnected) openCellMenu?.(anchor, () => cell());\n });\n };\n const mutations = new MutationObserver(schedulePosition);\n mutations.observe(mount, { childList: true, subtree: true, characterData: true });\n const resize = new ResizeObserver(schedulePosition);\n resize.observe(mount);\n // Safari blurs a contenteditable on mouse-down without focusing the radio.\n // Keep the caret and phone toolbar stationary until the view switch runs.\n const viewMouseDown = (event: MouseEvent) => {\n if (event.target instanceof Element && event.target.closest(\".k2b-ste-views\")) event.preventDefault();\n };\n root.addEventListener(\"mousedown\", viewMouseDown);\n document.addEventListener(\"focusin\", focusChange);\n document.addEventListener(\"pointerdown\", pointer);\n document.addEventListener(\"pointerdown\", pressBesideMenu, true);\n root.addEventListener(\"k2b-ste-table-structure\", structureAnnouncement);\n root.addEventListener(\"k2b-ste-cell-focus\", focus);\n root.addEventListener(\"k2b-ste-cell-blur\", focusChange);\n root.addEventListener(\"k2b-ste-cell-menu\", keyboardMenu);\n window.addEventListener(\"scroll\", schedulePosition, true);\n window.addEventListener(\"resize\", schedulePosition);\n const viewport = window.visualViewport;\n const keyboard = () =>\n root.style.setProperty(\n \"--k2b-ste-keyboard\",\n `${Math.max(0, window.innerHeight - (viewport?.height ?? window.innerHeight) - (viewport?.offsetTop ?? 0))}px`,\n );\n viewport?.addEventListener(\"resize\", keyboard);\n viewport?.addEventListener(\"scroll\", keyboard);\n keyboard();\n setReady(true);\n updateCheck();\n props.onReady?.(editor, {\n tableActive: () => mode() === \"formatted\" && !!cell()?.isConnected,\n TableMenu: (trigger) => menu(trigger),\n formatCell: (format) => !!editor && !blocked() && !!cell()?.isConnected && formatActiveCell(editor.view, format),\n notify: (message) => setNotice({ message }),\n });\n onCleanup(() => {\n clearTimeout(pointerCheck);\n mutations.disconnect();\n resize.disconnect();\n cancelAnimationFrame(frame);\n root.removeEventListener(\"mousedown\", viewMouseDown);\n document.removeEventListener(\"focusin\", focusChange);\n document.removeEventListener(\"pointerdown\", pointer);\n document.removeEventListener(\"pointerdown\", pressBesideMenu, true);\n swallow?.abort();\n root.removeEventListener(\"k2b-ste-table-structure\", structureAnnouncement);\n root.removeEventListener(\"k2b-ste-cell-focus\", focus);\n root.removeEventListener(\"k2b-ste-cell-blur\", focusChange);\n root.removeEventListener(\"k2b-ste-cell-menu\", keyboardMenu);\n window.removeEventListener(\"scroll\", schedulePosition, true);\n window.removeEventListener(\"resize\", schedulePosition);\n viewport?.removeEventListener(\"resize\", keyboard);\n viewport?.removeEventListener(\"scroll\", keyboard);\n editor?.destroy();\n });\n });\n createEffect(() => {\n if (props.mode !== undefined) setMode(props.mode);\n });\n createEffect(() => {\n if (ready()) {\n const next = mode();\n // Rendering the grid consults reactive host availability. Those reads\n // must not turn a history notification into a nested mode reconfigure.\n untrack(() => {\n menuOpen = false;\n setCell(undefined);\n editor?.setMode(next);\n updateCheck();\n });\n }\n });\n createEffect(() => {\n const label = props.label;\n if (ready()) untrack(() => editor?.setLabel(label));\n });\n createEffect(() => {\n const readOnly = !!props.readOnly || !!props.loading || recovery() !== undefined;\n if (ready()) untrack(() => editor?.setReadOnly(readOnly));\n });\n createEffect(() => {\n documentRevision();\n const disabled = blocked() || unavailable();\n if (ready())\n root.querySelectorAll<HTMLButtonElement>(\".k2b-ste-addColumn\").forEach((button) => {\n button.disabled = disabled;\n });\n });\n return (\n <div\n ref={root}\n class={`k2b-text-editor ${props.class ?? \"\"}`}\n data-mode={mode()}\n data-readonly={props.readOnly ? \"true\" : undefined}\n data-active={active() ? \"true\" : undefined}\n aria-busy={props.loading || !ready()}\n >\n <span class=\"k2b-ste-announcement\" role=\"status\" aria-live=\"polite\" aria-atomic=\"true\">\n {announcement()}\n </span>\n <Show when={(status() !== undefined && status() !== null && status() !== false) || check()}>\n <div class=\"k2b-ste-status\" role=\"status\">\n <span>{status()}</span>\n <Show when={check()}>\n <span class=\"k2b-ste-check\" title={missingSeparator() ? t().checkSeparatorDetail : t().checkTableDetail}>\n <i class=\"ti ti-alert-triangle\" aria-hidden=\"true\" />\n {t().checkTable}\n </span>\n <Button\n size=\"sm\"\n variant=\"ghost\"\n disabled={blocked() || (!missingSeparator() && unavailable())}\n hidden={props.readOnly}\n tooltip={missingSeparator() ? t().checkSeparatorDetail : unavailable() ? t().structureUnavailable : t().checkTableDetail}\n onMouseDown={preserveSelection}\n onClick={() => {\n if (!editor) return;\n if (missingSeparator()) {\n selectMode(\"source\");\n queueMicrotask(() => editor?.view.focus());\n return;\n }\n const table = findTables(editor.view.state.doc.toString()).find((table) =>\n table.lines.some((row) => row.cells.length > table.columns),\n );\n if (table) runTableAction(editor.view, table.from, 0, 0, \"completeColumns\");\n }}\n >\n {missingSeparator() ? t().reviewMarkdown : t().completeColumns}\n </Button>\n </Show>\n </div>\n </Show>\n <Show when={!props.readOnly && mode() !== \"plain\" && props.toolbar !== false}>\n <div class=\"k2b-ste-toolbar-slot\">\n <Toolbar class=\"k2b-ste-toolbar\" label={t().formatting}>\n <Show when={dictating()}>\n <DictationBar dictation={dictation} />\n </Show>\n <For each={dictating() ? [] : [toolbar.slice(0, 3), toolbar.slice(3, 6), toolbar.slice(6)]}>\n {(group) => (\n <Toolbar.Group class=\"k2b-ste-tool-group\">\n <For each={group}>\n {([command, icon]) =>\n command === \"heading\" || command === \"code\" ? (\n formatMenu(command)\n ) : (\n <Show\n when={command === \"table\" && mode() === \"formatted\" && cell()?.isConnected}\n fallback={\n <IconButton\n class=\"k2b-ste-tool\"\n variant=\"ghost\"\n size=\"sm\"\n label={t()[command]}\n tooltip={\n shortcuts[command]\n ? `${t()[command]} (${formatShortcut(shortcuts[command] ?? \"\", { platform: platform(), locale: locale() }).label})`\n : t()[command]\n }\n disabled={blocked() || (!!cell() && !inlineCommands.has(command) && command !== \"table\")}\n onMouseDown={preserveSelection}\n onClick={() => runFormat(command)}\n >\n <i class={`ti ti-${icon}`} aria-hidden=\"true\" />\n </IconButton>\n }\n >\n {menu()}\n </Show>\n )\n }\n </For>\n </Toolbar.Group>\n )}\n </For>\n {/* Editing is always formatted. Only a source view reached through the table check offers the way back. */}\n <Show when={mode() === \"source\" && !dictating()}>\n <SegmentedControl\n class=\"k2b-ste-views\"\n size=\"sm\"\n ariaLabel={t().view}\n value=\"source\"\n options={[\n { value: \"formatted\", label: t().formatted, icon: \"ti ti-typography\" },\n { value: \"source\", label: t().source, icon: \"ti ti-markdown\" },\n ]}\n onValueChange={selectMode}\n />\n </Show>\n <Show when={props.dictation && !dictating()}>\n <DictationButton dictation={dictation} class=\"k2b-ste-tool k2b-ste-dictate\" />\n </Show>\n </Toolbar>\n </div>\n </Show>\n <Show when={props.loading || !ready()}>\n <div class=\"k2b-ste-loading\" role=\"status\" aria-label={t().loading}>\n <For each={[82, 100, 68, 0, 96, 74]}>\n {(width) => (\n <div>\n <span style={{ width: `${width}%` }} />\n </div>\n )}\n </For>\n </div>\n </Show>\n <div ref={mount} class={props.presentation ? \"k2b-ste-app-host\" : \"k2b-ste-host\"} hidden={props.loading || !ready()} />\n <div class=\"k2b-ste-floating-menu\" style={menuPosition()}>\n {cellMenu()}\n </div>\n <div role=\"status\" aria-live=\"polite\" aria-atomic=\"true\">\n <Show when={notice() || recovery() !== undefined}>\n <div class=\"k2b-ste-notice\">\n <div class=\"k2b-ste-notice-content\">\n <Show when={notice()}>\n <Show when={notice()?.images && props.onAttachImages} fallback={<span>{notice()?.message}</span>}>\n <Button size=\"sm\" variant=\"ghost\" disabled={blocked()} onClick={() => props.onAttachImages?.()}>\n {notice()?.message}\n </Button>\n </Show>\n </Show>\n <Show when={recovery() !== undefined}>\n <label class=\"k2b-ste-recovery-label\">\n {t().recoveredInput}\n <textarea class=\"k2b-ste-recovery\" readOnly value={recovery()} />\n </label>\n <Button\n size=\"sm\"\n variant=\"ghost\"\n onClick={() => {\n setRecovery(undefined);\n if (notice()?.message === t().cellRemoved) setNotice(undefined);\n }}\n >\n {t().discardRecovery}\n </Button>\n </Show>\n </div>\n <Show when={notice()}>\n <IconButton size=\"sm\" variant=\"ghost\" label={t().dismiss} onClick={() => setNotice(undefined)}>\n <i class=\"ti ti-x\" aria-hidden=\"true\" />\n </IconButton>\n </Show>\n </div>\n </Show>\n </div>\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,SAAS,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,QAAQ,sBAAsB;AAEzE,SAAS,UAAU,EAAE,MAAM,QAAQ,kBAAkB;AACrD,SAAS,SAAS,QAAQ,mBAAmB;AAC7C,SACE,QAAQ,EACR,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,cAAc,EACd,GAAG,EAEH,EAAE,EACF,SAAS,EACT,OAAO,EACP,IAAI,EACJ,OAAO,QACF,UAAU;AACjB,SAAS,MAAM,EAAE,UAAU,QAAQ,mBAAmB;AACtD,SACE,QAAQ,QAMH,qBAAqB;AAC5B,SAAS,gBAAgB,QAAQ,6BAA6B;AAC9D,SAAS,OAAO,QAAQ,oBAAoB;AAC5C,SAAS,GAAG,QAAQ,gBAAgB;AACpC,SAAS,UAAU,QAAQ,yBAAyB;AACpD,SAAS,eAAe,QAAQ,sCAAsC;AACtE,SAAS,YAAY,EAAE,eAAe,EAAE,iBAAiB,QAAQ,+BAA+B;AAEhG,SAAS,WAAW,QAAQ,uBAAuB;AACnD,SAAS,cAAc,EAAE,SAAS,QAAQ,gBAAgB;AAC1D,SAAS,cAAc,EAAyB,gBAAgB,QAAQ,kBAAkB;AAC1F,OAAO,WAAW,IAAI,0BAA0B,QAAQ,uBAAuB;AAC/E,SAAS,yBAAyB,EAAE,kBAAkB,QAAQ,aAAa;AAC3E,SAAS,gBAAgB,QAAgF,UAAU;AACnH,SAAS,QAAQ,EAAE,YAAY,QAA2B,UAAU;AACpE,SAAS,UAAU,EAAE,qBAAqB,QAAQ,kBAAkB;AACpE,SAAS,kBAAkB,QAAQ,YAAY;AAC/C,SACE,SAAS,EACT,eAAe,EACf,gBAAgB,EAEhB,aAAa,EACb,cAAc,EAEd,kBAAkB,QACb,SAAS;AAgDhB;AACA,OAAO,SAAS,eAAe,CAAC,KAA2B,EAAE;EAC3D,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC;EAC1B,MAAM,CAAC,GAAG,MAAM,kBAAkB,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;EACxD,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,YAAY,CAAgB,CAAC,CAAC;EACtD,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,YAAY,CAAgB,CAAC,CAAC;EAC5D,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC;EACnD,MAAM,EAAE,GAAG,cAAc,CAAC,CAAC;EAC3B,MAAM,KAAK,GAAG,IAAI,eAAe,CAAC,CAAC;EACnC,IAAI,QAAQ,GAAG,KAAK;EACpB,SAAS,CAAC,MAAM;IACd,QAAQ,GAAG,IAAI;IACf,KAAK,CAAC,KAAK,CAAC,CAAC;EACf,CAAC,CAAC;EACF,IAAI,OAA2B;EAC/B,IAAI,KAAsB;EAC1B,MAAM,KAAK,GAAG,MAAM;IAClB,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IACnC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;EAC3C,CAAC;EACD,MAAM,MAAM,GAAG,CAAC,CAAS,EAAE,CAAS,KAAK;IACvC,KAAK,CAAC,WAAW,CAAC,CAAC;IACnB,IAAI,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC;MAAE,IAAI,EAAE,CAAC;MAAE,OAAO,EAAE;IAAE,CAAC,CAAC;EACzE,CAAC;EACD,MAAM,IAAI,GAAG,YAAY;IACvB,IAAI,QAAQ,IAAI,KAAK,CAAC,QAAQ,IAAI,QAAQ,CAAC,CAAC,EAAE;IAC9C,KAAK,CAAC,CAAC;IACP,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,wBAAwB,CAAC,CAAC,OAAO,EAAE;MACxD,KAAK,CAAC,WAAW,CAAC,CAAC;MACnB,MAAM,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAAC;QAC5C,GAAG,GAAG,KAAK,CAAC,qBAAqB,CAAC,CAAC;MACrC,KAAK,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,GAAG,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI;MACxF,KAAK,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,WAAW,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI;MAC3J,KAAK,CAAC,KAAK,CAAC,CAAC;MACb;IACF;IACA,WAAW,CAAC,IAAI,CAAC;IACjB,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,IAAI,CAClC,CAAC,KAAK,EAAE,OAAO,uBACZ,cAAc;MAAA,IAAC,MAAM;QAAA,OAAE,MAAM,CAAC,CAAC;MAAA;MAAA;QAAA,yBAC7B,WAAW;UAAA,IAAC,SAAS;YAAA,OAAE,OAAO,CAAC,cAAc;UAAA;UAAA;YAAA,0BAC3C,WAAW,CAAC,MAAM;cAAA,IAAC,KAAK;gBAAA,OAAE,CAAC,CAAC,CAAC,CAAC,WAAW;cAAA;cAAA,IAAE,KAAK;gBAAA,OAAE,OAAO,CAAC,cAAc;cAAA;YAAA,sBACxE,WAAW,CAAC,IAAI;cAAA;gBAAA;kBAAA;kBAAA;kBAAA;kBAAA;gBAAA,iCAEZ,WAAW;kBAAA,IAAC,KAAK;oBAAA,OAAE,CAAC,CAAC,CAAC,CAAC,IAAI;kBAAA;kBAAA,IAAE,KAAK;oBAAA,OAAE,IAAI,CAAC,CAAC;kBAAA;kBAAE,aAAa,EAAE,OAAO;kBAAE,GAAG,EAAE,CAAC;kBAAA,IAAE,GAAG;oBAAA,OAAE,KAAK,CAAC,OAAO;kBAAA;kBAAE,IAAI,EAAE;gBAAC;gBAAA,iCACvG,WAAW;kBAAA,IAAC,KAAK;oBAAA,OAAE,CAAC,CAAC,CAAC,CAAC,OAAO;kBAAA;kBAAA,IAAE,KAAK;oBAAA,OAAE,OAAO,CAAC,CAAC;kBAAA;kBAAE,aAAa,EAAE,UAAU;kBAAE,GAAG,EAAE,CAAC;kBAAA,IAAE,GAAG;oBAAA,OAAE,KAAK,CAAC,UAAU;kBAAA;kBAAE,IAAI,EAAE;gBAAC;gBAAA;cAAA;YAAA,sBAGvH,WAAW,CAAC,MAAM;cAAA;gBAAA,yBAChB,MAAM;kBAAA,IACL,QAAQ;oBAAA,OAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;kBAAA;kBAC/B,OAAO,EAAE,MAAM;oBACb,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;sBACd,CAAC,GAAG,OAAO,CAAC,CAAC;oBACf,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC;sBAAE,IAAI,EAAE,CAAC;sBAAE,OAAO,EAAE;oBAAE,CAAC,CAAC;kBAC5C,CAAC;kBAAA;oBAAA,OAEA,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;sBAAE,IAAI,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC;sBAAE,OAAO,EAAE,OAAO,CAAC,CAAC,IAAI;oBAAE,CAAC,CAAC;kBAAA;gBAAA;cAAA;YAAA;UAAA;QAAA;MAAA;IAAA,EAKxE,EACD;MAAE,GAAG,0BAA0B;MAAE,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW;MAAE,OAAO,EAAE,IAAI;MAAE,MAAM,EAAE,KAAK,CAAC;IAAO,CACnG,CAAC;IACD,WAAW,CAAC,KAAK,CAAC;IAClB,IAAI,MAAM,IAAI,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;EAClE,CAAC;EACD,OAAO,CAAC,MAAM,KAAK,CAAC,OAAO,GAAG,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC;EACjD,MAAM,QAAQ,GAAI,KAAoB,IAAK;IACzC,MAAM,UAA4C,GAAG;MAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;MAAE,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;MAAE,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;MAAE,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC;IAAE,CAAC;IACpI,MAAM,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC;IACvC,IAAI,SAAS,EAAE;MACb,KAAK,CAAC,cAAc,CAAC,CAAC;MACtB,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;MACxF,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACpG,CAAC,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE;MACrD,KAAK,CAAC,cAAc,CAAC,CAAC;MACtB,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;EACpD,CAAC;EACD,0BAEK,UAAU;IAAA;MAAA,YACJ,OAAO;MAAA,0CAAP,OAAO;IAAA;IACZ,OAAO;IAAA;MAAA,OACA,KAAK,CAAC,KAAK;IAAA;IAAA,IAClB,IAAI;MAAA,OAAE,KAAK,CAAC,IAAI,IAAI,IAAI;IAAA;IAAA,IACxB,QAAQ;MAAA,OAAE,KAAK,CAAC,QAAQ;IAAA;IAAA,IACxB,KAAK;MAAA,OAAE,CAAC,CAAC,CAAC,CAAC,WAAW;IAAA;IAAA;IAAA,iBAEP,EAAE;IAAA;MAAA,OACF,QAAQ,CAAC,CAAC;IAAA;IAAA,IACzB,OAAO;MAAA,OAAE,CAAC,CAAC,CAAC,CAAC,WAAW;IAAA;IACxB,WAAW,EAAG,KAAK,IAAK,KAAK,CAAC,cAAc,CAAC,CAAC;IAC9C,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC,CAAC;IAAA;MAAA;IAAA;EAAA;IAAA;MAAA;MAAA;IAAA,oCAaf,MAAM,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;IAAA,kBADjD,QAAQ;IAAA,aAPd,KAAK;IAAA,sDAAL,KAAK;IAAA,4BACN,EAAE;IAAA,kCAUH,GAAG;MAAA,IAAC,IAAI;QAAA,OAAE,KAAK,CAAC,IAAI,CAAC;UAAE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,OAAO;QAAE,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,KAAK,KAAK,GAAG,CAAC,CAAC;MAAA;MAAA,UAClF,CAAC;QAAA;QAAA,kCAEE,GAAG;UAAA,IAAC,IAAI;YAAA,OAAE,KAAK,CAAC,IAAI,CAAC;cAAE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,UAAU;YAAE,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,KAAK,KAAK,GAAG,CAAC,CAAC;UAAA;UAAA,UACtF,CAAC;YAAA;YAAA,gBAUU,MAAM,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;YAAA,uCAJX,MAAM;cACpB,OAAO,CAAC,CAAC,CAAC;cACV,UAAU,CAAC,CAAC,CAAC;YACf,CAAC;YAAA;cAAA,WALW,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;kBAAE,IAAI,EAAE,CAAC;kBAAE,OAAO,EAAE;gBAAE,CAAC,CAAC;gBAAA,OACpC,CAAC,KAAK,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,MAAM,GAAG,SAAS;cAAA;cAAA;cAAA;YAAA;cAAA;cAAA;YAAA;YAAA;YAAA;UAAA;QAOlF;QAAA;MAAA;IAGN;IAAA,sBAIF,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;MAAE,IAAI,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC;MAAE,OAAO,EAAE,OAAO,CAAC,CAAC,IAAI;IAAE,CAAC,CAAC;IAAA;MAAA,UA7BrD,CAAC,CAAC,CAAC,CAAC,WAAW;QAAA,OAK6B,CAAC,CAAC,CAAC,CAAC,WAAW;MAAA;MAAA;MAAA;IAAA;MAAA;MAAA;IAAA;IAAA;IAAA;EAAA;AA6B/E;;AAGA;;AAYA,MAAM,OAAO,GAAG,CACd,CAAC,MAAM,EAAE,MAAM,CAAC,EAChB,CAAC,QAAQ,EAAE,QAAQ,CAAC,EACpB,CAAC,SAAS,EAAE,SAAS,CAAC,EACtB,CAAC,YAAY,EAAE,MAAM,CAAC,EACtB,CAAC,aAAa,EAAE,cAAc,CAAC,EAC/B,CAAC,OAAO,EAAE,OAAO,CAAC,EAClB,CAAC,MAAM,EAAE,MAAM,CAAC,EAChB,CAAC,MAAM,EAAE,MAAM,CAAC,EAChB,CAAC,OAAO,EAAE,OAAO,CAAC,EAClB,CAAC,MAAM,EAAE,WAAW,CAAC,CACb;AACV,MAAM,WAAW,GAAG;EAClB,QAAQ,EAAE,gBAAgB;EAC1B,QAAQ,EAAE,mBAAmB;EAC7B,OAAO,EAAE,oBAAoB;EAC7B,QAAQ,EAAE,qBAAqB;EAC/B,SAAS,EAAE,YAAY;EACvB,WAAW,EAAE,cAAc;EAC3B,UAAU,EAAE,aAAa;EACzB,SAAS,EAAE,YAAY;EACvB,SAAS,EAAE,eAAe;EAC1B,SAAS,EAAE,UAAU;EACrB,WAAW,EAAE,YAAY;EACzB,WAAW,EAAE,YAAY;EACzB,YAAY,EAAE,aAAa;EAC3B,YAAY,EAAE,WAAW;EACzB,WAAW,EAAE;AACf,CAAU;AAEV,MAAM,eAAe,GAAI,OAAe,IAA+C,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC;AAClH,MAAM,SAAyD,GAAG;EAAE,IAAI,EAAE,OAAO;EAAE,MAAM,EAAE,OAAO;EAAE,IAAI,EAAE;AAAQ,CAAC;AACnH,MAAM,cAAc,GAAG,IAAI,GAAG,CAAS,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;;AAEpF;AACA,OAAO,SAAS,UAAU,CAAC,KAAsB,EAAE;EACjD,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC;EAC1B,MAAM,CAAC,GAAG,MAAM,kBAAkB,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;EACxD,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,YAAY,CAAiB,KAAK,CAAC,IAAI,IAAI,WAAW,CAAC;EAC/E,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,KAAK,CAAC,MAAM,CAAC;EAC3C,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC;EAC7C,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,YAAY,CAAS,CAAC;EACtD,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,YAAY,CAAwC,CAAC;EACjF,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,YAAY,CAAc,CAAC;EACnD,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC;EACzD,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,YAAY,CAAC,EAAE,CAAC;EACxD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC;EAC7C,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC;EACnE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC;EAC/C,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC;EAC/D,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC;EACrD,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,YAAY,CAAmB,OAAO,CAAC;EACvE;EACA,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,YAAY,CAAY,MAAM,CAAC;EACzD,IAAI,IAA6B;EACjC,YAAY,CAAC,MAAM;IACjB,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC;IACrB,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC;IACpB,IAAI,CAAC,MAAM,EAAE;IACb,IAAI,IAAI,KAAK,MAAM,EAAE;MACnB,MAAM,CAAC,YAAY,CAAC,aAAa,EAAE,EAAE,CAAC;MACtC,SAAS,CAAC,MAAM,MAAM,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;MACtD;IACF;IACA;IACA,MAAM,MAAM,GACV,IAAI,KAAK,KAAK,GACV,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GACtB,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE,gBAAgB,CAAc,yBAAyB,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,CAC5H,OAAO,IAAK,OAAO,CAAC,aACvB,CAAC;IACP,MAAM,MAAM,GAAG,IAAI;IACnB,KAAK,MAAM,OAAO,IAAI,MAAM,EAAE,OAAO,EAAE,YAAY,CAAC,aAAa,EAAE,EAAE,CAAC;IACtE,MAAM,EAAE,YAAY,CAAC,WAAW,EAAE,EAAE,CAAC;IACrC,SAAS,CAAC,MAAM;MACd,KAAK,MAAM,OAAO,IAAI,MAAM,EAAE,OAAO,EAAE,eAAe,CAAC,aAAa,CAAC;MACrE,MAAM,EAAE,eAAe,CAAC,WAAW,CAAC;IACtC,CAAC,CAAC;EACJ,CAAC,CAAC;EACF,IAAI,QAAQ,GAAG,KAAK;EACpB,SAAS,CAAC,MAAM;IACd,QAAQ,GAAG,IAAI;IACf,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC;IACvB,IAAI,IAAI,KAAK,SAAS,EAAE,gBAAgB,CAAC,IAAI,CAAC;EAChD,CAAC,CAAC;EACF;EACA;EACA,MAAM,gBAAgB,GAAI,IAAY,IAAK;IACzC,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC;IACzB,MAAM,MAAM,GAAG,CAAC,CAAC,CAAC;IAClB,MAAM,YAAY,GAAI,KAAwB,IAAK;MACjD,KAAK,CAAC,cAAc,CAAC,CAAC;MACtB,KAAK,CAAC,WAAW,GAAG,EAAE;IACxB,CAAC;IACD,MAAM,CAAC,gBAAgB,CAAC,cAAc,EAAE,YAAY,CAAC;IACrD,MAAM,IAAI,GAAG,MACX,KAAK,UAAU,CACZ,IAAI,CACH,CAAC,KAAK,EAAE,OAAO,KAAK;MAClB,OAAO,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC;MACnC,yBACG,cAAc;QAAC,MAAM,EAAE,QAAQ;QAAA;UAAA,yBAC7B,WAAW;YAAC,MAAM,EAAE,KAAK;YAAE,SAAS,EAAE,MAAM,CAAC,CAAC;YAAA;cAAA,0BAC5C,WAAW,CAAC,MAAM;gBAAA,IAAC,KAAK;kBAAA,OAAE,MAAM,CAAC,cAAc;gBAAA;cAAA,sBAC/C,WAAW,CAAC,IAAI;gBAAA;kBAAA;oBAAA;oBAAA;oBAAA;kBAAA,uBAEZ,MAAM,CAAC,cAAc;kBAAA,+BAC6B,IAAI;kBAAA;gBAAA;cAAA,sBAG1D,WAAW,CAAC,MAAM;gBAAA;kBAAA,yBAChB,MAAM;oBAAC,OAAO;oBAAS,OAAO,EAAE,MAAM,KAAK,CAAC,SAAS,CAAC;oBAAA;sBAAA,OACpD,MAAM,CAAC,eAAe;oBAAA;kBAAA;gBAAA;cAAA;YAAA;UAAA;QAAA;MAAA;IAMnC,CAAC,EACD;MAAE,GAAG,0BAA0B;MAAE,SAAS,EAAE,MAAM,CAAC;IAAe,CACpE,CAAC,CACA,IAAI,CAAE,MAAM,IAAK;MAChB,IAAI,MAAM,KAAK,SAAS,EAAE,MAAM,CAAC,mBAAmB,CAAC,cAAc,EAAE,YAAY,CAAC;MAClF;MACA;MAAA,KACK,cAAc,CAAC,IAAI,CAAC;IAC3B,CAAC,CAAC;IACN,IAAI,CAAC,CAAC;EACR,CAAC;EACD,IAAI,QAAQ,GAAG,KAAK;EACpB,IAAI,YAAyG;EAC7G,IAAI,aAAuC;EAC3C,IAAI,WAA0C;EAC9C,MAAM,aAAa,GAAG,IAAI,GAAG,CAAoB,CAAC;EAClD,IAAI,KAAK,GAAG,CAAC;EACb,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,YAAY,CAAC;IAAE,IAAI,EAAE,KAAK;IAAE,GAAG,EAAE;EAAM,CAAC,CAAC;EACjF,IAAI,IAAqB;EACzB,IAAI,KAAsB;EAC1B,IAAI,MAAwC;EAC5C;EACA,MAAM,iBAAiB,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,KAAK,SAAS,IAAI,IAAI,CAAC,CAAC,KAAK,OAAO;EAC9H,MAAM,SAAS,GAAG,eAAe,CAAC;IAChC,MAAM,EAAE;MACN,KAAK,EAAG,OAAO,IAAK,KAAK,CAAC,SAAS,CAAE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC;MAC1D,OAAO,EAAE,MAAM,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;IACxE,CAAC;IACD,IAAI,WAAW,GAAG;MAChB,OAAO,KAAK,CAAC,SAAS,EAAE,WAAW;IACrC,CAAC;IACD,MAAM,EAAE,yBAAyB,CAAC,MAAM,MAAM,EAAE,IAAI,CAAC;IACrD,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,SAAS,IAAI,CAAC,iBAAiB,CAAC;EACzD,CAAC,CAAC;EACF;EACA;EACA,MAAM,cAAc,GAAG,UAAU,CAAC,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,iBAAiB,CAAC,CAAC,EAAE,CAAC;EAC7F,YAAY,CAAC,EAAE,CAAC,cAAc,EAAE,MAAM,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE;IAAE,KAAK,EAAE;EAAK,CAAC,CAAC,CAAC;EACxE,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,iBAAiB,CAAC,SAAS,CAAC;EAChF,MAAM,WAAW,GAAG,MAAM,CAAC,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,KAAK,SAAS;EACjF,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,KAAK,CAAC,QAAQ,IAAI,WAAW,CAAC,CAAC;EACvD,MAAM,WAAW,GAAG,MAAM;IACxB,MAAM,KAAK,GACT,IAAI,CAAC,CAAC,KAAK,OAAO,GACd;MAAE,UAAU,EAAE,KAAK;MAAE,gBAAgB,EAAE;IAAM,CAAC,GAC9C,qBAAqB,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,KAAK,CAAC,YAAY,IAAI,EAAE,CAAC;IAC1F,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,gBAAgB;IAC7D,mBAAmB,CAAC,KAAK,CAAC,gBAAgB,CAAC;IAC3C,QAAQ,CAAC,UAAU,CAAC;IACpB,KAAK,CAAC,YAAY,GAAG,UAAU,CAAC;EAClC,CAAC;EACD,MAAM,YAAY,GAAG,MAAM;IACzB,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC;IACrB,IAAI,CAAC,MAAM,EAAE;IACb,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAc,gBAAgB,CAAC;IAC1D,MAAM,KAAK,GAAG,IAAI,EAAE,aAAa,CAAC,OAAO,CAAC;IAC1C,IAAI,CAAC,MAAM,CAAC,WAAW,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,KAAK,WAAW,EAAE;MACpE,aAAa,GAAG,CAAC;MACjB,QAAQ,GAAG,KAAK;MAChB,OAAO,CAAC,SAAS,CAAC;MAClB,UAAU,CAAC,CAAC;MACZ;IACF;IACA;IACA,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;IACrB,MAAM,MAAM,GAAG,IAAI,CAAC,qBAAqB,CAAC,CAAC;IAC3C,eAAe,CAAC;MACd,IAAI,EAAE,GAAG,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI;MAC5D,GAAG,EAAE,GAAG,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,MAAM,GAAG,MAAM,CAAC,GAAG,IAAI,MAAM,CAAC,UAAU,CAAC,wBAAwB,CAAC,CAAC,OAAO,GAAG,EAAE,GAAG,CAAC,CAAC;IAC3H,CAAC,CAAC;EACJ,CAAC;EACD,MAAM,gBAAgB,GAAG,MAAM;IAC7B,IAAI,CAAC,KAAK,EACR,KAAK,GAAG,qBAAqB,CAAC,MAAM;MAClC,KAAK,GAAG,CAAC;MACT,YAAY,CAAC,CAAC;IAChB,CAAC,CAAC;EACN,CAAC;EACD,MAAM,WAAW,GAAG,MAAM,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;EACtF,MAAM,cAAc,GAAI,MAAkB,IAAK;IAC7C,gBAAgB,CAAC,CAAC;IAClB,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,EAAE,OAAO,CAAc,gBAAgB,CAAC;IAC3D,OAAO,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC;EACxF,CAAC;EACD,MAAM,MAAM,GAAI,MAAkB,IAAK,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC;EAChE,MAAM,SAAS,GAAI,MAAkB,IAAK;IACxC,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,EAAE,OAAO,CAAc,gBAAgB,CAAC;IAC3D,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa;IACtC,MAAM,WAAW,GAAG,OAAO,YAAY,WAAW,GAAG,OAAO,CAAC,OAAO,CAAc,eAAe,CAAC,GAAG,IAAI;IACzG,IAAI,MAAM,IAAI,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC;IACvF;IACA;IACA,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,OAAO,YAAY,WAAW,IAAI,WAAW,EAAE;MACnE,MAAM,OAAO,GAAG,MAAM;QACpB,IAAI,QAAQ,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE;QAC1C,MAAM,MAAM,GACV,OAAO,CAAC,WAAW,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,GAChD,OAAO,GACP,WAAW,CAAC,aAAa,CAAc,mCAAmC,CAAC;QACjF,MAAM,EAAE,KAAK,CAAC;UAAE,aAAa,EAAE;QAAK,CAAC,CAAC;MACxC,CAAC;MACD,OAAO,CAAC,CAAC;MACT,cAAc,CAAC,OAAO,CAAC;IACzB;EACF,CAAC;EACD,MAAM,QAA6C,GAAG;IACpD,SAAS,EAAE,aAAa;IACxB,WAAW,EAAE,eAAe;IAC5B,WAAW,EAAE,eAAe;IAC5B,YAAY,EAAE;EAChB,CAAC;EACD,MAAM,iBAAiB,GAAG;IACxB,QAAQ,EAAE,WAAW;IACrB,QAAQ,EAAE,WAAW;IACrB,SAAS,EAAE,QAAQ;IACnB,WAAW,EAAE,UAAU;IACvB,SAAS,EAAE,YAAY;IACvB,OAAO,EAAE,gBAAgB;IACzB,QAAQ,EAAE,iBAAiB;IAC3B,WAAW,EAAE,cAAc;IAC3B,YAAY,EAAE,eAAe;IAC7B,SAAS,EAAE;EACb,CAAU;EACV,MAAM,OAAO,GAAG,MAAM;IACpB,gBAAgB,CAAC,CAAC;IAClB,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;EACpD,CAAC;EACD,MAAM,UAAU,GAAG,MAAM;IACvB,gBAAgB,CAAC,CAAC;IAClB,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,EAAE,aAAa,CAAc,qCAAqC,MAAM,IAAI,CAAC;IAC7H,OAAO,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;EACtE,CAAC;EACD,MAAM,WAAW,GAAG,CAAC,IAAe,GAAG,KAAK,CAAC,CAAC,KAC5C,IAAI,KAAK,KAAK,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,KAAK,QAAQ,GAAG,UAAU,CAAC,CAAC,GAAG,GAAG,OAAO,CAAC,CAAC,MAAM,UAAU,CAAC,CAAC,EAAE;EAClG,MAAM,UAAU,GAAG,CACjB,MAAgC,EAChC,MAA2E,EAC3E,IAAe,GAAG,MAAM,MAEvB;IACC,IAAI,KAAK,GAAG;MACV;MACA,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,IAAI,MAAM,IAAI,iBAAiB,IAAI,EAAE,IAAI,KAAK,MAAM,IAAI,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;MAC7G,OAAO,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,MAAM,CAAmC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAC/F,CAAC;IACD,IAAI,EAAE,SAAS,WAAW,CAAC,MAAM,CAAC,EAAE;IACpC,IAAI,QAAQ,GAAG;MACb,OAAO,cAAc,CAAC,MAAM,CAAC;IAC/B,CAAC;IACD,SAAS,EAAE,IAAI;IACf,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,qBAAI,GAAG;MAAA,IAAC,IAAI;QAAA,OAAE,QAAQ,CAAC,MAAM,CAAC;MAAA;IAAA,KAAQ,MAAM,KAAK,UAAU,qBAAI,GAAG;MAAC,IAAI;IAAA,KAAc,SAAS;IACxH,OAAO,EAAE,MAAM,KAAK,WAAW,IAAI,MAAM,KAAK,WAAW,IAAI,MAAM,KAAK,aAAa,GAAG,QAAQ,GAAG,SAAS;IAC5G,aAAa,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC;IAC9B,MAAM,EAAE,MAAM,SAAS,CAAC,MAAM,CAAC;IAC/B,GAAG;EACL,CAAC,CAA0B;EAC7B,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC;EACjD,MAAM,SAAS,GAAG,SAAS,CAAC,YAAY,CAAC;IACvC,KAAK,EAAE,CAAC;MAAE,IAAI;MAAE,IAAI;MAAE;IAA8E,CAAC,KAAK,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM;EACxI,CAAC,CAAC;EACF,MAAM,IAAI,GAAG,MAAO,MAA4B,IAAK;IACnD,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,EAAE,OAAO,CAAc,gBAAgB,CAAC;IAC3D,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,IAAI,OAAO,CAAC,CAAC,EAAE;IACnC,UAAU,CAAC,IAAI,CAAC;IAChB,SAAS,CAAC;MAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;IAAa,CAAC,CAAC;IACxC,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC;MAAE,IAAI,EAAE,MAAM,CAAC,IAAI;MAAE,IAAI;MAAE;IAAO,CAAC,CAAC;IACzE,IAAI,QAAQ,EAAE;IACd,UAAU,CAAC,KAAK,CAAC;IACjB,SAAS,CAAC;MAAE,OAAO,EAAE,OAAO,GAAI,MAAM,KAAK,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc,GAAI,CAAC,CAAC,CAAC,CAAC;IAAW,CAAC,CAAC;EAChH,CAAC;EACD,MAAM,SAAS,GAAG,MAAwB,CACxC;IACE,IAAI,KAAK,GAAG;MACV,OAAO,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS;IACtE,CAAC;IACD,IAAI,EAAE,YAAY;IAClB,IAAI,QAAQ,GAAG;MACb,OAAO,OAAO,CAAC,CAAC;IAClB,CAAC;IACD,SAAS,EAAE,IAAI;IACf,MAAM,EAAE,MAAM;MACZ,KAAK,IAAI,CAAC,OAAO,CAAC;IACpB;EACF,CAAC,EACD;IACE,IAAI,KAAK,GAAG;MACV,OAAO,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY;IAC7E,CAAC;IACD,IAAI,EAAE,gBAAgB;IACtB,IAAI,QAAQ,GAAG;MACb,OAAO,OAAO,CAAC,CAAC;IAClB,CAAC;IACD,SAAS,EAAE,IAAI;IACf,MAAM,EAAE,MAAM;MACZ,KAAK,IAAI,CAAC,UAAU,CAAC;IACvB;EACF,CAAC,CACF;EACD;EACA,MAAM,KAAK,GAAI,IAAe,IAAqB;IACjD,IAAI,KAAK,CAAC,QAAQ,EAAE,OAAO,SAAS,CAAC,CAAC;IACtC,MAAM,KAAK,GAAG,MAAM;MAClB,gBAAgB,CAAC,CAAC;MAClB,OAAO,IAAI,CAAC,CAAC,EAAE,aAAa,EAAE,KAAK,CAAC,SAAS,IAAI,MAAM;IACzD,CAAC;IACD,MAAM,GAAmB,GAAG,CAC1B;MACE,IAAI,YAAY,GAAG;QACjB,OAAO,IAAI,KAAK,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS;MAChD,CAAC;MACD,KAAK,EAAG,CAAC,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,CAAC,CAAW,GAAG,CAAE,MAAM,IAC7F,UAAU,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,CACpC;IACF,CAAC,CACF;IACD,MAAM,MAAsB,GAAG,CAC7B;MACE,IAAI,YAAY,GAAG;QACjB,OAAO,IAAI,KAAK,MAAM,GAAG,UAAU,CAAC,CAAC,GAAG,SAAS;MACnD,CAAC;MACD,KAAK,EAAG,CAAC,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,cAAc,CAAC,CAAW,GAAG,CAAE,MAAM,IAAK,UAAU,CAAC,MAAM,CAAC;IAC7G,CAAC,EACD;MACE,YAAY,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS;MAC3B,MAAM,EAAE,KAAK;MACb,KAAK,EAAG,CAAC,WAAW,EAAE,aAAa,EAAE,YAAY,CAAC,CAAW,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,KAC7E,UAAU,CAAC,MAAM,EAAE;QACjB,MAAM,EAAE,OAAO;QACf,KAAK,EAAE,sBAAsB;QAC7B,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QACtB,OAAO,EAAE,MAAM,KAAK,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,KAAK;MAC9D,CAAC,CACH;IACF,CAAC,EACD;MAAE,KAAK,EAAE,CAAC,UAAU,CAAC,WAAW,EAAE,SAAS,EAAE,IAAI,CAAC;IAAE,CAAC,CACtD;IACD,OAAO,CACL;MACE,IAAI,YAAY,GAAG;QACjB,OAAO,WAAW,CAAC,IAAI,CAAC;MAC1B,CAAC;MACD,KAAK,EAAE;IACT,CAAC,EACD,IAAI,IAAI,KAAK,QAAQ,GAAG,EAAE,GAAG,GAAG,CAAC,EACjC,IAAI,IAAI,KAAK,KAAK,GAAG,EAAE,GAAG,MAAM,CAAC,EACjC;MACE,YAAY,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK;MACvB,KAAK,EAAE,CACL,UAAU,CAAC,cAAc,EAAE;QACzB,MAAM,EAAE,UAAU;QAClB,KAAK,EAAE,uBAAuB;QAC9B,OAAO,EAAE,MAAM;UACb,gBAAgB,CAAC,CAAC;UAClB,OAAO,IAAI,CAAC,CAAC,EAAE,OAAO,CAAc,gBAAgB,CAAC,EAAE,OAAO,CAAC,MAAM,KAAK,MAAM;QAClF;MACF,CAAC,CAAC,EACF;QACE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,YAAY;QACvB,IAAI,EAAE,gBAAgB;QACtB,MAAM,EAAE,MAAM;UACZ,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,EAAE,OAAO,CAAc,gBAAgB,CAAC;UAC3D,IAAI,MAAM,IAAI,IAAI,EAAE,eAAe,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC;QACxD;MACF,CAAC,EACD,GAAG,SAAS,CAAC,CAAC,EACd,UAAU,CAAC,aAAa,CAAC,EACzB,IAAI,WAAW,CAAC,CAAC,GAAG,CAAC;QAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,oBAAoB;QAAE,QAAQ,EAAE;MAAc,CAAC,CAAC,GAAG,EAAE,CAAC;IAE5F,CAAC,CACF;EACH,CAAC;EACD,MAAM,iBAAiB,GAAI,KAAiB,IAAK,KAAK,CAAC,cAAc,CAAC,CAAC;EACvE,MAAM,UAAU,GAAI,IAAa,IAAK;IACpC,QAAQ,GAAG,IAAI;EACjB,CAAC;EACD;EACA;EACA,IAAI,aAAa,GAAG,KAAK;EACzB,MAAM,eAAe,GAAI,IAAa,IAAK;IACzC,QAAQ,GAAG,IAAI;IACf,aAAa,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC;EACtC,CAAC;EACD,IAAI,OAAoC;EACxC,MAAM,eAAe,GAAI,KAAmB,IAAK;IAC/C,OAAO,EAAE,KAAK,CAAC,CAAC;IAChB,IAAI,CAAC,aAAa,IAAK,KAAK,CAAC,MAAM,YAAY,OAAO,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,qBAAqB,CAAE,EAAE;IACxG,KAAK,CAAC,eAAe,CAAC,CAAC;IACvB,MAAM,OAAO,GAAG,IAAI,eAAe,CAAC,CAAC;IACrC,OAAO,GAAG,OAAO;IACjB,MAAM,KAAK,GAAI,OAAc,IAAK;MAChC,OAAO,CAAC,cAAc,CAAC,CAAC;MACxB,OAAO,CAAC,eAAe,CAAC,CAAC;MACzB,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,IAAI,OAAO,CAAC,IAAI,KAAK,aAAa,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IACjF,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,CAAC,EACjE,QAAQ,CAAC,gBAAgB,CAAC,IAAI,EAAE,KAAK,EAAE;MAAE,OAAO,EAAE,IAAI;MAAE,MAAM,EAAE,OAAO,CAAC;IAAO,CAAC,CAAC;IACnF;IACA;IACA,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,CAAC;IACjC,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,MAAM,UAAU,CAAC,GAAG,CAAC,EAAE;MAAE,OAAO,EAAE,IAAI;MAAE,IAAI,EAAE,IAAI;MAAE,MAAM,EAAE,OAAO,CAAC;IAAO,CAAC,CAAC;IACpH,QAAQ,CAAC,gBAAgB,CAAC,eAAe,EAAE,GAAG,EAAE;MAAE,OAAO,EAAE,IAAI;MAAE,IAAI,EAAE,IAAI;MAAE,MAAM,EAAE,OAAO,CAAC;IAAO,CAAC,CAAC;IACtG,QAAQ,CAAC,gBAAgB,CACvB,SAAS,EACR,GAAG,IAAK;MACP,IAAI,CAAC,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;IACnE,CAAC,EACD;MAAE,OAAO,EAAE,IAAI;MAAE,MAAM,EAAE,OAAO,CAAC;IAAO,CAC1C,CAAC;EACH,CAAC;EACD,MAAM,SAAS,GAAG,MAAM;IACtB,QAAQ,GAAG,KAAK;IAChB,aAAa,GAAG,KAAK;IACrB,QAAQ,CAAC,MAAM,CAAC;IAChB,IAAI,GAAG,SAAS;IAChB,gBAAgB,CAAC,CAAC;IAClB,cAAc,CAAC,MAAM;MACnB,IAAI,QAAQ,EAAE;MACd,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa;MACtC,IAAI,OAAO,YAAY,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC,yCAAyC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;MACjH,UAAU,CAAC,CAAC;IACd,CAAC,CAAC;EACJ,CAAC;EACD,MAAM,QAAQ,GAAI,IAAqB,IACrC,KAAK,CAAC,QAAQ,GACV,SAAS,GACR,KAAiB;IAAA;MAAA;MAAA;MAAA;IAAA,uBAEqB,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;IAAA,mCACrD,MAAM;MAAC,OAAO;MAAS,OAAO,EAAE,KAAK;MAAA;QAAA,OACnC,CAAC,CAAC,CAAC,CAAC,IAAI;MAAA;IAAA;IAAA,+CAFE,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;IAAA;EAAA,IAKnC;EACP,MAAM,SAAS,GAAG,MAAO,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,SAAU;EACxE,MAAM,YAAY,GAAG,MAAM,WAAW,CAAC,CAAC,IAAI,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,WAAW;EACjF;EACA;EACA;EACA,MAAM,IAAI,GAAI,OAA0B,sBACrC,IAAI;IAAA,IAAC,IAAI;MAAA,OAAE,KAAK,CAAC,QAAQ,GAAG,MAAM,GAAG,OAAO;IAAA;IAAE,KAAK;IAAA,UAChD,OAAO,sBACN,QAAQ;MAAA,IACP,KAAK;QAAA,OAAE,KAAK,CAAC,MAAM,CAAC;MAAA;MACpB,KAAK;MAAA,IACL,QAAQ;QAAA,OAAE,QAAQ,CAAC,MAAM,MAAM,CAAC;MAAA;MAChC,SAAS;MAAA,IACT,QAAQ;QAAA,OAAE,OAAO,EAAE,QAAQ,IAAI,cAAc;MAAA;MAC7C,KAAK;MAAA,IACL,KAAK;QAAA,OAAE,SAAS,CAAC,CAAC;MAAA;MAAA,IAClB,QAAQ;QAAA,OAAE,YAAY,CAAC,CAAC;MAAA;MACxB,YAAY,EAAE,eAAe;MAC7B,OAAO,EAAE,SAAS;MAAA;QAAA,yBAEjB,QAAQ,CAAC,OAAO;UAAA,KACT,OAAO,IAAK;YAChB,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC;YAC1B,SAAS,CAAC,MAAM,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;UAChD,CAAC;UAAA;YAAA,OACM,mCAAmC,OAAO,EAAE,KAAK,IAAI,EAAE,EAAE;UAAA;UAChE,OAAO;UAAA,IACP,IAAI;YAAA,OAAE,OAAO,EAAE,IAAI,IAAI,IAAI;UAAA;UAAA,IAC3B,QAAQ;YAAA,OAAE,CAAC,OAAO,EAAE,IAAI;UAAA;UAAA,IACxB,KAAK;YAAA,OAAE,OAAO,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;UAAA;UAAA,gBACvB,IAAI;UAClB,WAAW,EAAE,iBAAiB;UAAA;YAAA,gDAG7B,OAAO,EAAE,IAAI,qBACb,IAAI;cAAA,IAAC,IAAI;gBAAA,OAAE,OAAO,EAAE,IAAI;cAAA;cAAA;gBAAA;cAAA;YAAA;UAAA;QAAA;MAAA;IAAA;EAK9B,EAEJ;EACD;EACA,MAAM,QAAQ,GAAG,wBACd,IAAI;IAAA,IAAC,IAAI;MAAA,OAAE,KAAK,CAAC,QAAQ,GAAG,MAAM,GAAG,OAAO;IAAA;IAAE,KAAK;IAAA,UAChD,OAAO,sBACN,QAAQ;MAAA,IACP,KAAK;QAAA,OAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;MAAA;MACrB,KAAK;MAAA,IACL,QAAQ;QAAA,OAAE,QAAQ,CAAC,KAAK,CAAC;MAAA;MACzB,SAAS;MACT,QAAQ;MACR,KAAK;MAAA,IACL,KAAK;QAAA,OAAE,SAAS,CAAC,CAAC;MAAA;MAAA,IAClB,QAAQ;QAAA,OAAE,YAAY,CAAC,CAAC;MAAA;MACxB,YAAY,EAAE,eAAe;MAC7B,OAAO,EAAE,SAAS;MAClB,MAAM,EAAG,IAAI,IAAK;QAChB,YAAY,GAAG,IAAI;MACrB,CAAC;MACD,SAAS,EAAG,KAAK,IAAK;QACpB,aAAa,GAAG,KAAK;MACvB,CAAC;MAAA;QAAA,yBAGA,IAAI;UAAA,IAAC,IAAI;YAAA,OAAE,qBAAK,CAAC,QAAQ,IAAI,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK,WAAW,QAAI,CAAC,WAAW,CAAC,CAAC;UAAA;UAAA;YAAA,yBAC7E,QAAQ,CAAC,OAAO;cAAA,KACT,OAAO,IAAK;gBAChB,WAAW,GAAG,OAAO;cACvB,CAAC;cAAA;cAED,OAAO;cACP,IAAI;cAAA,IACJ,KAAK;gBAAA,OAAE,CAAC,CAAC,CAAC,CAAC,SAAS;cAAA;cACpB,WAAW,EAAE,iBAAiB;cAAA;gBAAA,gDAG7B,CAAC,CAAC,CAAC,CAAC,SAAS;cAAA;YAAA;UAAA;QAAA;MAAA;IAAA;EAIrB,EAEJ;EACD,MAAM,SAAS,GAAI,OAA8B,IAAK;IACpD,IAAI,CAAC,MAAM,IAAI,OAAO,CAAC,CAAC,EAAE;IAC1B,IAAI,IAAI,CAAC,CAAC,EAAE,WAAW,IAAI,eAAe,CAAC,OAAO,CAAC,IAAI,gBAAgB,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE;IAC/F,QAAQ,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC;EAChC,CAAC;EACD,MAAM,UAAU,GAAG,MAAM;IACvB,IAAI,QAAQ,EAAE;IACd;IACA;IACA,IACE,QAAQ,IACR,CAAC,GAAG,aAAa,EAAE,WAAW,CAAC,CAAC,IAAI,CAAE,OAAO,IAAK,OAAO,EAAE,WAAW,IAAI,OAAO,CAAC,YAAY,CAAC,eAAe,CAAC,KAAK,MAAM,CAAC,EAE3H;IACF,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa;IACtC,cAAc,CAAC,OAAO,YAAY,WAAW,IAAI,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC;IAC5F,MAAM,MAAM,GAAG,OAAO,YAAY,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;IAChE,SAAS,CAAC,MAAM,CAAC;IACjB,IAAI,CAAC,MAAM,IAAI,OAAO,KAAK,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,KAClE,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,SAAS,CAAC;EACnD,CAAC;EACD,MAAM,UAAU,GAAI,OAA2B,sBAC5C,QAAQ;IACP,KAAK;IAAA,IACL,KAAK;MAAA,OAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;IAAA;IAAA,IACnB,QAAQ;MAAA,OAAE,OAAO,CAAC,CAAC,IAAK,OAAO,KAAK,SAAS,IAAI,CAAC,CAAC,IAAI,CAAC,CAAE;IAAA;IAC1D,YAAY,EAAE,UAAU;IACxB,OAAO,EAAE,SAAS;IAAA,IAClB,KAAK;MAAA,OACH,OAAO,KAAK,SAAS,GACjB,CACE;QACE,KAAK,EAAG,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,CAAC,CAAW,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,MAAM;UAC3E,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;UAChB,IAAI,EAAE,WAAW,KAAK,GAAG,CAAC,EAAE;UAC5B,MAAM,EAAE,MAAM,SAAS,CAAC,IAAI;QAC9B,CAAC,CAAC;MACJ,CAAC,CACF,GACD,CACE;QAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU;QAAE,IAAI,EAAE,YAAY;QAAE,MAAM,EAAE,MAAM,SAAS,CAAC,MAAM;MAAE,CAAC,EAC9E;QAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS;QAAE,IAAI,EAAE,mBAAmB;QAAE,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QAAE,MAAM,EAAE,MAAM,SAAS,CAAC,WAAW;MAAE,CAAC,EAC7G;QAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM;QAAE,IAAI,EAAE,qBAAqB;QAAE,QAAQ,oBAAG,GAAG;UAAC,IAAI;QAAA,EAAiB;QAAE,MAAM,EAAE,MAAM,SAAS,CAAC,QAAQ;MAAE,CAAC,CAC5H;IAAA;IAAA;MAAA,yBAGN,QAAQ,CAAC,OAAO;QAAA;QAAsB,OAAO;QAAS,IAAI;QAAM,QAAQ;QAAA,IAAC,KAAK;UAAA,OAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;QAAA;QAAE,WAAW,EAAE,iBAAiB;QAAA;UAAA;UAAA,oBACjH,SAAS,OAAO,EAAE;UAAA;QAAA;MAAA;IAAA;EAAA,EAGjC;EACD,MAAM,UAAU,GAAI,IAAoB,IAAK;IAC3C;IACA,MAAM,kBAAkB,GACtB,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,IAC1D,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC;IAC1E,QAAQ,GAAG,KAAK;IAChB,OAAO,CAAC,SAAS,CAAC;IAClB,OAAO,CAAC,IAAI,CAAC;IACb,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC;IAC1B,IAAI,kBAAkB,EAAE,cAAc,CAAC,MAAM,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;EACpE,CAAC;EACD,OAAO,CAAC,MAAM;IACZ,WAAW,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAC/B,MAAM,SAAS,GAAG,MAAM,CAAC,UAAU,CAAC,wBAAwB,CAAC;IAC7D,MAAM,YAAY,GAAG,MAAM,YAAY,CAAC,SAAS,CAAC,OAAO,CAAC;IAC1D,YAAY,CAAC,CAAC;IACd,SAAS,CAAC,gBAAgB,CAAC,QAAQ,EAAE,YAAY,CAAC;IAClD,SAAS,CAAC,MAAM,SAAS,CAAC,mBAAmB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IACtE;IACA,MAAM,aAAa,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI;IACvC,MAAM,GAAG,gBAAgB,CAAC;MACxB,MAAM,EAAE,KAAK;MACb,GAAG,EAAE,KAAK,CAAC,YAAY;MACvB,IAAI,EAAE,IAAI,CAAC,CAAC;MACZ,KAAK,EAAE,KAAK,CAAC,KAAK;MAClB,QAAQ,EAAE,KAAK,CAAC,QAAQ;MACxB,WAAW,EAAE,KAAK,CAAC,WAAW;MAC9B,YAAY,EAAE,KAAK,CAAC,YAAY;MAChC,UAAU,EAAE,CACV,aAAa,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,GAAG,EAAE,EAC1D,YAAY,CAAC,EAAE,CAAC;QACd,IAAI,IAAI,GAAG;UACT,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI;QACjB,CAAC;QACD,MAAM,EAAG,MAAM,IAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM;MACvC,CAAC,CAAC,EACF,UAAU,CAAC,cAAc,CAAC,EAAE,CAAE,MAAM,IAAK;QACvC,gBAAgB,CAAC,CAAC;QAClB,IAAI,MAAM,CAAC,UAAU,EAAE,cAAc,CAAC,MAAM,mBAAmB,CAAE,QAAQ,IAAK,QAAQ,GAAG,CAAC,CAAC,CAAC;MAC9F,CAAC,CAAC;MACF;MACA,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC,MAAM;QAChC,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAc,uBAAuB,CAAC;QACrE,OAAO,IAAI,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAC,QAAQ,KAAK,QAAQ,GAAG;UAAE,GAAG,EAAE,IAAI,CAAC;QAAa,CAAC,GAAG,IAAI;MACjG,CAAC,CAAC,EACF,KAAK,CAAC,UAAU,IAAI,EAAE,EACtB,KAAK,CAAC,SAAS,GAAG,kBAAkB,CAAC,CAAC,GAAG,EAAE,CAC5C;MACD,IAAI,EAAE;QACJ,GAAG,KAAK,CAAC,IAAI;QACb,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC7D,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC7D,QAAQ,EAAE,KAAK,CAAC,IAAI,EAAE,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC;QAC5C,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;UAAE,GAAG;UAAE,MAAM;UAAE;QAAK,CAAC,CAAC;QACtE,WAAW,EAAG,IAAI,IAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAChC,YAAY,EAAE,OAAO;UACnB,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,YAAY;UACtB,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,aAAa;UACxB,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,eAAe;UAC5B,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,eAAe;UAC5B,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,kBAAkB;UAClC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,aAAa;UAC3B,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,mBAAmB;UACpC,IAAI,EAAE,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS;UAC5C,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,eAAe;UAC5B,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,gBAAgB;UAC9B,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,YAAY;UACtB,SAAS,EAAE,CAAC,MAAM,EAAE,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC;YAAE,MAAM;YAAE;UAAU,CAAC,CAAC;UAC9E,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,aAAa;UACxB,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC;QAChB,CAAC,CAAC;QACF,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,aAAa,EAAE,KAAK,CAAC,aAAa,IAAI,IAAI;QAC1C,UAAU,EAAG,IAAI,IAAK;UACpB,IAAI,QAAQ,EAAE,gBAAgB,CAAC,IAAI,CAAC,CAAC,KAChC,WAAW,CAAE,QAAQ,IAAM,QAAQ,KAAK,SAAS,GAAG,IAAI,GAAG,GAAG,QAAQ,OAAO,IAAI,EAAG,CAAC;QAC5F,CAAC;QACD,OAAO,EAAG,IAAI,IAAK,SAAS,CAAC;UAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI;QAAE,CAAC;MACrD,CAAC;MACD,QAAQ,EAAG,IAAI,IAAK;QAClB,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC;QACtB,cAAc,CAAC,WAAW,CAAC;MAC7B,CAAC;MACD,eAAe,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK;QACjC,IAAI,KAAK,CAAC,eAAe,GAAG,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,EAAE,SAAS,CAAC;UAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS;UAAE,MAAM,EAAE;QAAK,CAAC,CAAC;MACzG;IACF,CAAC,CAAC;IACF,MAAM,KAAK,GAAI,KAAY,IAAK;MAC9B,IAAI,EAAE,KAAK,YAAY,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,YAAY,WAAW,CAAC,EAAE;MACpF,SAAS,CAAC,IAAI,CAAC;MACf,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC;MAC1B,YAAY,CAAC,CAAC;IAChB,CAAC;IACD,MAAM,qBAAqB,GAAI,KAAY,IAAK;MAC9C,IAAI,EAAE,KAAK,YAAY,WAAW,CAAC,EAAE;MACrC,MAAM,MAAe,GAAG,KAAK,CAAC,MAAM;MACpC,IACE,MAAM,IACN,OAAO,MAAM,KAAK,QAAQ,IAC1B,MAAM,IAAI,MAAM,IAChB,SAAS,IAAI,MAAM,IACnB,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,IAC/B,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,EAElC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC,IAAI;QAAE,OAAO,EAAE,MAAM,CAAC;MAAQ,CAAC,CAAC,CAAC;IACrF,CAAC;IACD,MAAM,WAAW,GAAG,MAAM,cAAc,CAAC,UAAU,CAAC;IACpD,IAAI,YAAuD;IAC3D,MAAM,OAAO,GAAI,KAAmB,IAAK;MACvC,IAAI,KAAK,CAAC,MAAM,YAAY,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC;MAChF;MAAA,KACK,IAAI,CAAC,QAAQ,EAAE;QAClB,YAAY,CAAC,YAAY,CAAC;QAC1B,YAAY,GAAG,UAAU,CAAC,UAAU,CAAC;MACvC;IACF,CAAC;IACD;IACA;IACA,MAAM,YAAY,GAAI,KAAY,IAAK;MACrC,IAAI,WAAW,CAAC,CAAC,IAAI,QAAQ,IAAI,EAAE,KAAK,YAAY,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,YAAY,WAAW,CAAC,EAAE;MACjH,MAAM,MAAmB,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI;MAC7C,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,YAAY,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,SAAS;MAC3F,MAAM,IAAe,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,KAAK,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,KAAK,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,GAAG,MAAM;MACrH,MAAM;QAAE,CAAC;QAAE;MAAE,CAAC,GAAG,KAAK,CAAC,MAAM;MAC7B,IAAI,MAAsB,GAAG,MAAM,IAAI,MAAM;MAC7C,IAAI,CAAC,MAAM,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE;QAC7D;QACA,MAAM,KAAK,GAAG,MAAM,CAAC,qBAAqB,CAAC,CAAC;QAC5C,MAAM,GAAG;UACP,qBAAqB,EAAE,MAAM;YAC3B,MAAM,GAAG,GAAG,MAAM,CAAC,qBAAqB,CAAC,CAAC;YAC1C,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI;YACtC,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG;YACnC,OAAO;cAAE,IAAI;cAAE,GAAG;cAAE,KAAK,EAAE,IAAI;cAAE,MAAM,EAAE;YAAI,CAAC;UAChD;QACF,CAAC;MACH;MACA,IAAI,GAAG,MAAM;MACb,QAAQ,CAAC,IAAI,CAAC;MACd,KAAK,CAAC,KAAK,CAAC;MACZ;MACA,cAAc,CAAC,MAAM;QACnB,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,CAAC,EAAE,WAAW,EAAE,YAAY,GAAG,MAAM,EAAE,MAAM,IAAI,CAAC,CAAC,CAAC;MAC5E,CAAC,CAAC;IACJ,CAAC;IACD,MAAM,SAAS,GAAG,IAAI,gBAAgB,CAAC,gBAAgB,CAAC;IACxD,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE;MAAE,SAAS,EAAE,IAAI;MAAE,OAAO,EAAE,IAAI;MAAE,aAAa,EAAE;IAAK,CAAC,CAAC;IACjF,MAAM,MAAM,GAAG,IAAI,cAAc,CAAC,gBAAgB,CAAC;IACnD,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;IACrB;IACA;IACA,MAAM,aAAa,GAAI,KAAiB,IAAK;MAC3C,IAAI,KAAK,CAAC,MAAM,YAAY,OAAO,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC;IACvG,CAAC;IACD,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,aAAa,CAAC;IACjD,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,WAAW,CAAC;IACjD,QAAQ,CAAC,gBAAgB,CAAC,aAAa,EAAE,OAAO,CAAC;IACjD,QAAQ,CAAC,gBAAgB,CAAC,aAAa,EAAE,eAAe,EAAE,IAAI,CAAC;IAC/D,IAAI,CAAC,gBAAgB,CAAC,yBAAyB,EAAE,qBAAqB,CAAC;IACvE,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,EAAE,KAAK,CAAC;IAClD,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,EAAE,WAAW,CAAC;IACvD,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,EAAE,YAAY,CAAC;IACxD,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,gBAAgB,EAAE,IAAI,CAAC;IACzD,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,gBAAgB,CAAC;IACnD,MAAM,QAAQ,GAAG,MAAM,CAAC,cAAc;IACtC,MAAM,QAAQ,GAAG,MACf,IAAI,CAAC,KAAK,CAAC,WAAW,CACpB,oBAAoB,EACpB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,WAAW,IAAI,QAAQ,EAAE,MAAM,IAAI,MAAM,CAAC,WAAW,CAAC,IAAI,QAAQ,EAAE,SAAS,IAAI,CAAC,CAAC,CAAC,IAC5G,CAAC;IACH,QAAQ,EAAE,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC9C,QAAQ,EAAE,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC9C,QAAQ,CAAC,CAAC;IACV,QAAQ,CAAC,IAAI,CAAC;IACd,WAAW,CAAC,CAAC;IACb,KAAK,CAAC,OAAO,GAAG,MAAM,EAAE;MACtB,WAAW,EAAE,MAAM,IAAI,CAAC,CAAC,KAAK,WAAW,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,WAAW;MAClE,SAAS,EAAG,OAAO,IAAK,IAAI,CAAC,OAAO,CAAC;MACrC,UAAU,EAAG,MAAM,IAAK,CAAC,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,WAAW,IAAI,gBAAgB,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC;MAChH,MAAM,EAAG,OAAO,IAAK,SAAS,CAAC;QAAE;MAAQ,CAAC;IAC5C,CAAC,CAAC;IACF,SAAS,CAAC,MAAM;MACd,YAAY,CAAC,YAAY,CAAC;MAC1B,SAAS,CAAC,UAAU,CAAC,CAAC;MACtB,MAAM,CAAC,UAAU,CAAC,CAAC;MACnB,oBAAoB,CAAC,KAAK,CAAC;MAC3B,IAAI,CAAC,mBAAmB,CAAC,WAAW,EAAE,aAAa,CAAC;MACpD,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,WAAW,CAAC;MACpD,QAAQ,CAAC,mBAAmB,CAAC,aAAa,EAAE,OAAO,CAAC;MACpD,QAAQ,CAAC,mBAAmB,CAAC,aAAa,EAAE,eAAe,EAAE,IAAI,CAAC;MAClE,OAAO,EAAE,KAAK,CAAC,CAAC;MAChB,IAAI,CAAC,mBAAmB,CAAC,yBAAyB,EAAE,qBAAqB,CAAC;MAC1E,IAAI,CAAC,mBAAmB,CAAC,oBAAoB,EAAE,KAAK,CAAC;MACrD,IAAI,CAAC,mBAAmB,CAAC,mBAAmB,EAAE,WAAW,CAAC;MAC1D,IAAI,CAAC,mBAAmB,CAAC,mBAAmB,EAAE,YAAY,CAAC;MAC3D,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,gBAAgB,EAAE,IAAI,CAAC;MAC5D,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,gBAAgB,CAAC;MACtD,QAAQ,EAAE,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,CAAC;MACjD,QAAQ,EAAE,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,CAAC;MACjD,MAAM,EAAE,OAAO,CAAC,CAAC;IACnB,CAAC,CAAC;EACJ,CAAC,CAAC;EACF,YAAY,CAAC,MAAM;IACjB,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC;EACnD,CAAC,CAAC;EACF,YAAY,CAAC,MAAM;IACjB,IAAI,KAAK,CAAC,CAAC,EAAE;MACX,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC;MACnB;MACA;MACA,OAAO,CAAC,MAAM;QACZ,QAAQ,GAAG,KAAK;QAChB,OAAO,CAAC,SAAS,CAAC;QAClB,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC;QACrB,WAAW,CAAC,CAAC;MACf,CAAC,CAAC;IACJ;EACF,CAAC,CAAC;EACF,YAAY,CAAC,MAAM;IACjB,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK;IACzB,IAAI,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;EACrD,CAAC,CAAC;EACF,YAAY,CAAC,MAAM;IACjB,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,CAAC,KAAK,CAAC,OAAO,IAAI,QAAQ,CAAC,CAAC,KAAK,SAAS;IAChF,IAAI,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,MAAM,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC;EAC3D,CAAC,CAAC;EACF,YAAY,CAAC,MAAM;IACjB,gBAAgB,CAAC,CAAC;IAClB,MAAM,QAAQ,GAAG,OAAO,CAAC,CAAC,IAAI,WAAW,CAAC,CAAC;IAC3C,IAAI,KAAK,CAAC,CAAC,EACT,IAAI,CAAC,gBAAgB,CAAoB,oBAAoB,CAAC,CAAC,OAAO,CAAE,MAAM,IAAK;MACjF,MAAM,CAAC,QAAQ,GAAG,QAAQ;IAC5B,CAAC,CAAC;EACN,CAAC,CAAC;EACF;IAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;IAAA,aAES,IAAI;IAAA,uDAAJ,IAAI;IAAA,iBAQN,YAAY;IAAA,mCAEd,IAAI;MAAA,IAAC,IAAI;QAAA,OAAG,sBAAM,CAAC,CAAC,KAAK,SAAS,IAAI,MAAM,CAAC,CAAC,KAAK,IAAI,QAAI,MAAM,CAAC,CAAC,KAAK,KAAK,IAAK,KAAK,CAAC,CAAC;MAAA;MAAA;QAAA;UAAA;UAAA;UAAA;QAAA,iBAE/E,MAAM;QAAA,mCACZ,IAAI;UAAA,IAAC,IAAI;YAAA,OAAE,KAAK,CAAC,CAAC;UAAA;UAAA;YAAA;cAAA;gBAAA;gBAAA;gBAAA;cAAA,uBAGd,CAAC,CAAC,CAAC,CAAC,UAAU;cAAA,+CAFkB,gBAAgB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,oBAAoB,GAAG,CAAC,CAAC,CAAC,CAAC,gBAAgB;cAAA;YAAA,wBAItG,MAAM;cACL,IAAI;cACJ,OAAO;cAAA,IACP,QAAQ;gBAAA,OAAE,OAAO,CAAC,CAAC,IAAK,CAAC,gBAAgB,CAAC,CAAC,IAAI,WAAW,CAAC,CAAE;cAAA;cAAA,IAC7D,MAAM;gBAAA,OAAE,KAAK,CAAC,QAAQ;cAAA;cAAA,IACtB,OAAO;gBAAA,OAAE,+BAAgB,CAAC,CAAC,MAAG,CAAC,CAAC,CAAC,CAAC,oBAAoB,GAAG,0BAAW,CAAC,CAAC,MAAG,CAAC,CAAC,CAAC,CAAC,oBAAoB,GAAG,CAAC,CAAC,CAAC,CAAC,gBAAgB;cAAA;cACxH,WAAW,EAAE,iBAAiB;cAC9B,OAAO,EAAE,MAAM;gBACb,IAAI,CAAC,MAAM,EAAE;gBACb,IAAI,gBAAgB,CAAC,CAAC,EAAE;kBACtB,UAAU,CAAC,QAAQ,CAAC;kBACpB,cAAc,CAAC,MAAM,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;kBAC1C;gBACF;gBACA,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAE,KAAK,IACpE,KAAK,CAAC,KAAK,CAAC,IAAI,CAAE,GAAG,IAAK,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,OAAO,CAC5D,CAAC;gBACD,IAAI,KAAK,EAAE,cAAc,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,iBAAiB,CAAC;cAC7E,CAAC;cAAA;gBAAA,OAEA,+BAAgB,CAAC,CAAC,MAAG,CAAC,CAAC,CAAC,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC,CAAC,eAAe;cAAA;YAAA;UAAA;QAAA;QAAA;MAAA;IAAA;IAAA,mCAKrE,IAAI;MAAA,IAAC,IAAI;QAAA,OAAE,iBAAC,KAAK,CAAC,QAAQ,IAAI,IAAI,CAAC,CAAC,KAAK,OAAO,QAAI,KAAK,CAAC,OAAO,KAAK,KAAK;MAAA;MAAA;QAAA;QAAA,mCAEvE,OAAO;UAAA;UAAA,IAAyB,KAAK;YAAA,OAAE,CAAC,CAAC,CAAC,CAAC,UAAU;UAAA;UAAA;YAAA,0BACnD,IAAI;cAAA,IAAC,IAAI;gBAAA,OAAE,SAAS,CAAC,CAAC;cAAA;cAAA;gBAAA,yBACpB,YAAY;kBAAC,SAAS,EAAE;gBAAS;cAAA;YAAA,sBAEnC,GAAG;cAAA,IAAC,IAAI;gBAAA,OAAE,wBAAS,CAAC,CAAC,MAAG,EAAE,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;cAAA;cAAA,UACtF,KAAK,sBACJ,OAAO,CAAC,KAAK;gBAAA;gBAAA;kBAAA,yBACX,GAAG;oBAAC,IAAI,EAAE,KAAK;oBAAA,UACb,CAAC,CAAC,OAAO,EAAE,IAAI,CAAC,KACf,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,MAAM,GACzC,UAAU,CAAC,OAAO,CAAC,qBAElB,IAAI;sBAAA,IACH,IAAI;wBAAA,OAAE,uBAAO,KAAK,OAAO,IAAI,IAAI,CAAC,CAAC,KAAK,WAAW,QAAI,IAAI,CAAC,CAAC,EAAE,WAAW;sBAAA;sBAAA,IAC1E,QAAQ;wBAAA,yBACL,UAAU;0BAAA;0BAET,OAAO;0BACP,IAAI;0BAAA,IACJ,KAAK;4BAAA,OAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;0BAAA;0BAAA,IACnB,OAAO;4BAAA,OACL,wBAAS,CAAC,OAAO,CAAC,MACd,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,cAAc,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE;8BAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;8BAAE,MAAM,EAAE,MAAM,CAAC;4BAAE,CAAC,CAAC,CAAC,KAAK,GAAG,GACjH,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;0BAAA;0BAAA,IAElB,QAAQ;4BAAA,OAAE,OAAO,CAAC,CAAC,IAAK,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,OAAO,KAAK,OAAQ;0BAAA;0BACxF,WAAW,EAAE,iBAAiB;0BAC9B,OAAO,EAAE,MAAM,SAAS,CAAC,OAAO,CAAC;0BAAA;4BAAA;4BAAA,oBAEvB,SAAS,IAAI,EAAE;4BAAA;0BAAA;wBAAA;sBAAA;sBAAA;wBAAA,OAI5B,IAAI,CAAC,CAAC;sBAAA;oBAAA;kBAEV;gBAAA;cAAA;YAIR,sBAGF,IAAI;cAAA,IAAC,IAAI;gBAAA,OAAE,iBAAI,CAAC,CAAC,KAAK,QAAQ,OAAI,CAAC,SAAS,CAAC,CAAC;cAAA;cAAA;gBAAA,yBAC5C,gBAAgB;kBAAA;kBAEf,IAAI;kBAAA,IACJ,SAAS;oBAAA,OAAE,CAAC,CAAC,CAAC,CAAC,IAAI;kBAAA;kBACnB,KAAK;kBAAA,IACL,OAAO;oBAAA,OAAE,CACP;sBAAE,KAAK,EAAE,WAAW;sBAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS;sBAAE,IAAI,EAAE;oBAAmB,CAAC,EACtE;sBAAE,KAAK,EAAE,QAAQ;sBAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM;sBAAE,IAAI,EAAE;oBAAiB,CAAC,CAC/D;kBAAA;kBACD,aAAa,EAAE;gBAAU;cAAA;YAAA,sBAG5B,IAAI;cAAA,IAAC,IAAI;gBAAA,OAAE,oBAAK,CAAC,SAAS,OAAI,CAAC,SAAS,CAAC,CAAC;cAAA;cAAA;gBAAA,yBACxC,eAAe;kBAAC,SAAS,EAAE,SAAS;kBAAA;gBAAA;cAAA;YAAA;UAAA;QAAA;QAAA;MAAA;IAAA;IAAA,mCAK5C,IAAI;MAAA,IAAC,IAAI;QAAA,OAAE,KAAK,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC;MAAA;MAAA;QAAA;QAAA,mCAEhC,GAAG;UAAC,IAAI,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC;UAAA,UAC/B,KAAK;YAAA;cAAA;YAAA,oCAEmB,GAAG,KAAK,GAAG;YAAA;UAAA;QAEpC;QAAA,oDANkD,CAAC,CAAC,CAAC,CAAC,OAAO;QAAA;MAAA;IAAA;IAAA,aAU1D,KAAK;IAAA,uDAAL,KAAK;IAAA,iBAEZ,QAAQ;IAAA,mCAGR,IAAI;MAAA,IAAC,IAAI;QAAA,OAAE,MAAM,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,KAAK,SAAS;MAAA;MAAA;QAAA;UAAA;UAAA;UAAA;UAAA;UAAA;UAAA;UAAA;QAAA,mCAGzC,IAAI;UAAA,IAAC,IAAI;YAAA,OAAE,MAAM,CAAC,CAAC;UAAA;UAAA;YAAA,yBACjB,IAAI;cAAA,IAAC,IAAI;gBAAA,OAAE,qBAAM,CAAC,CAAC,EAAE,MAAM,OAAI,KAAK,CAAC,cAAc;cAAA;cAAA,IAAE,QAAQ;gBAAA;kBAAA;kBAAA,uBAAS,MAAM,CAAC,CAAC,EAAE,OAAO;kBAAA;gBAAA;cAAA;cAAA;gBAAA,yBACrF,MAAM;kBAAC,IAAI;kBAAM,OAAO;kBAAA,IAAS,QAAQ;oBAAA,OAAE,OAAO,CAAC,CAAC;kBAAA;kBAAE,OAAO,EAAE,MAAM,KAAK,CAAC,cAAc,GAAG,CAAC;kBAAA;oBAAA,OAC3F,MAAM,CAAC,CAAC,EAAE,OAAO;kBAAA;gBAAA;cAAA;YAAA;UAAA;QAAA;QAAA,mCAIvB,IAAI;UAAA,IAAC,IAAI;YAAA,OAAE,QAAQ,CAAC,CAAC,KAAK,SAAS;UAAA;UAAA;YAAA;cAAA;gBAAA;gBAAA;gBAAA;cAAA,uBAE/B,CAAC,CAAC,CAAC,CAAC,cAAc;cAAA,8CACgC,QAAQ,CAAC,CAAC;cAAA;YAAA,wBAE9D,MAAM;cACL,IAAI;cACJ,OAAO;cACP,OAAO,EAAE,MAAM;gBACb,WAAW,CAAC,SAAS,CAAC;gBACtB,IAAI,MAAM,CAAC,CAAC,EAAE,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,SAAS,CAAC,SAAS,CAAC;cACjE,CAAC;cAAA;gBAAA,OAEA,CAAC,CAAC,CAAC,CAAC,eAAe;cAAA;YAAA;UAAA;QAAA;QAAA,mCAIzB,IAAI;UAAA,IAAC,IAAI;YAAA,OAAE,MAAM,CAAC,CAAC;UAAA;UAAA;YAAA,yBACjB,UAAU;cAAC,IAAI;cAAM,OAAO;cAAA,IAAS,KAAK;gBAAA,OAAE,CAAC,CAAC,CAAC,CAAC,OAAO;cAAA;cAAE,OAAO,EAAE,MAAM,SAAS,CAAC,SAAS,CAAC;cAAA;gBAAA;cAAA;YAAA;UAAA;QAAA;QAAA;MAAA;IAAA;IAAA;MAAA,WArJ9F,mBAAmB,KAAK,CAAC,KAAK,IAAI,EAAE,EAAE;QAAA,OAClC,IAAI,CAAC,CAAC;QAAA,OACF,KAAK,CAAC,QAAQ,GAAG,MAAM,GAAG,SAAS;QAAA,OACrC,MAAM,CAAC,CAAC,GAAG,MAAM,GAAG,SAAS;QAAA,OAC/B,KAAK,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC;QAAA,OAgHZ,KAAK,CAAC,YAAY,GAAG,kBAAkB,GAAG,cAAc;QAAA,OAAU,KAAK,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC;QAAA,QACzE,YAAY,CAAC,CAAC;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;IAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;IAAA;IAAA;EAAA;AAyC9D;AAAC","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":[],"sources":["text-editor/TextEditor.tsx"],"sourcesContent":["import { history, historyKeymap, redo, undo } from \"@codemirror/commands\";\nimport type { Extension } from \"@codemirror/state\";\nimport { EditorView, keymap } from \"@codemirror/view\";\nimport { clipboard } from \"@k2b/stdlib/solid\";\nimport {\n children,\n createEffect,\n createMemo,\n createSignal,\n createUniqueId,\n For,\n type JSX,\n on,\n onCleanup,\n onMount,\n Show,\n untrack,\n} from \"solid-js\";\nimport { Button, IconButton } from \"../actions/Button\";\nimport {\n Dropdown,\n type DropdownAction,\n type DropdownAnchor,\n type DropdownChoice,\n type DropdownItem,\n type DropdownPosition,\n} from \"../actions/Dropdown\";\nimport { SegmentedControl } from \"../actions/SegmentedControl\";\nimport { Toolbar } from \"../actions/Toolbar\";\nimport { Kbd } from \"../content/Kbd\";\nimport { dialogCore } from \"../feedback/dialog-core\";\nimport { createDictation } from \"../inputs/dictation/create-dictation\";\nimport { DictationBar, DictationButton, dictationBarShown } from \"../inputs/dictation/Dictation\";\nimport type { DictationAlternative, DictationSource } from \"../inputs/dictation/types\";\nimport { NumberInput } from \"../inputs/NumberInput\";\nimport { LocaleProvider, useLocale } from \"../intl/locale\";\nimport { formatShortcut, type KeyboardPlatform, keyboardPlatform } from \"../intl/shortcut\";\nimport BottomSheet, { bottomSheetAdaptiveOptions } from \"../layout/BottomSheet\";\nimport { codeMirrorDictationTarget, dictationExtension } from \"./dictation\";\nimport { createTextEditor, type TextEditorController, type TextEditorMode, type TextEditorOptions } from \"./engine\";\nimport { commands, formatLabels, type InlineFormat } from \"./format\";\nimport { findTables, inspectTableStructure } from \"./markdown-table\";\nimport { textEditorMessages } from \"./messages\";\nimport {\n copyTable,\n editTableSource,\n formatActiveCell,\n type MenuAction,\n runMenuAction,\n runTableAction,\n type TableHost,\n tableActionEnabled,\n} from \"./table\";\n\nexport type TextEditorProps = {\n label: string;\n initialValue?: string;\n mode?: TextEditorMode;\n onModeChange?: (mode: TextEditorMode) => void;\n readOnly?: boolean;\n loading?: boolean;\n placeholder?: string;\n extensions?: Extension;\n /** Host-owned Markdown presentation; see `createTextEditor`. The host then also styles the editor surface. */\n presentation?: TextEditorOptions[\"presentation\"];\n /** `false` when the host renders its own formatting toolbar and mode control; place `controls.TableMenu` in it. */\n toolbar?: boolean;\n /** Collaboration supplies history and server-owned structure here. */\n host?: Pick<TableHost, \"structure\" | \"renderCell\" | \"onCellSelection\" | \"tabMovesFocus\"> &\n Partial<Pick<TableHost, \"undo\" | \"redo\" | \"boundary\">>;\n maxLength: number;\n maxPasteCells?: number;\n onChange?: (text: string) => void;\n onReady?: (editor: TextEditorController, controls: TextEditorControls) => void;\n /** Return `true` when the host attached the images itself; otherwise the editor shows its attachment hint. */\n onDroppedImages?: (count: number, files: File[]) => boolean | void;\n /** Opens the host's attachment picker when clipboard images cannot be inserted. */\n onAttachImages?: () => void;\n onTableCheck?: (needsCheck: boolean) => void;\n /** Host-owned sync status. Its row appears only while there is a status or a table check; keep it set across transitions. */\n status?: JSX.Element;\n /**\n * Live dictation as the last control of the toolbar, so it never scrolls away. While it runs, the dictation bar\n * stands in for the formatting controls in the same row. Words land at the caret as typed text does.\n */\n dictation?: { source: DictationSource; alternative?: DictationAlternative };\n class?: string;\n};\n\nexport type TableSizePickerProps = {\n maxRows: number;\n maxColumns: number;\n onPick: (size: { rows: number; columns: number }) => void;\n /** Share this picker with slash commands or secondary menus. */\n onReady?: (open: () => void) => void;\n disabled?: boolean;\n class?: string;\n size?: \"xs\" | \"sm\";\n};\n\n/** Shared table-size control: pointer grid on desktop, large fields in a phone sheet. */\nexport function TableSizePicker(props: TableSizePickerProps) {\n const locale = useLocale();\n const t = () => textEditorMessages.resolve([locale()]).t;\n const [rows, setRows] = createSignal<number | null>(3);\n const [columns, setColumns] = createSignal<number | null>(3);\n const [expanded, setExpanded] = createSignal(false);\n const id = createUniqueId();\n const abort = new AbortController();\n let disposed = false;\n onCleanup(() => {\n disposed = true;\n abort.abort();\n });\n let trigger!: HTMLButtonElement;\n let popup!: HTMLDivElement;\n const reset = () => {\n setRows(Math.min(3, props.maxRows));\n setColumns(Math.min(3, props.maxColumns));\n };\n const choose = (r: number, c: number) => {\n popup.hidePopover();\n if (!disposed && !props.disabled) props.onPick({ rows: r, columns: c });\n };\n const open = async () => {\n if (disposed || props.disabled || expanded()) return;\n reset();\n if (!window.matchMedia(\"(max-width: 47.999rem)\").matches) {\n popup.showPopover();\n const anchor = trigger.getBoundingClientRect(),\n box = popup.getBoundingClientRect();\n popup.style.left = `${Math.max(8, Math.min(anchor.left, innerWidth - box.width - 8))}px`;\n popup.style.top = `${Math.max(8, anchor.top > box.height + 8 ? anchor.top - box.height - 8 : Math.min(anchor.bottom + 8, innerHeight - box.height - 8))}px`;\n popup.focus();\n return;\n }\n setExpanded(true);\n const chosen = await dialogCore.open<{ rows: number; columns: number }>(\n (close, context) => (\n <LocaleProvider locale={locale()}>\n <BottomSheet onDismiss={context.requestDismiss}>\n <BottomSheet.Header title={t().insertTable} close={context.requestDismiss} />\n <BottomSheet.Body>\n <div class=\"k2b-ste-size-picker\">\n <NumberInput label={t().rows} value={rows()} onValueChange={setRows} min={1} max={props.maxRows} step={1} />\n <NumberInput label={t().columns} value={columns()} onValueChange={setColumns} min={1} max={props.maxColumns} step={1} />\n </div>\n </BottomSheet.Body>\n <BottomSheet.Footer>\n <Button\n disabled={!rows() || !columns()}\n onClick={() => {\n const r = rows(),\n c = columns();\n if (r && c) close({ rows: r, columns: c });\n }}\n >\n {t().insertSize({ rows: rows() ?? 0, columns: columns() ?? 0 })}\n </Button>\n </BottomSheet.Footer>\n </BottomSheet>\n </LocaleProvider>\n ),\n { ...bottomSheetAdaptiveOptions, ariaLabel: t().insertTable, history: true, signal: abort.signal },\n );\n setExpanded(false);\n if (chosen && !disposed && !props.disabled) props.onPick(chosen);\n };\n onMount(() => props.onReady?.(() => void open()));\n const keyboard = (event: KeyboardEvent) => {\n const directions: Record<string, [number, number]> = { ArrowUp: [-1, 0], ArrowDown: [1, 0], ArrowLeft: [0, -1], ArrowRight: [0, 1] };\n const direction = directions[event.key];\n if (direction) {\n event.preventDefault();\n setRows(Math.max(1, Math.min(Math.min(9, props.maxRows), (rows() ?? 1) + direction[0])));\n setColumns(Math.max(1, Math.min(Math.min(10, props.maxColumns), (columns() ?? 1) + direction[1])));\n } else if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n choose(rows() ?? 1, columns() ?? 1);\n } else if (event.key === \"Escape\") trigger.focus();\n };\n return (\n <>\n <IconButton\n ref={trigger}\n variant=\"ghost\"\n class={props.class}\n size={props.size ?? \"sm\"}\n disabled={props.disabled}\n label={t().insertTable}\n aria-haspopup=\"dialog\"\n aria-controls={id}\n aria-expanded={expanded()}\n tooltip={t().insertTable}\n onMouseDown={(event) => event.preventDefault()}\n onClick={() => void open()}\n >\n <i class=\"ti ti-table\" aria-hidden=\"true\" />\n </IconButton>\n <div\n ref={popup}\n id={id}\n popover=\"auto\"\n class=\"k2b-ste-size-popover\"\n role=\"dialog\"\n aria-label={t().insertTable}\n tabIndex={-1}\n onKeyDown={keyboard}\n on:toggle={() => setExpanded(popup.matches(\":popover-open\"))}\n >\n <div class=\"k2b-ste-size-grid\" role=\"group\" aria-label={t().insertTable}>\n <For each={Array.from({ length: Math.min(9, props.maxRows) }, (_, index) => index + 1)}>\n {(r) => (\n <div class=\"k2b-ste-size-row\">\n <For each={Array.from({ length: Math.min(10, props.maxColumns) }, (_, index) => index + 1)}>\n {(c) => (\n <button\n type=\"button\"\n tabIndex={-1}\n aria-label={t().insertSize({ rows: r, columns: c })}\n data-selected={r <= (rows() ?? 0) && c <= (columns() ?? 0) ? \"true\" : undefined}\n onPointerEnter={() => {\n setRows(r);\n setColumns(c);\n }}\n onClick={() => choose(r, c)}\n />\n )}\n </For>\n </div>\n )}\n </For>\n </div>\n <div class=\"k2b-ste-size-caption\" role=\"status\">\n {t().insertSize({ rows: rows() ?? 0, columns: columns() ?? 0 })}\n </div>\n </div>\n </>\n );\n}\n\ntype TableMenuTrigger = { text?: string; class?: string; size?: \"xs\" | \"sm\"; position?: DropdownPosition };\n/** Shared table controls for a host-owned toolbar (`toolbar={false}`). */\nexport type TextEditorControls = {\n /** A table cell has focus in the formatted view. */\n tableActive: () => boolean;\n /** The shared cell menu behind a host-styled trigger; on phones it opens as a sheet. */\n TableMenu: (props: TableMenuTrigger) => JSX.Element;\n /** Formats the focused cell's selection; `false` when no cell has focus. */\n formatCell: (format: InlineFormat) => boolean;\n /** Shows a host message, such as a server's reason for a rejected table action, in the editor's notice. */\n notify: (message: string) => void;\n};\n\nconst toolbar = [\n [\"bold\", \"bold\"],\n [\"italic\", \"italic\"],\n [\"heading\", \"heading\"],\n [\"bulletList\", \"list\"],\n [\"orderedList\", \"list-numbers\"],\n [\"quote\", \"quote\"],\n [\"link\", \"link\"],\n [\"code\", \"code\"],\n [\"table\", \"table\"],\n [\"rule\", \"separator\"],\n] as const;\nconst actionIcons = {\n rowAbove: \"row-insert-top\",\n rowBelow: \"row-insert-bottom\",\n colLeft: \"column-insert-left\",\n colRight: \"column-insert-right\",\n alignLeft: \"align-left\",\n alignCenter: \"align-center\",\n alignRight: \"align-right\",\n deleteRow: \"row-remove\",\n deleteCol: \"column-remove\",\n moveRowUp: \"arrow-up\",\n moveRowDown: \"arrow-down\",\n moveColLeft: \"arrow-left\",\n moveColRight: \"arrow-right\",\n toggleHeader: \"table-row\",\n deleteTable: \"trash\",\n} as const;\ntype MenuScope = \"row\" | \"column\" | \"cell\";\nconst isInlineCommand = (command: string): command is Extract<InlineFormat, string> => inlineCommands.has(command);\nconst shortcuts: Partial<Record<keyof typeof commands, string>> = { bold: \"mod+b\", italic: \"mod+i\", link: \"mod+k\" };\nconst inlineCommands = new Set<string>([\"bold\", \"italic\", \"code\", \"link\", \"strike\"]);\n\n/** A Markdown text field with app-injected collaboration and a directly editable table view. */\nexport function TextEditor(props: TextEditorProps) {\n const locale = useLocale();\n const t = () => textEditorMessages.resolve([locale()]).t;\n const [mode, setMode] = createSignal<TextEditorMode>(props.mode ?? \"formatted\");\n const status = children(() => props.status);\n const [ready, setReady] = createSignal(false);\n const [recovery, setRecovery] = createSignal<string>();\n const [notice, setNotice] = createSignal<{ message: string; images?: boolean }>();\n const [cell, setCell] = createSignal<HTMLElement>();\n const [localSource, setLocalSource] = createSignal(false);\n const [announcement, setAnnouncement] = createSignal(\"\");\n const [check, setCheck] = createSignal(false);\n const [missingSeparator, setMissingSeparator] = createSignal(false);\n const [active, setActive] = createSignal(false);\n const [documentRevision, setDocumentRevision] = createSignal(0);\n const [phoneMenu, setPhoneMenu] = createSignal(false);\n const [platform, setPlatform] = createSignal<KeyboardPlatform>(\"other\");\n /** What the open cell menu acts on: a row grip, a column grip, or the cell (right-click, keys, toolbar). */\n const [scope, setScope] = createSignal<MenuScope>(\"cell\");\n let grip: HTMLElement | undefined;\n createEffect(() => {\n const target = cell();\n const kind = scope();\n if (!target) return;\n if (kind === \"cell\") {\n target.setAttribute(\"data-active\", \"\");\n onCleanup(() => target.removeAttribute(\"data-active\"));\n return;\n }\n // A grip's menu marks its whole row or column, and the grip stays visible while the menu is open.\n const marked =\n kind === \"row\"\n ? [target.closest(\"tr\")]\n : [...(target.closest(\".k2b-ste-table\")?.querySelectorAll<HTMLElement>(`.k2b-ste-cell[data-c=\"${target.dataset.c}\"]`) ?? [])].map(\n (element) => element.parentElement,\n );\n const opener = grip;\n for (const element of marked) element?.setAttribute(\"data-marked\", \"\");\n opener?.setAttribute(\"data-open\", \"\");\n onCleanup(() => {\n for (const element of marked) element?.removeAttribute(\"data-marked\");\n opener?.removeAttribute(\"data-open\");\n });\n });\n let disposed = false;\n onCleanup(() => {\n disposed = true;\n const text = recovery();\n if (text !== undefined) detachedRecovery(text);\n });\n // A local draft can outlive an island during navigation. Keep its recovery\n // surface in the shared dialog root so disposal never silently drops it.\n const detachedRecovery = (text: string) => {\n const language = locale();\n const labels = t();\n const beforeUnload = (event: BeforeUnloadEvent) => {\n event.preventDefault();\n event.returnValue = \"\";\n };\n window.addEventListener(\"beforeunload\", beforeUnload);\n const show = () =>\n void dialogCore\n .open<\"discard\">(\n (close, context) => {\n context.setDismissHandler(() => {});\n return (\n <LocaleProvider locale={language}>\n <BottomSheet handle={false} onDismiss={() => {}}>\n <BottomSheet.Header title={labels.recoveredInput} />\n <BottomSheet.Body>\n <label class=\"k2b-ste-recovery-label\">\n {labels.recoveredInput}\n <textarea class=\"k2b-ste-recovery\" readOnly value={text} />\n </label>\n </BottomSheet.Body>\n <BottomSheet.Footer>\n <Button variant=\"ghost\" onClick={() => close(\"discard\")}>\n {labels.discardRecovery}\n </Button>\n </BottomSheet.Footer>\n </BottomSheet>\n </LocaleProvider>\n );\n },\n { ...bottomSheetAdaptiveOptions, ariaLabel: labels.recoveredInput },\n )\n .then((result) => {\n if (result === \"discard\") window.removeEventListener(\"beforeunload\", beforeUnload);\n // The shared dialog root closes on each island disposal. Retain the\n // draft across subsequent navigation until the person explicitly discards it.\n else queueMicrotask(show);\n });\n show();\n };\n let menuOpen = false;\n let openCellMenu: ((anchor: DropdownAnchor, returnFocus?: () => HTMLElement | undefined) => void) | undefined;\n let closeCellMenu: (() => void) | undefined;\n let copyTrigger: HTMLButtonElement | undefined;\n const tableTriggers = new Set<HTMLButtonElement>();\n let frame = 0;\n const [menuPosition, setMenuPosition] = createSignal({ left: \"0px\", top: \"0px\" });\n let root!: HTMLDivElement;\n let mount!: HTMLDivElement;\n let editor: TextEditorController | undefined;\n // The view is read-only while it loads or recovers, too; dictation only runs where words can land.\n const dictationWritable = () => !props.readOnly && !props.loading && ready() && recovery() === undefined && mode() !== \"plain\";\n const dictation = createDictation({\n source: {\n start: (options) => props.dictation!.source.start(options),\n devices: () => props.dictation?.source.devices() ?? Promise.resolve([]),\n },\n get alternative() {\n return props.dictation?.alternative;\n },\n target: codeMirrorDictationTarget(() => editor?.view),\n disabled: () => !props.dictation || !dictationWritable(),\n });\n // A field that turns read-only or plain hides the toolbar; dictation then ends and the words so far stay.\n // A memo compares the value, so ordinary edits never end it.\n const dictationScope = createMemo(() => `${Boolean(props.dictation)}:${dictationWritable()}`);\n createEffect(on(dictationScope, () => dictation.end(), { defer: true }));\n const dictating = () => Boolean(props.dictation) && dictationBarShown(dictation);\n const menuBlocked = () => !!props.loading || !ready() || recovery() !== undefined;\n const blocked = () => !!props.readOnly || menuBlocked();\n const updateCheck = () => {\n const issue =\n mode() === \"plain\"\n ? { extraCells: false, missingSeparator: false }\n : inspectTableStructure(editor?.view.state.doc.toString() ?? props.initialValue ?? \"\");\n const needsCheck = issue.extraCells || issue.missingSeparator;\n setMissingSeparator(issue.missingSeparator);\n setCheck(needsCheck);\n props.onTableCheck?.(needsCheck);\n };\n const positionMenu = () => {\n const target = cell();\n if (!target) return;\n const wrap = target.closest<HTMLElement>(\".k2b-ste-table\");\n const table = wrap?.querySelector(\"table\");\n if (!target.isConnected || !wrap || !table || mode() !== \"formatted\") {\n closeCellMenu?.();\n menuOpen = false;\n setCell(undefined);\n checkFocus();\n return;\n }\n // Only the read-only phone copy control sits below its table; every other menu opens beside its anchor.\n if (!props.readOnly) return;\n const bounds = root.getBoundingClientRect();\n setMenuPosition({\n left: `${wrap.getBoundingClientRect().left - bounds.left}px`,\n top: `${wrap.getBoundingClientRect().bottom - bounds.top - (window.matchMedia(\"(max-width: 47.999rem)\").matches ? 44 : 0)}px`,\n });\n };\n const schedulePosition = () => {\n if (!frame)\n frame = requestAnimationFrame(() => {\n frame = 0;\n positionMenu();\n });\n };\n const unavailable = createMemo(() => !!props.host?.structure && !props.host.structure.available());\n // Closed table menus keep their entries until they open again. A host may report another availability on every\n // edit, and each entry rebuilt or re-enabled in a hidden menu restyles the whole page through the shared `:has()`\n // rules, so typing would lag.\n const [tableMenuShown, setTableMenuShown] = createSignal(false);\n const whileMenuShown = <T,>(read: () => T) => createMemo<T>((last) => (tableMenuShown() ? read() : last), untrack(read));\n const menuRevision = whileMenuShown(documentRevision);\n const menuUnavailable = whileMenuShown(unavailable);\n const actionDisabled = (action: MenuAction) => {\n menuRevision();\n menuUnavailable();\n const wrap = cell()?.closest<HTMLElement>(\".k2b-ste-table\");\n const view = editor?.view;\n return blocked() || !view || !wrap || untrack(() => !tableActionEnabled(view, wrap, action));\n };\n const isMove = (action: MenuAction) => action.startsWith(\"move\");\n const runAction = (action: MenuAction) => {\n const wrap = cell()?.closest<HTMLElement>(\".k2b-ste-table\");\n const focused = document.activeElement;\n const menuElement = focused instanceof HTMLElement ? focused.closest<HTMLElement>('[role=\"menu\"]') : null;\n if (editor && wrap && !actionDisabled(action)) runMenuAction(editor.view, wrap, action);\n // The phone move sheet remains usable for another move. Local structural\n // focus belongs to the cell only after the menu has closed.\n if (isMove(action) && focused instanceof HTMLElement && menuElement) {\n const restore = () => {\n if (disposed || !menuElement.isConnected) return;\n const target =\n focused.isConnected && !focused.matches(\":disabled\")\n ? focused\n : menuElement.querySelector<HTMLElement>('[role^=\"menuitem\"]:not(:disabled)');\n target?.focus({ preventScroll: true });\n };\n restore();\n queueMicrotask(restore);\n }\n };\n const moveKeys: Partial<Record<MenuAction, string>> = {\n moveRowUp: \"alt+arrowup\",\n moveRowDown: \"alt+arrowdown\",\n moveColLeft: \"alt+arrowleft\",\n moveColRight: \"alt+arrowright\",\n };\n const shortActionLabels = {\n rowAbove: \"menuAbove\",\n rowBelow: \"menuBelow\",\n moveRowUp: \"menuUp\",\n moveRowDown: \"menuDown\",\n deleteRow: \"menuDelete\",\n colLeft: \"menuInsertLeft\",\n colRight: \"menuInsertRight\",\n moveColLeft: \"menuMoveLeft\",\n moveColRight: \"menuMoveRight\",\n deleteCol: \"menuDelete\",\n } as const;\n const menuRow = () => {\n menuRevision();\n return t().menuRow(Number(cell()?.dataset.r ?? 0));\n };\n const menuColumn = () => {\n menuRevision();\n const column = Number(cell()?.dataset.c ?? 0);\n const header = cell()?.closest(\".k2b-ste-table\")?.querySelector<HTMLElement>(`.k2b-ste-cell[data-r=\"0\"][data-c=\"${column}\"]`);\n return t().menuColumn(header?.dataset.raw || t().column(column + 1));\n };\n const menuHeading = (kind: MenuScope = scope()) =>\n kind === \"row\" ? menuRow() : kind === \"column\" ? menuColumn() : `${menuRow()} · ${menuColumn()}`;\n const actionItem = (\n action: keyof typeof actionIcons,\n choice?: Pick<DropdownChoice, \"choice\" | \"checked\" | \"class\" | \"ariaLabel\">,\n kind: MenuScope = \"cell\",\n ) =>\n ({\n get label() {\n // A grip's sheet has no row or column heading over its entries, so deleting keeps its full name.\n const short = phoneMenu() && action in shortActionLabels && !(kind !== \"cell\" && action.startsWith(\"delete\"));\n return short ? t()[shortActionLabels[action as keyof typeof shortActionLabels]] : t()[action];\n },\n icon: `ti ti-${actionIcons[action]}`,\n get disabled() {\n return actionDisabled(action);\n },\n immediate: true,\n trailing: moveKeys[action] ? <Kbd keys={moveKeys[action]!} /> : action === \"rowBelow\" ? <Kbd keys=\"enter\" /> : undefined,\n variant: action === \"deleteRow\" || action === \"deleteCol\" || action === \"deleteTable\" ? \"danger\" : undefined,\n closeOnSelect: !isMove(action),\n action: () => runAction(action),\n ...choice,\n }) satisfies DropdownAction;\n const [copying, setCopying] = createSignal(false);\n const tableCopy = clipboard.createWriter({\n write: ({ view, wrap, format }: { view: EditorView; wrap: HTMLElement; format: \"table\" | \"markdown\" }) => copyTable(view, wrap, format),\n });\n const copy = async (format: \"table\" | \"markdown\") => {\n const wrap = cell()?.closest<HTMLElement>(\".k2b-ste-table\");\n if (!editor || !wrap || copying()) return;\n setCopying(true);\n setNotice({ message: t().copyingTable });\n const success = await tableCopy.copy({ view: editor.view, wrap, format });\n if (disposed) return;\n setCopying(false);\n setNotice({ message: success ? (format === \"table\" ? t().copiedTable : t().copiedMarkdown) : t().copyFailed });\n };\n const copyItems = (): DropdownAction[] => [\n {\n get label() {\n return phoneMenu() && !props.readOnly ? t().menuCopy : t().copyTable;\n },\n icon: \"ti ti-copy\",\n get disabled() {\n return copying();\n },\n immediate: true,\n action: () => {\n void copy(\"table\");\n },\n },\n {\n get label() {\n return phoneMenu() && !props.readOnly ? t().menuMarkdown : t().copyMarkdown;\n },\n icon: \"ti ti-markdown\",\n get disabled() {\n return copying();\n },\n immediate: true,\n action: () => {\n void copy(\"markdown\");\n },\n },\n ];\n /** The row grip shows row and table actions, the column grip column, alignment and table actions; the rest everything. */\n const items = (kind: MenuScope): DropdownItem[] => {\n if (props.readOnly) return copyItems();\n const align = () => {\n menuRevision();\n return cell()?.parentElement?.style.textAlign || \"left\";\n };\n const row: DropdownItem[] = [\n {\n get sectionLabel() {\n return kind === \"cell\" ? menuRow() : undefined;\n },\n items: ([\"rowAbove\", \"rowBelow\", \"moveRowUp\", \"moveRowDown\", \"deleteRow\"] as const).map((action) =>\n actionItem(action, undefined, kind),\n ),\n },\n ];\n const column: DropdownItem[] = [\n {\n get sectionLabel() {\n return kind === \"cell\" ? menuColumn() : undefined;\n },\n items: ([\"colLeft\", \"colRight\", \"moveColLeft\", \"moveColRight\"] as const).map((action) => actionItem(action)),\n },\n {\n sectionLabel: t().alignment,\n layout: \"row\",\n items: ([\"alignLeft\", \"alignCenter\", \"alignRight\"] as const).map((action, index) =>\n actionItem(action, {\n choice: \"radio\",\n class: \"k2b-ste-align-choice\",\n ariaLabel: t()[action],\n checked: () => align() === [\"left\", \"center\", \"right\"][index],\n }),\n ),\n },\n { items: [actionItem(\"deleteCol\", undefined, kind)] },\n ];\n return [\n {\n get sectionLabel() {\n return menuHeading(kind);\n },\n items: [],\n },\n ...(kind === \"column\" ? [] : row),\n ...(kind === \"row\" ? [] : column),\n {\n sectionLabel: t().table,\n items: [\n actionItem(\"toggleHeader\", {\n choice: \"checkbox\",\n class: \"k2b-ste-header-choice\",\n checked: () => {\n menuRevision();\n return cell()?.closest<HTMLElement>(\".k2b-ste-table\")?.dataset.header === \"true\";\n },\n }),\n {\n label: t().editMarkdown,\n icon: \"ti ti-markdown\",\n action: () => {\n const wrap = cell()?.closest<HTMLElement>(\".k2b-ste-table\");\n if (editor && wrap) editTableSource(editor.view, wrap);\n },\n },\n ...copyItems(),\n actionItem(\"deleteTable\"),\n ...(menuUnavailable() ? [{ label: t().structureUnavailable, disabled: true as const }] : []),\n ],\n },\n ];\n };\n const preserveSelection = (event: MouseEvent) => event.preventDefault();\n const menuChange = (open: boolean) => {\n menuOpen = open;\n };\n // A press beside an open table menu only closes it: no cell takes focus, no\n // text is selected and no column is marked. The menu's light dismiss closes it.\n let tableMenuOpen = false;\n const tableMenuChange = (open: boolean) => {\n menuOpen = open;\n tableMenuOpen = open && !phoneMenu();\n setTableMenuShown(open);\n };\n let swallow: AbortController | undefined;\n const pressBesideMenu = (event: PointerEvent) => {\n swallow?.abort();\n if (!tableMenuOpen || (event.target instanceof Element && event.target.closest(\".k2b-ste-table-menu\"))) return;\n event.stopPropagation();\n const current = new AbortController();\n swallow = current;\n const block = (blocked: Event) => {\n blocked.preventDefault();\n blocked.stopPropagation();\n if (blocked.type === \"click\" || blocked.type === \"contextmenu\") current.abort();\n };\n for (const type of [\"mousedown\", \"mouseup\", \"click\", \"contextmenu\"])\n document.addEventListener(type, block, { capture: true, signal: current.signal });\n // Only this press is swallowed: its click follows the release in the same task, and a cancelled press never\n // clicks. A key other than a modifier, which may come with the press, starts new input.\n const end = () => current.abort();\n document.addEventListener(\"pointerup\", () => setTimeout(end), { capture: true, once: true, signal: current.signal });\n document.addEventListener(\"pointercancel\", end, { capture: true, once: true, signal: current.signal });\n document.addEventListener(\n \"keydown\",\n (key) => {\n if (![\"Shift\", \"Control\", \"Alt\", \"Meta\"].includes(key.key)) end();\n },\n { capture: true, signal: current.signal },\n );\n };\n const menuClose = () => {\n menuOpen = false;\n tableMenuOpen = false;\n setTableMenuShown(false);\n setScope(\"cell\");\n grip = undefined;\n schedulePosition();\n queueMicrotask(() => {\n if (disposed) return;\n const focused = document.activeElement;\n if (focused instanceof HTMLElement && focused.matches(\".k2b-ste-copy-menu, .k2b-ste-table-tool\")) cell()?.focus();\n checkFocus();\n });\n };\n const sheetTop = (kind: () => MenuScope) =>\n props.readOnly\n ? undefined\n : (close: () => void) => (\n <div class=\"k2b-ste-table-sheet-heading\">\n <span title={menuHeading(kind())}>{menuHeading(kind())}</span>\n <Button variant=\"ghost\" onClick={close}>\n {t().done}\n </Button>\n </div>\n );\n const menuLabel = () => (props.readOnly ? t().copyTable : t().tableMenu);\n const menuDisabled = () => menuBlocked() || localSource() || !cell()?.isConnected;\n // A sheet owns its item inventory until it closes. Replace that owner when\n // edit access changes so an already open sheet cannot retain edit entries.\n /** The toolbar's table button: the whole menu for the focused cell. */\n const menu = (trigger?: TableMenuTrigger) => (\n <Show when={props.readOnly ? \"read\" : \"write\"} keyed>\n {(_access) => (\n <Dropdown\n items={items(\"cell\")}\n phone=\"sheet\"\n sheetTop={sheetTop(() => \"cell\")}\n menuClass=\"k2b-ste-table-menu\"\n position={trigger?.position ?? \"bottom-right\"}\n width=\"18rem\"\n label={menuLabel()}\n disabled={menuDisabled()}\n onOpenChange={tableMenuChange}\n onClose={menuClose}\n >\n <Dropdown.Trigger\n ref={(element) => {\n tableTriggers.add(element);\n onCleanup(() => tableTriggers.delete(element));\n }}\n class={`k2b-ste-tool k2b-ste-table-tool ${trigger?.class ?? \"\"}`}\n variant=\"ghost\"\n size={trigger?.size ?? \"sm\"}\n iconOnly={!trigger?.text}\n label={trigger?.text ?? t().tableMenu}\n aria-pressed={true}\n onMouseDown={preserveSelection}\n >\n <i class=\"ti ti-table\" aria-hidden=\"true\" />\n {trigger?.text}\n <Show when={trigger?.text}>\n <i class=\"ti ti-chevron-down\" aria-hidden=\"true\" />\n </Show>\n </Dropdown.Trigger>\n </Dropdown>\n )}\n </Show>\n );\n /** Grips, right-click and Shift+F10 open this menu beside its anchor; it has no button of its own. */\n const cellMenu = () => (\n <Show when={props.readOnly ? \"read\" : \"write\"} keyed>\n {(_access) => (\n <Dropdown\n items={items(scope())}\n phone=\"sheet\"\n sheetTop={sheetTop(scope)}\n menuClass=\"k2b-ste-table-menu\"\n position=\"bottom-right\"\n width=\"18rem\"\n label={menuLabel()}\n disabled={menuDisabled()}\n onOpenChange={tableMenuChange}\n onClose={menuClose}\n openAt={(open) => {\n openCellMenu = open;\n }}\n closeWith={(close) => {\n closeCellMenu = close;\n }}\n >\n {/* Phones have no right-click: a read-only table keeps a visible copy control below it. */}\n <Show when={props.readOnly && cell() && mode() === \"formatted\" && !menuBlocked()}>\n <Dropdown.Trigger\n ref={(element) => {\n copyTrigger = element;\n }}\n class=\"k2b-ste-copy-menu\"\n variant=\"ghost\"\n size=\"sm\"\n label={t().copyTable}\n onMouseDown={preserveSelection}\n >\n <i class=\"ti ti-copy\" aria-hidden=\"true\" />\n {t().copyTable}\n </Dropdown.Trigger>\n </Show>\n </Dropdown>\n )}\n </Show>\n );\n const runFormat = (command: keyof typeof commands) => {\n if (!editor || blocked()) return;\n if (cell()?.isConnected && isInlineCommand(command) && formatActiveCell(editor.view, command)) return;\n commands[command](editor.view);\n };\n const checkFocus = () => {\n if (disposed) return;\n // A host toolbar sits outside this root. Native popover focus moves before\n // its toggle callback, but Dropdown already exposes its synchronous state.\n if (\n menuOpen ||\n [...tableTriggers, copyTrigger].some((trigger) => trigger?.isConnected && trigger.getAttribute(\"aria-expanded\") === \"true\")\n )\n return;\n const focused = document.activeElement;\n setLocalSource(focused instanceof HTMLElement && !!focused.closest(\".k2b-ste-table-source\"));\n const inside = focused instanceof Node && root.contains(focused);\n setActive(inside);\n if (!inside || focused === editor?.view.contentDOM) setCell(undefined);\n else if (!cell()?.isConnected) setCell(undefined);\n };\n const formatMenu = (command: \"heading\" | \"code\") => (\n <Dropdown\n phone=\"sheet\"\n label={t()[command]}\n disabled={blocked() || (command === \"heading\" && !!cell())}\n onOpenChange={menuChange}\n onClose={menuClose}\n items={\n command === \"heading\"\n ? [\n {\n items: ([\"heading1\", \"heading2\", \"heading3\"] as const).map((name, index) => ({\n label: t()[name],\n icon: `ti ti-h-${index + 1}`,\n action: () => runFormat(name),\n })),\n },\n ]\n : [\n { label: t().inlineCode, icon: \"ti ti-code\", action: () => runFormat(\"code\") },\n { label: t().codeBlock, icon: \"ti ti-source-code\", disabled: !!cell(), action: () => runFormat(\"codeBlock\") },\n { label: t().strike, icon: \"ti ti-strikethrough\", trailing: <Kbd keys=\"mod+shift+x\" />, action: () => runFormat(\"strike\") },\n ]\n }\n >\n <Dropdown.Trigger class=\"k2b-ste-tool\" variant=\"ghost\" size=\"sm\" iconOnly label={t()[command]} onMouseDown={preserveSelection}>\n <i class={`ti ti-${command}`} aria-hidden=\"true\" />\n </Dropdown.Trigger>\n </Dropdown>\n );\n const selectMode = (next: TextEditorMode) => {\n // Returning from the source view removes its switch; keyboard focus then moves into the text.\n const restoreEditorFocus =\n !!editor?.view.contentDOM.contains(document.activeElement) ||\n !!root.querySelector(\".k2b-ste-views\")?.contains(document.activeElement);\n menuOpen = false;\n setCell(undefined);\n setMode(next);\n props.onModeChange?.(next);\n if (restoreEditorFocus) queueMicrotask(() => editor?.view.focus());\n };\n onMount(() => {\n setPlatform(keyboardPlatform());\n const menuMedia = window.matchMedia(\"(max-width: 47.999rem)\");\n const menuViewport = () => setPhoneMenu(menuMedia.matches);\n menuViewport();\n menuMedia.addEventListener(\"change\", menuViewport);\n onCleanup(() => menuMedia.removeEventListener(\"change\", menuViewport));\n // A standalone editor has no binding history; collaboration supplies its own instead.\n const nativeHistory = !props.host?.undo;\n editor = createTextEditor({\n parent: mount,\n doc: props.initialValue,\n mode: mode(),\n label: props.label,\n readOnly: props.readOnly,\n placeholder: props.placeholder,\n presentation: props.presentation,\n extensions: [\n nativeHistory ? [history(), keymap.of(historyKeymap)] : [],\n formatLabels.of({\n get link() {\n return t().link;\n },\n column: (column) => t().column(column),\n }),\n EditorView.updateListener.of((update) => {\n schedulePosition();\n if (update.docChanged) queueMicrotask(() => setDocumentRevision((revision) => revision + 1));\n }),\n // The caret never moves under a toolbar that stays at the top of a scrolling host.\n EditorView.scrollMargins.of(() => {\n const slot = root.querySelector<HTMLElement>(\".k2b-ste-toolbar-slot\");\n return slot && getComputedStyle(slot).position === \"sticky\" ? { top: slot.offsetHeight } : null;\n }),\n props.extensions ?? [],\n props.dictation ? dictationExtension() : [],\n ],\n host: {\n ...props.host,\n undo: props.host?.undo ?? (() => editor && undo(editor.view)),\n redo: props.host?.redo ?? (() => editor && redo(editor.view)),\n boundary: props.host?.boundary ?? (() => {}),\n cellLabel: (row, column, name) => t().cellLabel({ row, column, name }),\n actionLabel: (name) => t()[name],\n sourceLabels: () => ({\n edit: t().editMarkdown,\n valid: t().markdownValid,\n invalid: t().markdownInvalid,\n changed: t().markdownChanged,\n structural: t().markdownStructural,\n applying: t().applyingTable,\n applyFailed: t().markdownApplyFailed,\n done: phoneMenu() ? t().done : t().showTable,\n discard: t().discardMarkdown,\n continue: t().continueMarkdown,\n line: t().markdownLine,\n separator: (header, separator) => t().markdownSeparator({ header, separator }),\n extra: t().markdownExtra,\n complete: t().completeColumns,\n }),\n maxLength: props.maxLength,\n maxPasteCells: props.maxPasteCells ?? 2000,\n onRecovery: (text) => {\n if (disposed) detachedRecovery(text);\n else setRecovery((previous) => (previous === undefined ? text : `${previous}\\n\\n${text}`));\n },\n onError: (code) => setNotice({ message: t()[code] }),\n },\n onChange: (text) => {\n props.onChange?.(text);\n queueMicrotask(updateCheck);\n },\n onDroppedImages: (count, files) => {\n if (props.onDroppedImages?.(count, files) !== true) setNotice({ message: t().imageHint, images: true });\n },\n });\n const focus = (event: Event) => {\n if (!(event instanceof CustomEvent) || !(event.detail.cell instanceof HTMLElement)) return;\n setActive(true);\n setCell(event.detail.cell);\n positionMenu();\n };\n const structureAnnouncement = (event: Event) => {\n if (!(event instanceof CustomEvent)) return;\n const detail: unknown = event.detail;\n if (\n detail &&\n typeof detail === \"object\" &&\n \"rows\" in detail &&\n \"columns\" in detail &&\n typeof detail.rows === \"number\" &&\n typeof detail.columns === \"number\"\n )\n setAnnouncement(t().tableChanged({ rows: detail.rows, columns: detail.columns }));\n };\n const focusChange = () => queueMicrotask(checkFocus);\n let pointerCheck: ReturnType<typeof setTimeout> | undefined;\n const pointer = (event: PointerEvent) => {\n if (event.target instanceof Node && root.contains(event.target)) setActive(true);\n // After the press moved focus: a host toolbar control that keeps focus in the cell keeps it active.\n else if (!menuOpen) {\n clearTimeout(pointerCheck);\n pointerCheck = setTimeout(checkFocus);\n }\n };\n // A grip opens its row's or column's menu below itself; right-click opens\n // at the pointer and a key below the cell. Focus returns to the cell.\n const keyboardMenu = (event: Event) => {\n if (menuBlocked() || menuOpen || !(event instanceof CustomEvent) || !(event.detail.cell instanceof HTMLElement)) return;\n const target: HTMLElement = event.detail.cell;\n const opener = event.detail.anchor instanceof HTMLElement ? event.detail.anchor : undefined;\n const kind: MenuScope = event.detail.scope === \"row\" || event.detail.scope === \"column\" ? event.detail.scope : \"cell\";\n const { x, y } = event.detail;\n let anchor: DropdownAnchor = opener ?? target;\n if (!opener && typeof x === \"number\" && typeof y === \"number\") {\n // Keep the pointer's place inside the cell, so the menu follows it while the page scrolls.\n const start = target.getBoundingClientRect();\n anchor = {\n getBoundingClientRect: () => {\n const box = target.getBoundingClientRect();\n const left = box.left + x - start.left;\n const top = box.top + y - start.top;\n return { left, top, right: left, bottom: top };\n },\n };\n }\n grip = opener;\n setScope(kind);\n focus(event);\n // Focus returns to the menu's cell as it closes; moving a row or column moves that cell.\n queueMicrotask(() => {\n if (!disposed && cell()?.isConnected) openCellMenu?.(anchor, () => cell());\n });\n };\n const mutations = new MutationObserver(schedulePosition);\n mutations.observe(mount, { childList: true, subtree: true, characterData: true });\n const resize = new ResizeObserver(schedulePosition);\n resize.observe(mount);\n // Safari blurs a contenteditable on mouse-down without focusing the radio.\n // Keep the caret and phone toolbar stationary until the view switch runs.\n const viewMouseDown = (event: MouseEvent) => {\n if (event.target instanceof Element && event.target.closest(\".k2b-ste-views\")) event.preventDefault();\n };\n root.addEventListener(\"mousedown\", viewMouseDown);\n document.addEventListener(\"focusin\", focusChange);\n document.addEventListener(\"pointerdown\", pointer);\n document.addEventListener(\"pointerdown\", pressBesideMenu, true);\n root.addEventListener(\"k2b-ste-table-structure\", structureAnnouncement);\n root.addEventListener(\"k2b-ste-cell-focus\", focus);\n root.addEventListener(\"k2b-ste-cell-blur\", focusChange);\n root.addEventListener(\"k2b-ste-cell-menu\", keyboardMenu);\n window.addEventListener(\"scroll\", schedulePosition, true);\n window.addEventListener(\"resize\", schedulePosition);\n const viewport = window.visualViewport;\n const keyboard = () =>\n root.style.setProperty(\n \"--k2b-ste-keyboard\",\n `${Math.max(0, window.innerHeight - (viewport?.height ?? window.innerHeight) - (viewport?.offsetTop ?? 0))}px`,\n );\n viewport?.addEventListener(\"resize\", keyboard);\n viewport?.addEventListener(\"scroll\", keyboard);\n keyboard();\n setReady(true);\n updateCheck();\n props.onReady?.(editor, {\n tableActive: () => mode() === \"formatted\" && !!cell()?.isConnected,\n TableMenu: (trigger) => menu(trigger),\n formatCell: (format) => !!editor && !blocked() && !!cell()?.isConnected && formatActiveCell(editor.view, format),\n notify: (message) => setNotice({ message }),\n });\n onCleanup(() => {\n clearTimeout(pointerCheck);\n mutations.disconnect();\n resize.disconnect();\n cancelAnimationFrame(frame);\n root.removeEventListener(\"mousedown\", viewMouseDown);\n document.removeEventListener(\"focusin\", focusChange);\n document.removeEventListener(\"pointerdown\", pointer);\n document.removeEventListener(\"pointerdown\", pressBesideMenu, true);\n swallow?.abort();\n root.removeEventListener(\"k2b-ste-table-structure\", structureAnnouncement);\n root.removeEventListener(\"k2b-ste-cell-focus\", focus);\n root.removeEventListener(\"k2b-ste-cell-blur\", focusChange);\n root.removeEventListener(\"k2b-ste-cell-menu\", keyboardMenu);\n window.removeEventListener(\"scroll\", schedulePosition, true);\n window.removeEventListener(\"resize\", schedulePosition);\n viewport?.removeEventListener(\"resize\", keyboard);\n viewport?.removeEventListener(\"scroll\", keyboard);\n editor?.destroy();\n });\n });\n createEffect(() => {\n if (props.mode !== undefined) setMode(props.mode);\n });\n createEffect(() => {\n if (ready()) {\n const next = mode();\n // Rendering the grid consults reactive host availability. Those reads\n // must not turn a history notification into a nested mode reconfigure.\n untrack(() => {\n menuOpen = false;\n setCell(undefined);\n editor?.setMode(next);\n updateCheck();\n });\n }\n });\n createEffect(() => {\n const label = props.label;\n if (ready()) untrack(() => editor?.setLabel(label));\n });\n createEffect(() => {\n const readOnly = !!props.readOnly || !!props.loading || recovery() !== undefined;\n if (ready()) untrack(() => editor?.setReadOnly(readOnly));\n });\n createEffect(() => {\n documentRevision();\n const disabled = blocked() || unavailable();\n if (ready())\n root.querySelectorAll<HTMLButtonElement>(\".k2b-ste-addColumn\").forEach((button) => {\n button.disabled = disabled;\n });\n });\n return (\n <div\n ref={root}\n class={`k2b-text-editor ${props.class ?? \"\"}`}\n data-mode={mode()}\n data-readonly={props.readOnly ? \"true\" : undefined}\n data-active={active() ? \"true\" : undefined}\n aria-busy={props.loading || !ready()}\n >\n <span class=\"k2b-ste-announcement\" role=\"status\" aria-live=\"polite\" aria-atomic=\"true\">\n {announcement()}\n </span>\n <Show when={(status() !== undefined && status() !== null && status() !== false) || check()}>\n <div class=\"k2b-ste-status\" role=\"status\">\n <span>{status()}</span>\n <Show when={check()}>\n <span class=\"k2b-ste-check\" title={missingSeparator() ? t().checkSeparatorDetail : t().checkTableDetail}>\n <i class=\"ti ti-alert-triangle\" aria-hidden=\"true\" />\n {t().checkTable}\n </span>\n <Button\n size=\"sm\"\n variant=\"ghost\"\n disabled={blocked() || (!missingSeparator() && unavailable())}\n hidden={props.readOnly}\n tooltip={missingSeparator() ? t().checkSeparatorDetail : unavailable() ? t().structureUnavailable : t().checkTableDetail}\n onMouseDown={preserveSelection}\n onClick={() => {\n if (!editor) return;\n if (missingSeparator()) {\n selectMode(\"source\");\n queueMicrotask(() => editor?.view.focus());\n return;\n }\n const table = findTables(editor.view.state.doc.toString()).find((table) =>\n table.lines.some((row) => row.cells.length > table.columns),\n );\n if (table) runTableAction(editor.view, table.from, 0, 0, \"completeColumns\");\n }}\n >\n {missingSeparator() ? t().reviewMarkdown : t().completeColumns}\n </Button>\n </Show>\n </div>\n </Show>\n <Show when={!props.readOnly && mode() !== \"plain\" && props.toolbar !== false}>\n <div class=\"k2b-ste-toolbar-slot\">\n <Toolbar class=\"k2b-ste-toolbar\" label={t().formatting}>\n <Show when={dictating()}>\n <DictationBar dictation={dictation} />\n </Show>\n <For each={dictating() ? [] : [toolbar.slice(0, 3), toolbar.slice(3, 6), toolbar.slice(6)]}>\n {(group) => (\n <Toolbar.Group class=\"k2b-ste-tool-group\">\n <For each={group}>\n {([command, icon]) =>\n command === \"heading\" || command === \"code\" ? (\n formatMenu(command)\n ) : (\n <Show\n when={command === \"table\" && mode() === \"formatted\" && cell()?.isConnected}\n fallback={\n <IconButton\n class=\"k2b-ste-tool\"\n variant=\"ghost\"\n size=\"sm\"\n label={t()[command]}\n tooltip={\n shortcuts[command]\n ? `${t()[command]} (${formatShortcut(shortcuts[command] ?? \"\", { platform: platform(), locale: locale() }).label})`\n : t()[command]\n }\n disabled={blocked() || (!!cell() && !inlineCommands.has(command) && command !== \"table\")}\n onMouseDown={preserveSelection}\n onClick={() => runFormat(command)}\n >\n <i class={`ti ti-${icon}`} aria-hidden=\"true\" />\n </IconButton>\n }\n >\n {menu()}\n </Show>\n )\n }\n </For>\n </Toolbar.Group>\n )}\n </For>\n {/* Editing is always formatted. Only a source view reached through the table check offers the way back. */}\n <Show when={mode() === \"source\" && !dictating()}>\n <SegmentedControl\n class=\"k2b-ste-views\"\n size=\"sm\"\n ariaLabel={t().view}\n value=\"source\"\n options={[\n { value: \"formatted\", label: t().formatted, icon: \"ti ti-typography\" },\n { value: \"source\", label: t().source, icon: \"ti ti-markdown\" },\n ]}\n onValueChange={selectMode}\n />\n </Show>\n <Show when={props.dictation && !dictating()}>\n <DictationButton dictation={dictation} class=\"k2b-ste-tool k2b-ste-dictate\" />\n </Show>\n </Toolbar>\n </div>\n </Show>\n <Show when={props.loading || !ready()}>\n <div class=\"k2b-ste-loading\" role=\"status\" aria-label={t().loading}>\n <For each={[82, 100, 68, 0, 96, 74]}>\n {(width) => (\n <div>\n <span style={{ width: `${width}%` }} />\n </div>\n )}\n </For>\n </div>\n </Show>\n <div ref={mount} class={props.presentation ? \"k2b-ste-app-host\" : \"k2b-ste-host\"} hidden={props.loading || !ready()} />\n <div class=\"k2b-ste-floating-menu\" style={menuPosition()}>\n {cellMenu()}\n </div>\n <div role=\"status\" aria-live=\"polite\" aria-atomic=\"true\">\n <Show when={notice() || recovery() !== undefined}>\n <div class=\"k2b-ste-notice\">\n <div class=\"k2b-ste-notice-content\">\n <Show when={notice()}>\n <Show when={notice()?.images && props.onAttachImages} fallback={<span>{notice()?.message}</span>}>\n <Button size=\"sm\" variant=\"ghost\" disabled={blocked()} onClick={() => props.onAttachImages?.()}>\n {notice()?.message}\n </Button>\n </Show>\n </Show>\n <Show when={recovery() !== undefined}>\n <label class=\"k2b-ste-recovery-label\">\n {t().recoveredInput}\n <textarea class=\"k2b-ste-recovery\" readOnly value={recovery()} />\n </label>\n <Button\n size=\"sm\"\n variant=\"ghost\"\n onClick={() => {\n setRecovery(undefined);\n if (notice()?.message === t().cellRemoved) setNotice(undefined);\n }}\n >\n {t().discardRecovery}\n </Button>\n </Show>\n </div>\n <Show when={notice()}>\n <IconButton size=\"sm\" variant=\"ghost\" label={t().dismiss} onClick={() => setNotice(undefined)}>\n <i class=\"ti ti-x\" aria-hidden=\"true\" />\n </IconButton>\n </Show>\n </div>\n </Show>\n </div>\n </div>\n );\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -486,6 +486,11 @@ function DropdownRoot(props) {
|
|
|
486
486
|
let origin;
|
|
487
487
|
const originElement = () => typeof origin === "function" ? origin() : origin;
|
|
488
488
|
let menuRef;
|
|
489
|
+
/**
|
|
490
|
+
* Whether the popover shows, as `open` and the toggle events left it. A menu closed before its opening toggle event
|
|
491
|
+
* arrives gets one event from "closed" to "closed"; this still reports that close to the owner.
|
|
492
|
+
*/
|
|
493
|
+
let shown = false;
|
|
489
494
|
let triggerRing = true;
|
|
490
495
|
let mounted = false;
|
|
491
496
|
/** Where a key on the trigger asked the focus to go; a controlled menu opens later, in its owner's update. */
|
|
@@ -541,6 +546,7 @@ function DropdownRoot(props) {
|
|
|
541
546
|
// A lazy menu's entries exist before it shows, so it places and focuses them as any other.
|
|
542
547
|
setEntriesShown(true);
|
|
543
548
|
menuRef.showPopover();
|
|
549
|
+
shown = true;
|
|
544
550
|
// The toggle event arrives a task later; expose the open state before focus moves into the menu.
|
|
545
551
|
setInternalOpen(true);
|
|
546
552
|
attachViewportListeners();
|