@openeditor/ui 0.0.51 → 0.0.53
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/README.md +1 -0
- package/dist/index.d.ts +21 -3
- package/dist/index.js +106 -7
- package/dist/index.js.map +1 -1
- package/package.json +13 -5
package/README.md
CHANGED
|
@@ -8,6 +8,7 @@ Optional styled UI components for OpenEditor.
|
|
|
8
8
|
- `OpenEditorSlashMenu` for the default slash menu UI
|
|
9
9
|
- `OpenEditorSelectionBubble` for inline formatting UI
|
|
10
10
|
- `OpenEditorTableMenu` for selection-aware row, column, header, cell, and table actions
|
|
11
|
+
- `OpenEditorEmojiPicker` and the default emoji-picker provider
|
|
11
12
|
- `OpenEditorButton`, `OpenEditorToggle`, `OpenEditorToggleGroup`, and `OpenEditorInput` as Base UI-backed app primitives
|
|
12
13
|
- `OpenEditorContent` and `useOpenEditorController` re-exported from `@openeditor/react`
|
|
13
14
|
|
package/dist/index.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import * as react from 'react';
|
|
2
|
-
import {
|
|
2
|
+
import { ReactNode, CSSProperties, RefObject } from 'react';
|
|
3
3
|
import { OpenEditorController, OpenEditorReactProps, OpenEditorTheme, OpenEditorBlockMenuResolver, OpenEditorBlockMenuSession, OpenEditorSlashMenuItem } from '@openeditor/react';
|
|
4
4
|
export { OpenEditorBlockRef, OpenEditorContent, OpenEditorController, OpenEditorReactProps, OpenEditorSlashMenuIcon, OpenEditorSlashMenuIconProps, OpenEditorSlashMenuItem, OpenEditorTheme, OpenEditorThemeProvider, OpenEditorThemeStyle, OpenEditorThemeToken, createOpenEditorThemeStyle, openEditorThemeTokenNames, useOpenEditorController } from '@openeditor/react';
|
|
5
|
-
|
|
5
|
+
import { Locale } from 'frimousse';
|
|
6
6
|
import { Button } from '@base-ui/react/button';
|
|
7
7
|
import { Input } from '@base-ui/react/input';
|
|
8
8
|
import { Toggle } from '@base-ui/react/toggle';
|
|
@@ -15,6 +15,21 @@ type OpenEditorTableMenuProps = {
|
|
|
15
15
|
};
|
|
16
16
|
declare const OpenEditorTableMenu: ({ controller, className, container, }: OpenEditorTableMenuProps) => react.JSX.Element | null;
|
|
17
17
|
|
|
18
|
+
type OpenEditorEmojiPickerProps = {
|
|
19
|
+
emoji: string;
|
|
20
|
+
onEmojiSelect: (emoji: string) => void;
|
|
21
|
+
label: string;
|
|
22
|
+
disabled?: boolean;
|
|
23
|
+
container?: HTMLElement | null;
|
|
24
|
+
className?: string;
|
|
25
|
+
children?: ReactNode;
|
|
26
|
+
locale?: Locale;
|
|
27
|
+
emojibaseUrl?: string;
|
|
28
|
+
emojiVersion?: number;
|
|
29
|
+
popupStyle?: CSSProperties;
|
|
30
|
+
};
|
|
31
|
+
declare const OpenEditorEmojiPicker: ({ emoji, onEmojiSelect, label, disabled, container, className, children, locale, emojibaseUrl, emojiVersion, popupStyle, }: OpenEditorEmojiPickerProps) => react.JSX.Element;
|
|
32
|
+
|
|
18
33
|
type OpenEditorSlashMenuProps = {
|
|
19
34
|
controller: OpenEditorController;
|
|
20
35
|
className?: string;
|
|
@@ -41,6 +56,9 @@ type OpenEditorButtonProps = Button.Props;
|
|
|
41
56
|
type OpenEditorToggleProps<Value extends string = string> = Toggle.Props<Value>;
|
|
42
57
|
type OpenEditorToggleGroupProps<Value extends string = string> = ToggleGroup.Props<Value>;
|
|
43
58
|
type OpenEditorInputProps = Input.Props;
|
|
59
|
+
declare const OpenEditorEmojiPickerProvider: ({ children }: {
|
|
60
|
+
children: ReactNode;
|
|
61
|
+
}) => react.JSX.Element;
|
|
44
62
|
declare const OpenEditorButton: ({ className, ...props }: OpenEditorButtonProps) => react.JSX.Element;
|
|
45
63
|
declare const OpenEditorToggle: <Value extends string = string>({ className, ...props }: OpenEditorToggleProps<Value>) => react.JSX.Element;
|
|
46
64
|
declare const OpenEditorToggleGroup: <Value extends string = string>({ className, ...props }: OpenEditorToggleGroupProps<Value>) => react.JSX.Element;
|
|
@@ -60,4 +78,4 @@ declare const OpenEditorResolvedBlockMenuView: ({ resolver, session, anchor, ari
|
|
|
60
78
|
declare const OpenEditorBlockMenu: ({ controller, className, container, }: OpenEditorBlockMenuProps) => react.JSX.Element | null;
|
|
61
79
|
declare const OpenEditor: ({ className, contentClassName, overlayContainer, theme, ...props }: OpenEditorProps) => react.JSX.Element;
|
|
62
80
|
|
|
63
|
-
export { OpenEditor, OpenEditorBlockMenu, type OpenEditorBlockMenuProps, OpenEditorButton, type OpenEditorButtonProps, OpenEditorInput, type OpenEditorInputProps, type OpenEditorProps, OpenEditorResolvedBlockMenuView, type OpenEditorResolvedBlockMenuViewProps, OpenEditorSelectionBubble, type OpenEditorSelectionBubbleProps, OpenEditorSlashMenu, type OpenEditorSlashMenuProps, OpenEditorTableMenu, type OpenEditorTableMenuProps, OpenEditorToggle, OpenEditorToggleGroup, type OpenEditorToggleGroupProps, type OpenEditorToggleProps };
|
|
81
|
+
export { OpenEditor, OpenEditorBlockMenu, type OpenEditorBlockMenuProps, OpenEditorButton, type OpenEditorButtonProps, OpenEditorEmojiPicker, type OpenEditorEmojiPickerProps, OpenEditorEmojiPickerProvider, OpenEditorInput, type OpenEditorInputProps, type OpenEditorProps, OpenEditorResolvedBlockMenuView, type OpenEditorResolvedBlockMenuViewProps, OpenEditorSelectionBubble, type OpenEditorSelectionBubbleProps, OpenEditorSlashMenu, type OpenEditorSlashMenuProps, OpenEditorTableMenu, type OpenEditorTableMenuProps, OpenEditorToggle, OpenEditorToggleGroup, type OpenEditorToggleGroupProps, type OpenEditorToggleProps };
|
package/dist/index.js
CHANGED
|
@@ -1,18 +1,19 @@
|
|
|
1
1
|
import { Menu } from '@base-ui/react/menu';
|
|
2
2
|
import { Toolbar } from '@base-ui/react/toolbar';
|
|
3
|
-
import { useOpenEditorThemeStyle, OpenEditorTableBubbleMenu, OpenEditorBubbleMenu, sortSlashMenuItems, getDefaultSlashMenuItems, useOpenEditorBlockInteraction, OpenEditorBlockDragHandle, useOpenEditorController, OpenEditorThemeProvider, OpenEditorContent } from '@openeditor/react';
|
|
3
|
+
import { useOpenEditorThemeStyle, OpenEditorTableBubbleMenu, OpenEditorEmojiPickerSlotProvider, OpenEditorBubbleMenu, sortSlashMenuItems, getDefaultSlashMenuItems, useOpenEditorBlockInteraction, OpenEditorBlockDragHandle, useOpenEditorController, OpenEditorThemeProvider, OpenEditorContent } from '@openeditor/react';
|
|
4
4
|
export { OpenEditorContent, OpenEditorThemeProvider, createOpenEditorThemeStyle, openEditorThemeTokenNames, useOpenEditorController } from '@openeditor/react';
|
|
5
5
|
import { HugeiconsIcon } from '@hugeicons/react';
|
|
6
6
|
import { openEditorIcons } from '@openeditor/icons';
|
|
7
7
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
8
|
-
|
|
8
|
+
import { Popover } from '@base-ui/react/popover';
|
|
9
|
+
import { OPENEDITOR_EMOJI_DATA_URL } from '@openeditor/document/emoji';
|
|
10
|
+
import { EmojiPicker } from 'frimousse';
|
|
11
|
+
import { useState, useRef, useEffect, useId, useMemo, useSyncExternalStore, Fragment as Fragment$1, useCallback } from 'react';
|
|
9
12
|
import { Button } from '@base-ui/react/button';
|
|
10
13
|
import { Dialog } from '@base-ui/react/dialog';
|
|
11
14
|
import { Input } from '@base-ui/react/input';
|
|
12
|
-
import { Popover } from '@base-ui/react/popover';
|
|
13
15
|
import { Toggle } from '@base-ui/react/toggle';
|
|
14
16
|
import { ToggleGroup } from '@base-ui/react/toggle-group';
|
|
15
|
-
import { useState, useRef, useEffect, useId, useMemo, useSyncExternalStore, Fragment as Fragment$1, useCallback } from 'react';
|
|
16
17
|
|
|
17
18
|
// src/table-menu.tsx
|
|
18
19
|
var runTableCommandOnMouseDown = (event, controller, command) => {
|
|
@@ -173,6 +174,104 @@ var OpenEditorTableMenu = ({
|
|
|
173
174
|
}
|
|
174
175
|
);
|
|
175
176
|
};
|
|
177
|
+
var emojiListComponents = {
|
|
178
|
+
CategoryHeader: ({ category, ...props }) => /* @__PURE__ */ jsx("div", { className: "oe-emoji-category", ...props, children: category.label }),
|
|
179
|
+
Row: ({ children, ...props }) => /* @__PURE__ */ jsx("div", { className: "oe-emoji-row", ...props, children }),
|
|
180
|
+
Emoji: ({ emoji, onClick, ...props }) => /* @__PURE__ */ jsx(
|
|
181
|
+
"button",
|
|
182
|
+
{
|
|
183
|
+
...props,
|
|
184
|
+
"aria-label": emoji.label,
|
|
185
|
+
className: "oe-emoji-option",
|
|
186
|
+
onClick: (event) => {
|
|
187
|
+
event.stopPropagation();
|
|
188
|
+
onClick?.(event);
|
|
189
|
+
},
|
|
190
|
+
type: "button",
|
|
191
|
+
children: emoji.emoji
|
|
192
|
+
}
|
|
193
|
+
)
|
|
194
|
+
};
|
|
195
|
+
var OpenEditorEmojiPicker = ({
|
|
196
|
+
emoji,
|
|
197
|
+
onEmojiSelect,
|
|
198
|
+
label,
|
|
199
|
+
disabled = false,
|
|
200
|
+
container,
|
|
201
|
+
className,
|
|
202
|
+
children,
|
|
203
|
+
locale,
|
|
204
|
+
emojibaseUrl = OPENEDITOR_EMOJI_DATA_URL,
|
|
205
|
+
emojiVersion,
|
|
206
|
+
popupStyle
|
|
207
|
+
}) => {
|
|
208
|
+
const [open, setOpen] = useState(false);
|
|
209
|
+
return /* @__PURE__ */ jsxs(Popover.Root, { open, onOpenChange: setOpen, modal: false, children: [
|
|
210
|
+
/* @__PURE__ */ jsx(
|
|
211
|
+
Popover.Trigger,
|
|
212
|
+
{
|
|
213
|
+
"aria-label": label,
|
|
214
|
+
className: ["oe-emoji-trigger", className].filter(Boolean).join(" "),
|
|
215
|
+
disabled,
|
|
216
|
+
type: "button",
|
|
217
|
+
children: children ?? /* @__PURE__ */ jsx("span", { "aria-hidden": "true", children: emoji })
|
|
218
|
+
}
|
|
219
|
+
),
|
|
220
|
+
/* @__PURE__ */ jsx(Popover.Portal, { container, children: /* @__PURE__ */ jsx(
|
|
221
|
+
Popover.Positioner,
|
|
222
|
+
{
|
|
223
|
+
align: "start",
|
|
224
|
+
collisionPadding: 12,
|
|
225
|
+
positionMethod: "fixed",
|
|
226
|
+
side: "bottom",
|
|
227
|
+
sideOffset: 8,
|
|
228
|
+
children: /* @__PURE__ */ jsx(Popover.Popup, { className: "oe-emoji-popover", style: popupStyle, children: /* @__PURE__ */ jsxs(
|
|
229
|
+
EmojiPicker.Root,
|
|
230
|
+
{
|
|
231
|
+
className: "oe-emoji-picker",
|
|
232
|
+
emojibaseUrl,
|
|
233
|
+
emojiVersion,
|
|
234
|
+
locale,
|
|
235
|
+
onEmojiSelect: (selection) => {
|
|
236
|
+
onEmojiSelect(selection.emoji);
|
|
237
|
+
setOpen(false);
|
|
238
|
+
},
|
|
239
|
+
children: [
|
|
240
|
+
/* @__PURE__ */ jsx(
|
|
241
|
+
EmojiPicker.Search,
|
|
242
|
+
{
|
|
243
|
+
"aria-label": "Search emoji",
|
|
244
|
+
autoFocus: true,
|
|
245
|
+
className: "oe-emoji-search",
|
|
246
|
+
placeholder: "Search emoji\u2026"
|
|
247
|
+
}
|
|
248
|
+
),
|
|
249
|
+
/* @__PURE__ */ jsxs(EmojiPicker.Viewport, { className: "oe-emoji-viewport", children: [
|
|
250
|
+
/* @__PURE__ */ jsx(EmojiPicker.Loading, { className: "oe-emoji-state", children: "Loading emoji\u2026" }),
|
|
251
|
+
/* @__PURE__ */ jsx(EmojiPicker.Empty, { className: "oe-emoji-state", children: "No emoji found." }),
|
|
252
|
+
/* @__PURE__ */ jsx(
|
|
253
|
+
EmojiPicker.List,
|
|
254
|
+
{
|
|
255
|
+
className: "oe-emoji-list",
|
|
256
|
+
components: emojiListComponents
|
|
257
|
+
}
|
|
258
|
+
)
|
|
259
|
+
] }),
|
|
260
|
+
/* @__PURE__ */ jsxs("footer", { className: "oe-emoji-footer", children: [
|
|
261
|
+
/* @__PURE__ */ jsx(EmojiPicker.ActiveEmoji, { children: ({ emoji: active }) => active ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
262
|
+
/* @__PURE__ */ jsx("span", { "aria-hidden": "true", children: active.emoji }),
|
|
263
|
+
/* @__PURE__ */ jsx("span", { children: active.label })
|
|
264
|
+
] }) : "Choose an emoji" }),
|
|
265
|
+
/* @__PURE__ */ jsx(EmojiPicker.SkinToneSelector, { "aria-label": "Change skin tone" })
|
|
266
|
+
] })
|
|
267
|
+
]
|
|
268
|
+
}
|
|
269
|
+
) })
|
|
270
|
+
}
|
|
271
|
+
) })
|
|
272
|
+
] });
|
|
273
|
+
};
|
|
274
|
+
var OpenEditorEmojiPickerProvider = ({ children }) => /* @__PURE__ */ jsx(OpenEditorEmojiPickerSlotProvider, { renderer: OpenEditorEmojiPicker, children });
|
|
176
275
|
var headingDefinitions = [
|
|
177
276
|
{ level: 1, icon: openEditorIcons.heading1 },
|
|
178
277
|
{ level: 2, icon: openEditorIcons.heading2 },
|
|
@@ -1109,16 +1208,16 @@ var OpenEditor = ({
|
|
|
1109
1208
|
...props
|
|
1110
1209
|
}) => {
|
|
1111
1210
|
const controller = useOpenEditorController(props);
|
|
1112
|
-
const editor = /* @__PURE__ */ jsxs("div", { className, children: [
|
|
1211
|
+
const editor = /* @__PURE__ */ jsx(OpenEditorEmojiPickerProvider, { children: /* @__PURE__ */ jsxs("div", { className, children: [
|
|
1113
1212
|
/* @__PURE__ */ jsx(OpenEditorContent, { controller, className: contentClassName }),
|
|
1114
1213
|
/* @__PURE__ */ jsx(OpenEditorBlockMenu, { controller, container: overlayContainer }),
|
|
1115
1214
|
/* @__PURE__ */ jsx(OpenEditorSelectionBubble, { controller, container: overlayContainer }),
|
|
1116
1215
|
/* @__PURE__ */ jsx(OpenEditorTableMenu, { controller, container: overlayContainer }),
|
|
1117
1216
|
/* @__PURE__ */ jsx(OpenEditorSlashMenu, { controller, container: overlayContainer })
|
|
1118
|
-
] });
|
|
1217
|
+
] }) });
|
|
1119
1218
|
return theme ? /* @__PURE__ */ jsx(OpenEditorThemeProvider, { theme, children: editor }) : editor;
|
|
1120
1219
|
};
|
|
1121
1220
|
|
|
1122
|
-
export { OpenEditor, OpenEditorBlockMenu, OpenEditorButton, OpenEditorInput, OpenEditorResolvedBlockMenuView, OpenEditorSelectionBubble, OpenEditorSlashMenu, OpenEditorTableMenu, OpenEditorToggle, OpenEditorToggleGroup };
|
|
1221
|
+
export { OpenEditor, OpenEditorBlockMenu, OpenEditorButton, OpenEditorEmojiPicker, OpenEditorEmojiPickerProvider, OpenEditorInput, OpenEditorResolvedBlockMenuView, OpenEditorSelectionBubble, OpenEditorSlashMenu, OpenEditorTableMenu, OpenEditorToggle, OpenEditorToggleGroup };
|
|
1123
1222
|
//# sourceMappingURL=index.js.map
|
|
1124
1223
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/table-menu.tsx","../src/index.tsx"],"names":["openEditorIcons","jsx","useOpenEditorThemeStyle","jsxs","HugeiconsIcon","Toolbar","Menu","Fragment","OpenEditorThemeProvider"],"mappings":"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","file":"index.js","sourcesContent":["import { Menu } from \"@base-ui/react/menu\";\nimport { Toolbar } from \"@base-ui/react/toolbar\";\nimport {\n OpenEditorTableBubbleMenu,\n useOpenEditorThemeStyle,\n type OpenEditorController,\n type OpenEditorTableCommand,\n type OpenEditorTableState,\n} from \"@openeditor/react\";\nimport { HugeiconsIcon } from \"@hugeicons/react\";\nimport { openEditorIcons, type OpenEditorIcon } from \"@openeditor/icons\";\nimport type { MouseEvent as ReactMouseEvent, ReactNode } from \"react\";\n\nexport type OpenEditorTableMenuProps = {\n controller: OpenEditorController;\n className?: string;\n container?: HTMLElement | null;\n};\n\ntype TableAction = {\n command: OpenEditorTableCommand;\n label: string;\n icon: OpenEditorIcon;\n danger?: boolean;\n};\n\nconst runTableCommandOnMouseDown = (\n event: ReactMouseEvent<HTMLElement>,\n controller: OpenEditorController,\n command: OpenEditorTableCommand,\n) => {\n if (event.button !== 0) return;\n event.preventDefault();\n controller.table.run(command);\n};\n\nconst runTableCommandOnKeyboardClick = (\n event: ReactMouseEvent<HTMLElement>,\n controller: OpenEditorController,\n command: OpenEditorTableCommand,\n) => {\n // Pointer activation already ran on mousedown, before a portaled menu can\n // blur and unmount its owning table bubble. Keyboard clicks have detail 0.\n if (event.detail === 0) controller.table.run(command);\n};\n\nconst TableActionMenu = ({\n controller,\n container,\n label,\n icon,\n actions,\n}: {\n controller: OpenEditorController;\n container?: HTMLElement | null;\n label: string;\n icon: OpenEditorIcon;\n actions: readonly TableAction[];\n}) => {\n const themeStyle = useOpenEditorThemeStyle();\n return (\n <Menu.Root modal={false}>\n <Menu.Trigger\n aria-label={`${label} actions`}\n className=\"oe-table-toolbar-trigger\"\n onMouseDown={(event) => event.preventDefault()}\n type=\"button\"\n >\n <HugeiconsIcon aria-hidden=\"true\" icon={icon} size={15} strokeWidth={2} />\n <span>{label}</span>\n <HugeiconsIcon aria-hidden=\"true\" icon={openEditorIcons.chevronDown} size={12} strokeWidth={2} />\n </Menu.Trigger>\n <Menu.Portal container={container}>\n <Menu.Positioner\n align=\"start\"\n collisionAvoidance={{ side: \"flip\", align: \"shift\", fallbackAxisSide: \"none\" }}\n collisionPadding={12}\n positionMethod=\"fixed\"\n side=\"bottom\"\n sideOffset={8}\n >\n <Menu.Popup aria-label={`${label} actions`} className=\"oe-table-action-menu\" style={themeStyle}>\n {actions.map((action) => (\n <Menu.Item\n className=\"oe-table-action-item\"\n data-danger={action.danger ? \"\" : undefined}\n disabled={!controller.table.can(action.command)}\n key={action.command}\n onClick={(event) => runTableCommandOnKeyboardClick(event, controller, action.command)}\n onMouseDown={(event) => runTableCommandOnMouseDown(event, controller, action.command)}\n >\n <HugeiconsIcon aria-hidden=\"true\" icon={action.icon} size={15} strokeWidth={2} />\n <span>{action.label}</span>\n </Menu.Item>\n ))}\n </Menu.Popup>\n </Menu.Positioner>\n </Menu.Portal>\n </Menu.Root>\n );\n};\n\nconst TableToolbarButton = ({\n active,\n children,\n controller,\n command,\n label,\n danger,\n}: {\n active?: boolean;\n children: ReactNode;\n controller: OpenEditorController;\n command: OpenEditorTableCommand;\n label: string;\n danger?: boolean;\n}) => (\n <Toolbar.Button\n aria-label={label}\n className=\"oe-table-toolbar-button\"\n data-active={active ? \"\" : undefined}\n data-danger={danger ? \"\" : undefined}\n disabled={!controller.table.can(command)}\n onClick={(event) => runTableCommandOnKeyboardClick(event, controller, command)}\n onMouseDown={(event) => runTableCommandOnMouseDown(event, controller, command)}\n title={label}\n type=\"button\"\n >\n {children}\n </Toolbar.Button>\n);\n\nconst rowActions: readonly TableAction[] = [\n { command: \"addRowBefore\", label: \"Insert row above\", icon: openEditorIcons.tableRowInsertBefore },\n { command: \"addRowAfter\", label: \"Insert row below\", icon: openEditorIcons.tableRowInsertAfter },\n { command: \"deleteRow\", label: \"Delete row\", icon: openEditorIcons.tableRowDelete, danger: true },\n];\n\nconst columnActions: readonly TableAction[] = [\n { command: \"addColumnBefore\", label: \"Insert column left\", icon: openEditorIcons.tableColumnInsertBefore },\n { command: \"addColumnAfter\", label: \"Insert column right\", icon: openEditorIcons.tableColumnInsertAfter },\n { command: \"deleteColumn\", label: \"Delete column\", icon: openEditorIcons.tableColumnDelete, danger: true },\n];\n\nconst TableToolbar = ({\n controller,\n container,\n state,\n}: {\n controller: OpenEditorController;\n container?: HTMLElement | null;\n state: OpenEditorTableState;\n}) => (\n <div onMouseDown={(event) => event.preventDefault()}>\n <Toolbar.Root aria-label=\"Table editing\" className=\"oe-table-toolbar\">\n <TableActionMenu\n actions={rowActions}\n container={container}\n controller={controller}\n icon={openEditorIcons.tableRow}\n label=\"Row\"\n />\n <TableActionMenu\n actions={columnActions}\n container={container}\n controller={controller}\n icon={openEditorIcons.tableColumn}\n label=\"Column\"\n />\n <span aria-hidden=\"true\" className=\"oe-table-toolbar-separator\" />\n <TableToolbarButton\n active={state.headerRow}\n command=\"toggleHeaderRow\"\n controller={controller}\n label={state.headerRow ? \"Remove header row\" : \"Make first row a header\"}\n >\n <HugeiconsIcon aria-hidden=\"true\" icon={openEditorIcons.tableHeaderRow} size={15} strokeWidth={2} />\n </TableToolbarButton>\n <TableToolbarButton\n active={state.headerColumn}\n command=\"toggleHeaderColumn\"\n controller={controller}\n label={state.headerColumn ? \"Remove header column\" : \"Make first column a header\"}\n >\n <HugeiconsIcon aria-hidden=\"true\" icon={openEditorIcons.tableHeaderColumn} size={15} strokeWidth={2} />\n </TableToolbarButton>\n {state.canSplitCell ? (\n <TableToolbarButton command=\"splitCell\" controller={controller} label=\"Split cell\">\n <HugeiconsIcon aria-hidden=\"true\" icon={openEditorIcons.splitCells} size={15} strokeWidth={2} />\n </TableToolbarButton>\n ) : (\n <TableToolbarButton command=\"mergeCells\" controller={controller} label=\"Merge selected cells\">\n <HugeiconsIcon aria-hidden=\"true\" icon={openEditorIcons.mergeCells} size={15} strokeWidth={2} />\n </TableToolbarButton>\n )}\n <TableToolbarButton command=\"deleteTable\" controller={controller} danger label=\"Delete table\">\n <HugeiconsIcon aria-hidden=\"true\" icon={openEditorIcons.delete} size={15} strokeWidth={2} />\n </TableToolbarButton>\n </Toolbar.Root>\n </div>\n);\n\nexport const OpenEditorTableMenu = ({\n controller,\n className = \"oe-table-menu\",\n container,\n}: OpenEditorTableMenuProps) => {\n const themeStyle = useOpenEditorThemeStyle();\n if (!controller.ready) return null;\n return (\n <OpenEditorTableBubbleMenu\n className={className}\n container={container}\n controller={controller}\n style={themeStyle}\n >\n {(state) => <TableToolbar container={container} controller={controller} state={state} />}\n </OpenEditorTableBubbleMenu>\n );\n};\n","import \"./styles.css\";\nimport { OpenEditorTableMenu } from \"./table-menu\";\nexport { OpenEditorTableMenu, type OpenEditorTableMenuProps } from \"./table-menu\";\nexport {\n createOpenEditorThemeStyle,\n OpenEditorThemeProvider,\n openEditorThemeTokenNames,\n type OpenEditorTheme,\n type OpenEditorThemeStyle,\n type OpenEditorThemeToken,\n} from \"@openeditor/react\";\nexport { OpenEditorEmojiPicker, type OpenEditorEmojiPickerProps } from \"@openeditor/emoji\";\nimport { Button, type Button as BaseButton } from \"@base-ui/react/button\";\nimport { Dialog } from \"@base-ui/react/dialog\";\nimport { Input, type Input as BaseInput } from \"@base-ui/react/input\";\nimport { Menu } from \"@base-ui/react/menu\";\nimport { Popover } from \"@base-ui/react/popover\";\nimport { Toggle, type Toggle as BaseToggle } from \"@base-ui/react/toggle\";\nimport { ToggleGroup, type ToggleGroup as BaseToggleGroup } from \"@base-ui/react/toggle-group\";\nimport { Toolbar } from \"@base-ui/react/toolbar\";\nimport { HugeiconsIcon } from \"@hugeicons/react\";\nimport { openEditorIcons, type OpenEditorIcon } from \"@openeditor/icons\";\nimport {\n getDefaultSlashMenuItems,\n OpenEditorBubbleMenu,\n OpenEditorBlockDragHandle,\n OpenEditorContent,\n sortSlashMenuItems,\n useOpenEditorBlockInteraction,\n useOpenEditorController,\n type OpenEditorController,\n type OpenEditorBlockRef,\n type OpenEditorBlockMenuSession,\n type OpenEditorBlockMenuResolver,\n type OpenEditorResolvedBlockMenu,\n type OpenEditorResolvedBlockMenuAction,\n type OpenEditorResolvedBlockMenuItem,\n type OpenEditorResolvedBlockMenuPanel,\n type OpenEditorReactProps,\n type OpenEditorSlashMenuGroup,\n type OpenEditorSlashMenuItem,\n OpenEditorThemeProvider,\n useOpenEditorThemeStyle,\n type OpenEditorTheme,\n} from \"@openeditor/react\";\nimport {\n Fragment,\n useCallback,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n useSyncExternalStore,\n type FormEvent,\n type CSSProperties,\n type ReactNode,\n type RefObject,\n} from \"react\";\n\nexport type OpenEditorSlashMenuProps = {\n controller: OpenEditorController;\n className?: string;\n items?: readonly OpenEditorSlashMenuItem[];\n container?: HTMLElement | null;\n};\n\nexport type OpenEditorSelectionBubbleProps = {\n controller: OpenEditorController;\n className?: string;\n container?: HTMLElement | null;\n};\n\nexport type OpenEditorBlockMenuProps = {\n controller: OpenEditorController;\n className?: string;\n container?: HTMLElement | null;\n};\n\nexport type OpenEditorProps = OpenEditorReactProps & {\n className?: string;\n contentClassName?: string;\n overlayContainer?: HTMLElement | null;\n theme?: OpenEditorTheme;\n};\n\nexport type OpenEditorButtonProps = BaseButton.Props;\nexport type OpenEditorToggleProps<Value extends string = string> = BaseToggle.Props<Value>;\nexport type OpenEditorToggleGroupProps<Value extends string = string> = BaseToggleGroup.Props<Value>;\nexport type OpenEditorInputProps = BaseInput.Props;\n\ntype OverlayRect = {\n left: number;\n right: number;\n top: number;\n bottom: number;\n width: number;\n height: number;\n};\n\ntype AnchoredOverlayState = {\n left: number;\n top: number;\n anchorRect?: OverlayRect;\n};\n\ntype VirtualAnchor = {\n contextElement?: Element;\n getBoundingClientRect: () => DOMRect;\n};\n\ntype SelectionAction = {\n key: string;\n label: string;\n active: boolean;\n icon: OpenEditorIcon;\n run: () => void;\n};\n\ntype BlockTransformAction = {\n key: string;\n label: string;\n icon: OpenEditorIcon;\n isActive: (controller: OpenEditorController) => boolean;\n run: (controller: OpenEditorController) => void;\n};\n\nconst headingDefinitions = [\n { level: 1, icon: openEditorIcons.heading1 },\n { level: 2, icon: openEditorIcons.heading2 },\n { level: 3, icon: openEditorIcons.heading3 },\n { level: 4, icon: openEditorIcons.heading4 },\n { level: 5, icon: openEditorIcons.heading5 },\n { level: 6, icon: openEditorIcons.heading6 },\n] as const;\n\nconst blockTransformActions: BlockTransformAction[] = [\n {\n key: \"paragraph\",\n label: \"Text\",\n icon: openEditorIcons.text,\n isActive: (controller) => controller.isActive(\"paragraph\"),\n run: (controller) => controller.setParagraph(),\n },\n ...headingDefinitions.map(({ level, icon }) => ({\n key: `heading${level}`,\n label: `Heading ${level}`,\n icon,\n isActive: (controller: OpenEditorController) => controller.isActive(\"heading\", { level }),\n run: (controller: OpenEditorController) => controller.toggleHeading(level),\n })),\n {\n key: \"bulletList\",\n label: \"Bullet List\",\n icon: openEditorIcons.bulletList,\n isActive: (controller) => controller.isActive(\"bulletList\"),\n run: (controller) => controller.toggleBulletList(),\n },\n {\n key: \"orderedList\",\n label: \"Numbered List\",\n icon: openEditorIcons.orderedList,\n isActive: (controller) => controller.isActive(\"orderedList\"),\n run: (controller) => controller.toggleOrderedList(),\n },\n {\n key: \"taskList\",\n label: \"Task List\",\n icon: openEditorIcons.taskList,\n isActive: (controller) => controller.isActive(\"taskList\"),\n run: (controller) => controller.toggleTaskList(),\n },\n {\n key: \"toggleList\",\n label: \"Toggle List\",\n icon: openEditorIcons.toggleList,\n isActive: (controller) => controller.isActive(\"toggleList\"),\n run: (controller) => controller.toggleToggleList(),\n },\n {\n key: \"blockquote\",\n label: \"Quote\",\n icon: openEditorIcons.blockquote,\n isActive: (controller) => controller.isActive(\"blockquote\"),\n run: (controller) => controller.toggleBlockquote(),\n },\n {\n key: \"callout\",\n label: \"Callout\",\n icon: openEditorIcons.callout,\n isActive: (controller) => controller.isActive(\"callout\"),\n run: (controller) => controller.toggleCallout(),\n },\n {\n key: \"codeBlock\",\n label: \"Code\",\n icon: openEditorIcons.codeBlock,\n isActive: (controller) => controller.isActive(\"codeBlock\"),\n run: (controller) => controller.toggleCodeBlock(),\n },\n];\n\nconst getActiveBlockTransform = (controller: OpenEditorController) =>\n [\n \"callout\",\n \"toggleList\",\n \"taskList\",\n \"bulletList\",\n \"orderedList\",\n \"blockquote\",\n \"codeBlock\",\n \"heading1\",\n \"heading2\",\n \"heading3\",\n \"heading4\",\n \"heading5\",\n \"heading6\",\n \"paragraph\",\n ]\n .map((key) => blockTransformActions.find((action) => action.key === key))\n .find((action) => action?.isActive(controller)) ?? blockTransformActions[0];\n\nconst isHeadingKey = (key: string) => /^heading[1-6]$/.test(key);\n\nconst slashMenuIcons: Record<string, OpenEditorIcon> = {\n paragraph: openEditorIcons.text,\n ...Object.fromEntries(headingDefinitions.map(({ level, icon }) => [`heading${level}`, icon])),\n bulletList: openEditorIcons.bulletList,\n orderedList: openEditorIcons.orderedList,\n taskList: openEditorIcons.taskList,\n blockquote: openEditorIcons.blockquote,\n codeBlock: openEditorIcons.codeBlock,\n divider: openEditorIcons.divider,\n image: openEditorIcons.image,\n columns: openEditorIcons.columns,\n table: openEditorIcons.table,\n toggleList: openEditorIcons.toggleList,\n callout: openEditorIcons.callout,\n diagram: openEditorIcons.diagram,\n page: openEditorIcons.page,\n attachment: openEditorIcons.attachment,\n};\n\nconst isSlashMenuGroup = (item: OpenEditorSlashMenuItem): item is OpenEditorSlashMenuGroup =>\n \"children\" in item;\nconst getSlashMenuIcon = (item: OpenEditorSlashMenuItem) =>\n slashMenuIcons[item.key] ?? (isSlashMenuGroup(item) ? openEditorIcons.heading1 : openEditorIcons.text);\nconst slashItemMatches = (item: OpenEditorSlashMenuItem, query: string): boolean => {\n const normalized = query.toLowerCase();\n const ownText = `${item.label} ${item.group} ${item.keywords?.join(\" \") ?? \"\"}`.toLowerCase();\n return ownText.includes(normalized)\n || (isSlashMenuGroup(item) && item.children.some((child) => slashItemMatches(child, query)));\n};\n\nconst pointRect = (left: number, top: number): OverlayRect => ({\n left,\n right: left,\n top,\n bottom: top,\n width: 0,\n height: 0,\n});\n\nconst getAnchorRect = (state: AnchoredOverlayState) => state.anchorRect ?? pointRect(state.left, state.top);\n\nconst toVirtualAnchor = (\n state: AnchoredOverlayState,\n contextElement?: Element | null,\n resolveRect?: () => OverlayRect | null,\n): VirtualAnchor => ({\n contextElement: contextElement ?? undefined,\n getBoundingClientRect: () => {\n const rect = resolveRect?.() ?? getAnchorRect(state);\n return {\n ...rect,\n x: rect.left,\n y: rect.top,\n toJSON: () => rect,\n } as DOMRect;\n },\n});\n\nconst cx = (...classes: Array<string | false | null | undefined>) => classes.filter(Boolean).join(\" \");\n\nconst withBaseClass = <State,>(baseClassName: string, className?: string | ((state: State) => string | undefined)) => {\n if (typeof className === \"function\") {\n return (state: State) => cx(baseClassName, className(state));\n }\n\n return cx(baseClassName, className);\n};\n\nexport const OpenEditorButton = ({ className, ...props }: OpenEditorButtonProps) => (\n <Button className={withBaseClass<BaseButton.State>(\"oe-button\", className)} {...props} />\n);\n\nexport const OpenEditorToggle = <Value extends string = string>({\n className,\n ...props\n}: OpenEditorToggleProps<Value>) => (\n <Toggle<Value> className={withBaseClass<BaseToggle.State>(\"oe-button oe-toggle\", className)} {...props} />\n);\n\nexport const OpenEditorToggleGroup = <Value extends string = string>({\n className,\n ...props\n}: OpenEditorToggleGroupProps<Value>) => (\n <ToggleGroup<Value> className={withBaseClass<BaseToggleGroup.State>(\"oe-toggle-group\", className)} {...props} />\n);\n\nexport const OpenEditorInput = ({ className, ...props }: OpenEditorInputProps) => (\n <Input className={withBaseClass<BaseInput.State>(\"oe-input\", className)} {...props} />\n);\n\nconst OpenEditorLinkDialog = ({\n controller,\n open,\n onOpenChange,\n}: {\n controller: OpenEditorController;\n open: boolean;\n onOpenChange: (open: boolean) => void;\n}) => {\n const themeStyle = useOpenEditorThemeStyle();\n const [url, setUrl] = useState(\"\");\n\n useEffect(() => {\n if (open) {\n setUrl(controller.getActiveLink() ?? \"https://\");\n }\n }, [open]);\n\n const submitLink = (event: FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n controller.setLink(url.trim());\n onOpenChange(false);\n };\n\n return (\n <Dialog.Root open={open} onOpenChange={onOpenChange}>\n <Dialog.Portal>\n <Dialog.Backdrop className=\"oe-dialog-backdrop\" />\n <Dialog.Popup className=\"oe-dialog\" initialFocus={false} style={themeStyle}>\n <Dialog.Close className=\"oe-dialog-close\" aria-label=\"Close link dialog\">\n <HugeiconsIcon aria-hidden=\"true\" icon={openEditorIcons.close} size={15} strokeWidth={2} />\n </Dialog.Close>\n <form className=\"oe-link-dialog-form\" onSubmit={submitLink}>\n <Dialog.Title className=\"oe-dialog-title\">Link</Dialog.Title>\n <OpenEditorInput\n aria-label=\"Link URL\"\n autoComplete=\"url\"\n inputMode=\"url\"\n value={url}\n onValueChange={setUrl}\n placeholder=\"https://example.com\"\n />\n <div className=\"oe-dialog-actions\">\n <OpenEditorButton\n type=\"button\"\n className=\"oe-dialog-button oe-dialog-button-remove\"\n onClick={() => {\n controller.setLink(null);\n onOpenChange(false);\n }}\n >\n Remove\n </OpenEditorButton>\n <OpenEditorButton type=\"submit\" className=\"oe-dialog-button oe-dialog-button-primary\">Apply</OpenEditorButton>\n </div>\n </form>\n </Dialog.Popup>\n </Dialog.Portal>\n </Dialog.Root>\n );\n};\n\nconst SelectionButton = ({\n action,\n}: {\n action: SelectionAction;\n}) => (\n <Toolbar.Button\n type=\"button\"\n aria-label={action.label}\n aria-pressed={action.active}\n className=\"oe-toolbar-button\"\n data-active={action.active ? \"\" : undefined}\n onClick={action.run}\n >\n <HugeiconsIcon aria-hidden=\"true\" className=\"oe-toolbar-icon\" icon={action.icon} size={15} strokeWidth={2} />\n </Toolbar.Button>\n);\n\nconst SelectionBlockTransformMenu = ({\n controller,\n container,\n}: {\n controller: OpenEditorController;\n container?: HTMLElement | null;\n}) => {\n const themeStyle = useOpenEditorThemeStyle();\n const activeAction = getActiveBlockTransform(controller);\n const [menuOpen, setMenuOpen] = useState(false);\n const [headingPanelOpen, setHeadingPanelOpen] = useState(false);\n const headingActions = blockTransformActions.filter((action) => isHeadingKey(action.key));\n\n return (\n <Menu.Root\n modal={false}\n open={menuOpen}\n onOpenChange={(open) => {\n setMenuOpen(open);\n if (!open) setHeadingPanelOpen(false);\n }}\n >\n <Menu.Trigger\n type=\"button\"\n aria-label={`${activeAction.label}. Turn into`}\n className=\"oe-toolbar-button oe-block-transform-trigger\"\n onMouseDown={(event) => event.preventDefault()}\n >\n <HugeiconsIcon aria-hidden=\"true\" className=\"oe-toolbar-icon\" icon={activeAction.icon} size={15} strokeWidth={2} />\n <span className=\"oe-block-transform-trigger-label\">{activeAction.label}</span>\n <HugeiconsIcon aria-hidden=\"true\" className=\"oe-toolbar-chevron\" icon={openEditorIcons.chevronDown} size={12} strokeWidth={2} />\n </Menu.Trigger>\n <Menu.Portal container={container}>\n <Menu.Positioner\n positionMethod=\"fixed\"\n side=\"bottom\"\n align=\"start\"\n sideOffset={8}\n collisionPadding={12}\n collisionAvoidance={{ side: \"flip\", align: \"shift\", fallbackAxisSide: \"none\" }}\n >\n <Menu.Popup\n className=\"oe-cascade-menu\"\n style={themeStyle}\n onMouseLeave={() => setHeadingPanelOpen(false)}\n >\n <div className=\"oe-block-transform-menu oe-cascade-panel\">\n {blockTransformActions.map((action) => {\n if (isHeadingKey(action.key)) {\n if (action.key !== \"heading1\") return null;\n return (\n <Menu.Item\n closeOnClick={false}\n key=\"heading\"\n className=\"oe-block-transform-item\"\n data-active={isHeadingKey(activeAction.key) ? \"\" : undefined}\n label=\"Heading\"\n onClick={() => setHeadingPanelOpen(true)}\n onFocus={() => setHeadingPanelOpen(true)}\n onMouseEnter={() => setHeadingPanelOpen(true)}\n >\n <HugeiconsIcon aria-hidden=\"true\" className=\"oe-block-transform-icon\" icon={openEditorIcons.heading1} size={15} strokeWidth={2} />\n <span>Heading</span>\n <HugeiconsIcon aria-hidden=\"true\" className=\"oe-submenu-chevron\" icon={openEditorIcons.chevronRight} size={13} strokeWidth={2} />\n </Menu.Item>\n );\n }\n\n const active = action.key === activeAction.key;\n return (\n <Menu.Item\n key={action.key}\n className=\"oe-block-transform-item\"\n data-active={active ? \"\" : undefined}\n label={action.label}\n onMouseEnter={() => setHeadingPanelOpen(false)}\n onClick={() => { if (!active) action.run(controller); }}\n >\n <HugeiconsIcon aria-hidden=\"true\" className=\"oe-block-transform-icon\" icon={action.icon} size={15} strokeWidth={2} />\n <span>{action.label}</span>\n </Menu.Item>\n );\n })}\n </div>\n {headingPanelOpen ? (\n <div className=\"oe-block-transform-menu oe-block-transform-submenu oe-cascade-panel\">\n {headingActions.map((headingAction) => {\n const headingActive = headingAction.key === activeAction.key;\n return (\n <button\n type=\"button\"\n key={headingAction.key}\n className=\"oe-block-transform-item\"\n data-active={headingActive ? \"\" : undefined}\n onMouseDown={(event) => event.preventDefault()}\n onClick={() => {\n if (!headingActive) headingAction.run(controller);\n setMenuOpen(false);\n }}\n role=\"menuitem\"\n >\n <HugeiconsIcon aria-hidden=\"true\" className=\"oe-block-transform-icon\" icon={headingAction.icon} size={15} strokeWidth={2} />\n <span>{headingAction.label}</span>\n </button>\n );\n })}\n </div>\n ) : null}\n </Menu.Popup>\n </Menu.Positioner>\n </Menu.Portal>\n </Menu.Root>\n );\n};\n\nexport const OpenEditorSelectionBubble = ({\n controller,\n className = \"oe-bubble-menu\",\n container,\n}: OpenEditorSelectionBubbleProps) => {\n const themeStyle = useOpenEditorThemeStyle();\n const rootElement = controller.getRootElement();\n const [linkDialogOpen, setLinkDialogOpen] = useState(false);\n const toolbarRef = useRef<HTMLDivElement | null>(null);\n\n const actions: SelectionAction[] = controller.ready\n ? [\n {\n key: \"bold\",\n label: \"Bold\",\n active: controller.isActive(\"bold\"),\n icon: openEditorIcons.bold,\n run: () => controller.toggleBold(),\n },\n {\n key: \"italic\",\n label: \"Italic\",\n active: controller.isActive(\"italic\"),\n icon: openEditorIcons.italic,\n run: () => controller.toggleItalic(),\n },\n {\n key: \"underline\",\n label: \"Underline\",\n active: controller.isActive(\"underline\"),\n icon: openEditorIcons.underline,\n run: () => controller.toggleUnderline(),\n },\n {\n key: \"strike\",\n label: \"Strikethrough\",\n active: controller.isActive(\"strike\"),\n icon: openEditorIcons.strike,\n run: () => controller.toggleStrike(),\n },\n {\n key: \"code\",\n label: \"Inline code\",\n active: controller.isActive(\"code\"),\n icon: openEditorIcons.code,\n run: () => controller.toggleInlineCode(),\n },\n ]\n : [];\n\n useEffect(() => {\n if (!rootElement) return;\n const focusToolbar = (event: globalThis.KeyboardEvent) => {\n if (!(event.altKey && event.key === \"F10\")) return;\n const toolbar = toolbarRef.current;\n const menu = toolbar?.parentElement?.parentElement;\n if (!toolbar || !menu || getComputedStyle(menu).visibility === \"hidden\") return;\n const firstControl = toolbarRef.current?.querySelector<HTMLElement>(\n \"button:not(:disabled), [href], [tabindex]:not([tabindex='-1'])\",\n );\n if (!firstControl) return;\n event.preventDefault();\n firstControl.focus();\n };\n rootElement.addEventListener(\"keydown\", focusToolbar, true);\n return () => rootElement.removeEventListener(\"keydown\", focusToolbar, true);\n }, [rootElement]);\n\n if (!controller.ready) return null;\n\n return (\n <>\n <OpenEditorBubbleMenu\n className={className}\n container={container}\n controller={controller}\n style={themeStyle}\n >\n <div\n onKeyDown={(event) => {\n if (event.key !== \"Escape\") return;\n event.preventDefault();\n controller.focus();\n }}\n onMouseDown={(event) => event.preventDefault()}\n >\n <Toolbar.Root\n className=\"oe-selection-toolbar\"\n aria-label=\"Selection formatting\"\n ref={toolbarRef}\n >\n <SelectionBlockTransformMenu controller={controller} container={container} />\n {actions.map((action) => (\n <SelectionButton key={action.key} action={action} />\n ))}\n <Toolbar.Button\n type=\"button\"\n aria-label=\"Link\"\n className=\"oe-toolbar-button\"\n data-active={controller.isActive(\"link\") ? \"\" : undefined}\n onClick={() => setLinkDialogOpen(true)}\n >\n <HugeiconsIcon aria-hidden=\"true\" className=\"oe-toolbar-icon\" icon={openEditorIcons.link} size={15} strokeWidth={2} />\n </Toolbar.Button>\n </Toolbar.Root>\n </div>\n </OpenEditorBubbleMenu>\n <OpenEditorLinkDialog\n controller={controller}\n open={linkDialogOpen}\n onOpenChange={setLinkDialogOpen}\n />\n </>\n );\n};\n\nexport const OpenEditorSlashMenu = ({\n controller,\n className = \"oe-slash-menu\",\n items,\n container,\n}: OpenEditorSlashMenuProps) => {\n const themeStyle = useOpenEditorThemeStyle();\n const slashMenuItems = sortSlashMenuItems(items ?? getDefaultSlashMenuItems(controller));\n const slashState = controller.slashState;\n const [selectedIndex, setSelectedIndex] = useState(0);\n const [openGroupKey, setOpenGroupKey] = useState<string | null>(null);\n const selectedIndexRef = useRef(0);\n const menuId = useId();\n const menuRef = useRef<HTMLDivElement | null>(null);\n const anchor = useMemo(\n () =>\n slashState\n ? toVirtualAnchor(\n slashState,\n controller.getRootElement(),\n () => controller.getPositionRect(slashState.to),\n )\n : null,\n [controller, slashState],\n );\n const matchingItems = slashState\n ? slashMenuItems.filter((item) => slashItemMatches(item, slashState.query))\n : [];\n const openGroup = matchingItems.find(\n (item): item is OpenEditorSlashMenuGroup => isSlashMenuGroup(item) && item.key === openGroupKey,\n );\n const matchingChildren = openGroup\n ? openGroup.children.filter((item) => slashItemMatches(item, slashState?.query ?? \"\"))\n : [];\n const activeItems: readonly OpenEditorSlashMenuItem[] = openGroup ? matchingChildren : matchingItems;\n\n selectedIndexRef.current = selectedIndex;\n\n useEffect(() => {\n selectedIndexRef.current = 0;\n setSelectedIndex(0);\n setOpenGroupKey(null);\n }, [slashState?.from, slashState?.query]);\n\n useEffect(() => {\n if (selectedIndex < activeItems.length) return;\n setSelectedIndex(Math.max(0, activeItems.length - 1));\n }, [activeItems.length, selectedIndex]);\n\n useEffect(() => {\n if (slashState && matchingItems.length === 0) controller.dismissSlashMenu();\n }, [controller, matchingItems.length, slashState]);\n\n useEffect(() => {\n const editorElement = controller.getRootElement();\n if (!slashState || !editorElement) return;\n const previous = {\n controls: editorElement.getAttribute(\"aria-controls\"),\n expanded: editorElement.getAttribute(\"aria-expanded\"),\n activeDescendant: editorElement.getAttribute(\"aria-activedescendant\"),\n };\n const selectedId = activeItems[selectedIndex]\n ? `${menuId}-${openGroup ? openGroup.key : \"root\"}-option-${selectedIndex}`\n : null;\n editorElement.setAttribute(\"aria-controls\", menuId);\n editorElement.setAttribute(\"aria-expanded\", \"true\");\n if (selectedId) editorElement.setAttribute(\"aria-activedescendant\", selectedId);\n else editorElement.removeAttribute(\"aria-activedescendant\");\n\n const handleKeyDown = (event: globalThis.KeyboardEvent) => {\n if (event.isComposing) return false;\n let nextIndex: number | null = null;\n const currentIndex = selectedIndexRef.current;\n if (event.key === \"ArrowDown\") nextIndex = (currentIndex + 1) % Math.max(1, activeItems.length);\n if (event.key === \"ArrowUp\") nextIndex = (currentIndex - 1 + Math.max(1, activeItems.length)) % Math.max(1, activeItems.length);\n if (event.key === \"Home\" || event.key === \"PageUp\") nextIndex = 0;\n if (event.key === \"End\" || event.key === \"PageDown\") nextIndex = Math.max(0, activeItems.length - 1);\n if (nextIndex !== null) {\n event.preventDefault();\n selectedIndexRef.current = nextIndex;\n setSelectedIndex(nextIndex);\n return true;\n }\n if ((event.key === \"ArrowLeft\" || event.key === \"Escape\") && openGroup) {\n event.preventDefault();\n setOpenGroupKey(null);\n selectedIndexRef.current = 0;\n setSelectedIndex(0);\n return true;\n }\n if (event.key === \"ArrowRight\") {\n const item = activeItems[selectedIndexRef.current];\n if (!item || !isSlashMenuGroup(item)) return false;\n event.preventDefault();\n setOpenGroupKey(item.key);\n selectedIndexRef.current = 0;\n setSelectedIndex(0);\n return true;\n }\n if (event.key === \"Enter\") {\n const item = activeItems[selectedIndexRef.current];\n if (!item) return false;\n event.preventDefault();\n event.stopPropagation();\n if (isSlashMenuGroup(item)) {\n setOpenGroupKey(item.key);\n selectedIndexRef.current = 0;\n setSelectedIndex(0);\n return true;\n }\n item.execute({ controller, range: { from: slashState.from, to: slashState.to } });\n return true;\n }\n return false;\n };\n const unregisterKeyboardHandler = controller.registerSlashMenuKeyboardHandler(handleKeyDown);\n return () => {\n unregisterKeyboardHandler();\n for (const [attribute, value] of [\n [\"aria-controls\", previous.controls],\n [\"aria-expanded\", previous.expanded],\n [\"aria-activedescendant\", previous.activeDescendant],\n ] as const) {\n if (value === null) editorElement.removeAttribute(attribute);\n else editorElement.setAttribute(attribute, value);\n }\n };\n }, [activeItems, controller, menuId, openGroup, selectedIndex, slashState]);\n\n useEffect(() => {\n menuRef.current\n ?.querySelector<HTMLElement>(\"[data-highlighted]\")\n ?.scrollIntoView({ block: \"nearest\" });\n }, [selectedIndex]);\n\n if (!slashState || matchingItems.length === 0) return null;\n\n return (\n <Popover.Root open modal={false}>\n <Popover.Portal container={container}>\n <Popover.Positioner\n anchor={anchor}\n className=\"oe-anchored-overlay-positioner\"\n positionMethod=\"fixed\"\n side=\"bottom\"\n align=\"start\"\n sideOffset={8}\n collisionPadding={12}\n collisionAvoidance={{ side: \"flip\", align: \"shift\", fallbackAxisSide: \"none\" }}\n >\n <Popover.Popup\n className=\"oe-cascade-menu\"\n finalFocus={false}\n style={themeStyle}\n initialFocus={false}\n >\n <div\n aria-label=\"Insert block\"\n className={`${className} oe-cascade-panel`}\n id={menuId}\n ref={menuRef}\n role=\"listbox\"\n >\n <div className=\"oe-slash-menu-scroll\">\n {matchingItems.map((item, index) => {\n const CustomIcon = item.icon;\n const icon = getSlashMenuIcon(item);\n\n return (\n <button\n aria-selected={!openGroup && index === selectedIndex}\n type=\"button\"\n key={item.key}\n className=\"oe-slash-menu-item\"\n data-highlighted={!openGroup && index === selectedIndex ? \"\" : undefined}\n id={`${menuId}-root-option-${index}`}\n onMouseEnter={() => {\n selectedIndexRef.current = index;\n setSelectedIndex(index);\n setOpenGroupKey(isSlashMenuGroup(item) ? item.key : null);\n }}\n onMouseDown={(event) => event.preventDefault()}\n onClick={() => {\n if (isSlashMenuGroup(item)) {\n setOpenGroupKey(item.key);\n selectedIndexRef.current = 0;\n setSelectedIndex(0);\n } else {\n item.execute({ controller, range: { from: slashState.from, to: slashState.to } });\n }\n }}\n role=\"option\"\n >\n {CustomIcon\n ? <CustomIcon aria-hidden={true} className=\"oe-slash-menu-icon\" size={15} strokeWidth={2} />\n : <HugeiconsIcon aria-hidden=\"true\" className=\"oe-slash-menu-icon\" icon={icon} size={15} strokeWidth={2} />}\n <span>{item.label}</span>\n {isSlashMenuGroup(item)\n ? <HugeiconsIcon aria-hidden=\"true\" className=\"oe-submenu-chevron\" icon={openEditorIcons.chevronRight} size={13} strokeWidth={2} />\n : null}\n </button>\n );\n })}\n </div>\n </div>\n {openGroup ? (\n <div\n aria-label={openGroup.label}\n className={`${className} oe-cascade-panel oe-block-transform-submenu`}\n role=\"listbox\"\n >\n <div className=\"oe-slash-menu-scroll\">\n {matchingChildren.map((item, index) => {\n const CustomIcon = item.icon;\n const icon = getSlashMenuIcon(item);\n return (\n <button\n aria-selected={index === selectedIndex}\n className=\"oe-slash-menu-item\"\n data-highlighted={index === selectedIndex ? \"\" : undefined}\n id={`${menuId}-${openGroup.key}-option-${index}`}\n key={item.key}\n onClick={() => item.execute({ controller, range: { from: slashState.from, to: slashState.to } })}\n onMouseDown={(event) => event.preventDefault()}\n onMouseEnter={() => {\n selectedIndexRef.current = index;\n setSelectedIndex(index);\n }}\n role=\"option\"\n type=\"button\"\n >\n {CustomIcon\n ? <CustomIcon aria-hidden={true} className=\"oe-slash-menu-icon\" size={15} strokeWidth={2} />\n : <HugeiconsIcon aria-hidden=\"true\" className=\"oe-slash-menu-icon\" icon={icon} size={15} strokeWidth={2} />}\n <span>{item.label}</span>\n </button>\n );\n })}\n </div>\n </div>\n ) : null}\n </Popover.Popup>\n </Popover.Positioner>\n </Popover.Portal>\n </Popover.Root>\n );\n};\n\nexport type OpenEditorResolvedBlockMenuViewProps = {\n\tresolver: OpenEditorBlockMenuResolver;\n\tsession: OpenEditorBlockMenuSession;\n\tanchor: HTMLElement | RefObject<HTMLElement | null> | null;\n\tariaLabel: string;\n\tcontainer?: HTMLElement | null;\n\tstyle?: CSSProperties;\n\ttrigger?: ReactNode;\n};\n\nconst BlockMenuIcon = ({ item }: { item: OpenEditorResolvedBlockMenuItem }) =>\n\titem.icon\n\t\t? <HugeiconsIcon aria-hidden=\"true\" icon={item.icon} size={15} strokeWidth={2} />\n\t\t: <span aria-hidden=\"true\" className=\"oe-block-menu-icon-placeholder\" />;\n\nconst BlockMenuAction = ({\n\taction,\n\tsession,\n}: {\n\taction: OpenEditorResolvedBlockMenuAction;\n\tsession: OpenEditorBlockMenuSession;\n}) => {\n\tconst snapshot = useSyncExternalStore(session.subscribe, session.getSnapshot, session.getSnapshot);\n\tconst pending = snapshot.pendingItemId === action.id;\n\treturn (\n\t\t<Menu.Item\n\t\t\taria-current={action.active || undefined}\n\t\t\taria-describedby={action.disabledReason ? `${action.id}-reason` : undefined}\n\t\t\tclassName=\"oe-block-menu-item\"\n\t\t\tdata-active={action.active ? \"\" : undefined}\n\t\t\tdata-danger={action.intent === \"danger\" ? \"\" : undefined}\n\t\t\tdisabled={action.disabled || Boolean(snapshot.pendingItemId)}\n\t\t\tlabel={action.label}\n\t\t\tonClick={() => { void session.run(action); }}\n\t\t>\n\t\t\t<BlockMenuIcon item={action} />\n\t\t\t<span>{pending ? `${action.label}…` : action.label}</span>\n\t\t\t{action.disabledReason ? <span className=\"oe-visually-hidden\" id={`${action.id}-reason`}>{action.disabledReason}</span> : null}\n\t\t</Menu.Item>\n\t);\n};\n\nconst BlockMenuPanel = ({\n\tcontainer,\n\titem,\n\ttarget,\n\tsession,\n\tstyle,\n}: {\n\tcontainer?: HTMLElement | null;\n\titem: OpenEditorResolvedBlockMenuPanel;\n\ttarget: OpenEditorResolvedBlockMenu[\"target\"];\n\tsession: OpenEditorBlockMenuSession;\n\tstyle?: CSSProperties;\n}) => {\n\tconst snapshot = useSyncExternalStore(session.subscribe, session.getSnapshot, session.getSnapshot);\n\tconst open = snapshot.open && snapshot.surface.type === \"panel\" && snapshot.surface.id === item.id;\n\tconst Panel = item.panel;\n\treturn (\n\t\t<Popover.Root\n\t\t\tmodal={false}\n\t\t\tonOpenChange={(nextOpen) => {\n\t\t\t\tif (nextOpen) session.openPanel(item.id);\n\t\t\t\telse if (open) session.closeSurface();\n\t\t\t}}\n\t\t\topen={open}\n\t\t>\n\t\t\t<Popover.Trigger\n\t\t\t\tdisabled={item.disabled}\n\t\t\t\tnativeButton={false}\n\t\t\t\trender={(triggerProps) => (\n\t\t\t\t\t<Menu.Item\n\t\t\t\t\t\t{...triggerProps}\n\t\t\t\t\t\taria-describedby={item.disabledReason ? `${item.id}-reason` : undefined}\n\t\t\t\t\t\tclassName=\"oe-block-menu-item\"\n\t\t\t\t\t\tcloseOnClick={false}\n\t\t\t\t\t\tlabel={item.label}\n\t\t\t\t\t\trole=\"menuitem\"\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<BlockMenuIcon item={item} />\n\t\t\t\t<span>{item.label}</span>\n\t\t\t\t{item.disabledReason ? <span className=\"oe-visually-hidden\" id={`${item.id}-reason`}>{item.disabledReason}</span> : null}\n\t\t\t</Popover.Trigger>\n\t\t\t<Popover.Portal container={container}>\n\t\t\t\t<Popover.Positioner\n\t\t\t\t\talign=\"start\"\n\t\t\t\t\tcollisionAvoidance={{ side: \"flip\", align: \"shift\", fallbackAxisSide: \"none\" }}\n\t\t\t\t\tcollisionPadding={12}\n\t\t\t\t\tpositionMethod=\"fixed\"\n\t\t\t\t\tside=\"right\"\n\t\t\t\t\tsideOffset={8}\n\t\t\t\t>\n\t\t\t\t\t<Popover.Popup aria-label={item.label} className=\"oe-block-menu-panel\" role=\"dialog\" style={style}>\n\t\t\t\t\t\t<Panel target={target} close={() => session.closeSurface()} />\n\t\t\t\t\t</Popover.Popup>\n\t\t\t\t</Popover.Positioner>\n\t\t\t</Popover.Portal>\n\t\t</Popover.Root>\n\t);\n};\n\nconst BlockMenuSubmenu = ({\n\tcontainer,\n\titem,\n\ttarget,\n\tsession,\n\tstyle,\n}: {\n\tcontainer?: HTMLElement | null;\n\titem: Extract<OpenEditorResolvedBlockMenuItem, { type: \"submenu\" }>;\n\ttarget: OpenEditorResolvedBlockMenu[\"target\"];\n\tsession: OpenEditorBlockMenuSession;\n\tstyle?: CSSProperties;\n}) => (\n\t<Menu.SubmenuRoot\n\t\tonOpenChange={(open) => { if (open) session.openSubmenu(item.id); else session.closeSurface(); }}\n\t>\n\t\t<Menu.SubmenuTrigger aria-describedby={item.disabledReason ? `${item.id}-reason` : undefined} className=\"oe-block-menu-item\" disabled={item.disabled} label={item.label}>\n\t\t\t<BlockMenuIcon item={item} />\n\t\t\t<span>{item.label}</span>\n\t\t\t{item.disabledReason ? <span className=\"oe-visually-hidden\" id={`${item.id}-reason`}>{item.disabledReason}</span> : null}\n\t\t\t<HugeiconsIcon aria-hidden=\"true\" className=\"oe-block-menu-chevron\" icon={openEditorIcons.chevronRight} size={13} strokeWidth={2} />\n\t\t</Menu.SubmenuTrigger>\n\t\t<Menu.Portal container={container}>\n\t\t\t<Menu.Positioner align=\"start\" collisionPadding={12} positionMethod=\"fixed\" side=\"right\" sideOffset={4}>\n\t\t\t\t<Menu.Popup aria-label={item.label} className=\"oe-block-menu\" style={style}>\n\t\t\t\t\t{item.children.map((child) => <BlockMenuItem container={container} item={child} key={child.id} session={session} style={style} target={target} />)}\n\t\t\t\t</Menu.Popup>\n\t\t\t</Menu.Positioner>\n\t\t</Menu.Portal>\n\t</Menu.SubmenuRoot>\n);\n\nconst BlockMenuItem = ({\n\tcontainer,\n\titem,\n\ttarget,\n\tsession,\n\tstyle,\n}: {\n\tcontainer?: HTMLElement | null;\n\titem: OpenEditorResolvedBlockMenuItem;\n\ttarget: OpenEditorResolvedBlockMenu[\"target\"];\n\tsession: OpenEditorBlockMenuSession;\n\tstyle?: CSSProperties;\n}) => {\n\tif (item.type === \"action\") return <BlockMenuAction action={item} session={session} />;\n\tif (item.type === \"panel\") return <BlockMenuPanel container={container} item={item} session={session} style={style} target={target} />;\n\treturn <BlockMenuSubmenu container={container} item={item} session={session} style={style} target={target} />;\n};\n\nexport const OpenEditorResolvedBlockMenuView = ({\n\tresolver,\n\tsession,\n\tanchor,\n\tariaLabel,\n\tcontainer,\n\tstyle,\n\ttrigger,\n}: OpenEditorResolvedBlockMenuViewProps) => {\n\tconst snapshot = useSyncExternalStore(session.subscribe, session.getSnapshot, session.getSnapshot);\n\tconst targetSnapshot = useSyncExternalStore(resolver.target.subscribe, resolver.target.getSnapshot, resolver.target.getSnapshot);\n\tconst menu = resolver.resolve();\n\tuseEffect(() => {\n\t\tif (snapshot.open && !targetSnapshot) session.close();\n\t}, [session, snapshot.open, targetSnapshot]);\n\treturn <Menu.Root\n\t\tmodal={false}\n\t\tonOpenChange={(open) => { if (!open) session.close(); }}\n\t\tonOpenChangeComplete={(open) => {\n\t\t\tif (open) return;\n\t\t\tconst anchorElement = anchor instanceof HTMLElement ? anchor : anchor && \"current\" in anchor ? anchor.current : null;\n\t\t\tanchorElement?.focus();\n\t\t}}\n\t\topen={snapshot.open}\n\t>\n\t\t{trigger}\n\t\t{snapshot.open ? <Menu.Portal container={container}>\n\t\t\t<Menu.Positioner\n\t\t\t\talign=\"start\"\n\t\t\t\tanchor={anchor}\n\t\t\t\tcollisionAvoidance={{ side: \"flip\", align: \"shift\", fallbackAxisSide: \"none\" }}\n\t\t\t\tcollisionPadding={12}\n\t\t\t\tpositionMethod=\"fixed\"\n\t\t\t\tside=\"bottom\"\n\t\t\t\tsideOffset={8}\n\t\t\t>\n\t\t\t\t<Menu.Popup aria-label={ariaLabel} className=\"oe-block-menu\" style={style}>\n\t\t\t\t\t{menu.sections.map((section, sectionIndex) => (\n\t\t\t\t\t\t<Fragment key={section.id}>\n\t\t\t\t\t\t\t{sectionIndex > 0 ? <Menu.Separator className=\"oe-block-menu-separator\" /> : null}\n\t\t\t\t\t\t\t{section.items.map((item) => <BlockMenuItem container={container} item={item} key={item.id} session={session} style={style} target={menu.target} />)}\n\t\t\t\t\t\t</Fragment>\n\t\t\t\t\t))}\n\t\t\t\t\t{snapshot.error ? <div aria-live=\"polite\" className=\"oe-block-menu-error\" role=\"status\">The action failed. Try again.</div> : null}\n\t\t\t\t</Menu.Popup>\n\t\t\t</Menu.Positioner>\n\t\t</Menu.Portal> : null}\n\t\t</Menu.Root>\n};\n\nexport const OpenEditorBlockMenu = ({\n controller,\n className,\n container,\n}: OpenEditorBlockMenuProps) => {\n const interaction = useOpenEditorBlockInteraction(controller);\n const block = interaction.activeBlock;\n const themeStyle = useOpenEditorThemeStyle();\n const handleElementRef = useRef<HTMLDivElement | null>(null);\n const lastBlockRef = useRef<OpenEditorBlockRef | null>(null);\n const session = controller.blockMenu.session;\n const sessionState = useSyncExternalStore(session.subscribe, session.getSnapshot, session.getSnapshot);\n const previousOpenRef = useRef(sessionState.open);\n useEffect(() => {\n let focusTimer: ReturnType<typeof setTimeout> | undefined;\n if (previousOpenRef.current && !sessionState.open) {\n focusTimer = setTimeout(() => {\n if (handleElementRef.current?.isConnected) handleElementRef.current.focus();\n });\n }\n previousOpenRef.current = sessionState.open;\n return () => {\n if (focusTimer) clearTimeout(focusTimer);\n };\n }, [sessionState.open]);\n if (block && !sessionState.open) lastBlockRef.current = block;\n const activeBlock = sessionState.target ?? block;\n\n const setMenuOpen = useCallback((nextOpen: boolean) => {\n if (nextOpen) {\n if (!lastBlockRef.current) {\n session.close();\n return;\n }\n session.open(lastBlockRef.current);\n return;\n }\n session.close();\n }, [session]);\n\n if (!controller.editable) return null;\n const handle = (\n <OpenEditorBlockDragHandle\n ariaLabel={activeBlock\n ? `Actions for ${activeBlock.blockName ?? activeBlock.nodeType} block`\n : undefined}\n className=\"oe-block-handle-anchor\"\n controller={controller}\n elementRef={handleElementRef}\n expanded={sessionState.open}\n onActivate={() => {\n setMenuOpen(!sessionState.open);\n }}\n onDraggingChange={(dragging) => {\n if (dragging) setMenuOpen(false);\n }}\n >\n {activeBlock ? (\n <span aria-hidden=\"true\" className={cx(\"oe-block-handle\", className)}>\n <HugeiconsIcon aria-hidden=\"true\" icon={openEditorIcons.dragHandle} size={16} strokeWidth={2} />\n </span>\n ) : null}\n </OpenEditorBlockDragHandle>\n );\n\tconst resolver = activeBlock ? controller.blockMenu.resolve(activeBlock) : null;\n\treturn <>\n\t\t{handle}\n\t\t{resolver ? <OpenEditorResolvedBlockMenuView\n\t\t\tresolver={resolver}\n\t\t\tsession={session}\n\t\t\tanchor={handleElementRef}\n\t\t\tariaLabel={activeBlock ? `Actions for ${activeBlock.blockName ?? activeBlock.nodeType} block` : \"Block actions\"}\n\t\t\tcontainer={container}\n\t\t\tstyle={themeStyle}\n\t\t/> : null}\n\t</>;\n};\n\nexport const OpenEditor = ({\n className = \"oe-editor-surface\",\n contentClassName,\n overlayContainer,\n theme,\n ...props\n}: OpenEditorProps) => {\n const controller = useOpenEditorController(props);\n\n const editor = (\n <div className={className}>\n <OpenEditorContent controller={controller} className={contentClassName} />\n <OpenEditorBlockMenu controller={controller} container={overlayContainer} />\n <OpenEditorSelectionBubble controller={controller} container={overlayContainer} />\n <OpenEditorTableMenu controller={controller} container={overlayContainer} />\n <OpenEditorSlashMenu controller={controller} container={overlayContainer} />\n </div>\n );\n return theme ? <OpenEditorThemeProvider theme={theme}>{editor}</OpenEditorThemeProvider> : editor;\n};\n\nexport { OpenEditorContent, useOpenEditorController };\nexport type {\n OpenEditorBlockRef,\n OpenEditorController,\n OpenEditorReactProps,\n OpenEditorSlashMenuIcon,\n OpenEditorSlashMenuIconProps,\n OpenEditorSlashMenuItem,\n} from \"@openeditor/react\";\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/table-menu.tsx","../src/emoji-picker.tsx","../src/index.tsx"],"names":["jsx","jsxs","openEditorIcons","useOpenEditorThemeStyle","useState","HugeiconsIcon","Toolbar","Menu","Fragment","Popover","OpenEditorThemeProvider"],"mappings":";;;;;;;;;;;;;;;;;;AA0BA,IAAM,0BAAA,GAA6B,CACjC,KAAA,EACA,UAAA,EACA,OAAA,KACG;AACH,EAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACxB,EAAA,KAAA,CAAM,cAAA,EAAe;AACrB,EAAA,UAAA,CAAW,KAAA,CAAM,IAAI,OAAO,CAAA;AAC9B,CAAA;AAEA,IAAM,8BAAA,GAAiC,CACrC,KAAA,EACA,UAAA,EACA,OAAA,KACG;AAGH,EAAA,IAAI,MAAM,MAAA,KAAW,CAAA,EAAG,UAAA,CAAW,KAAA,CAAM,IAAI,OAAO,CAAA;AACtD,CAAA;AAEA,IAAM,kBAAkB,CAAC;AAAA,EACvB,UAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA;AACF,CAAA,KAMM;AACJ,EAAA,MAAM,aAAa,uBAAA,EAAwB;AAC3C,EAAA,uBACE,IAAA,CAAC,IAAA,CAAK,IAAA,EAAL,EAAU,OAAO,KAAA,EAChB,QAAA,EAAA;AAAA,oBAAA,IAAA;AAAA,MAAC,IAAA,CAAK,OAAA;AAAA,MAAL;AAAA,QACC,YAAA,EAAY,GAAG,KAAK,CAAA,QAAA,CAAA;AAAA,QACpB,SAAA,EAAU,0BAAA;AAAA,QACV,WAAA,EAAa,CAAC,KAAA,KAAU,KAAA,CAAM,cAAA,EAAe;AAAA,QAC7C,IAAA,EAAK,QAAA;AAAA,QAEL,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,iBAAc,aAAA,EAAY,MAAA,EAAO,MAAY,IAAA,EAAM,EAAA,EAAI,aAAa,CAAA,EAAG,CAAA;AAAA,0BACxE,GAAA,CAAC,UAAM,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,0BACb,GAAA,CAAC,aAAA,EAAA,EAAc,aAAA,EAAY,MAAA,EAAO,IAAA,EAAM,gBAAgB,WAAA,EAAa,IAAA,EAAM,EAAA,EAAI,WAAA,EAAa,CAAA,EAAG;AAAA;AAAA;AAAA,KACjG;AAAA,oBACA,GAAA,CAAC,IAAA,CAAK,MAAA,EAAL,EAAY,SAAA,EACX,QAAA,kBAAA,GAAA;AAAA,MAAC,IAAA,CAAK,UAAA;AAAA,MAAL;AAAA,QACC,KAAA,EAAM,OAAA;AAAA,QACN,oBAAoB,EAAE,IAAA,EAAM,QAAQ,KAAA,EAAO,OAAA,EAAS,kBAAkB,MAAA,EAAO;AAAA,QAC7E,gBAAA,EAAkB,EAAA;AAAA,QAClB,cAAA,EAAe,OAAA;AAAA,QACf,IAAA,EAAK,QAAA;AAAA,QACL,UAAA,EAAY,CAAA;AAAA,QAEZ,QAAA,kBAAA,GAAA,CAAC,IAAA,CAAK,KAAA,EAAL,EAAW,cAAY,CAAA,EAAG,KAAK,CAAA,QAAA,CAAA,EAAY,SAAA,EAAU,wBAAuB,KAAA,EAAO,UAAA,EACjF,QAAA,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAA,qBACZ,IAAA;AAAA,UAAC,IAAA,CAAK,IAAA;AAAA,UAAL;AAAA,YACC,SAAA,EAAU,sBAAA;AAAA,YACV,aAAA,EAAa,MAAA,CAAO,MAAA,GAAS,EAAA,GAAK,MAAA;AAAA,YAClC,UAAU,CAAC,UAAA,CAAW,KAAA,CAAM,GAAA,CAAI,OAAO,OAAO,CAAA;AAAA,YAE9C,SAAS,CAAC,KAAA,KAAU,+BAA+B,KAAA,EAAO,UAAA,EAAY,OAAO,OAAO,CAAA;AAAA,YACpF,aAAa,CAAC,KAAA,KAAU,2BAA2B,KAAA,EAAO,UAAA,EAAY,OAAO,OAAO,CAAA;AAAA,YAEpF,QAAA,EAAA;AAAA,8BAAA,GAAA,CAAC,aAAA,EAAA,EAAc,eAAY,MAAA,EAAO,IAAA,EAAM,OAAO,IAAA,EAAM,IAAA,EAAM,EAAA,EAAI,WAAA,EAAa,CAAA,EAAG,CAAA;AAAA,8BAC/E,GAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,MAAA,CAAO,KAAA,EAAM;AAAA;AAAA,WAAA;AAAA,UALf,MAAA,CAAO;AAAA,SAOf,CAAA,EACH;AAAA;AAAA,KACF,EACF;AAAA,GAAA,EACF,CAAA;AAEJ,CAAA;AAEA,IAAM,qBAAqB,CAAC;AAAA,EAC1B,MAAA;AAAA,EACA,QAAA;AAAA,EACA,UAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA;AAAA,EACA;AACF,CAAA,qBAQE,GAAA;AAAA,EAAC,OAAA,CAAQ,MAAA;AAAA,EAAR;AAAA,IACC,YAAA,EAAY,KAAA;AAAA,IACZ,SAAA,EAAU,yBAAA;AAAA,IACV,aAAA,EAAa,SAAS,EAAA,GAAK,MAAA;AAAA,IAC3B,aAAA,EAAa,SAAS,EAAA,GAAK,MAAA;AAAA,IAC3B,QAAA,EAAU,CAAC,UAAA,CAAW,KAAA,CAAM,IAAI,OAAO,CAAA;AAAA,IACvC,SAAS,CAAC,KAAA,KAAU,8BAAA,CAA+B,KAAA,EAAO,YAAY,OAAO,CAAA;AAAA,IAC7E,aAAa,CAAC,KAAA,KAAU,0BAAA,CAA2B,KAAA,EAAO,YAAY,OAAO,CAAA;AAAA,IAC7E,KAAA,EAAO,KAAA;AAAA,IACP,IAAA,EAAK,QAAA;AAAA,IAEJ;AAAA;AACH,CAAA;AAGF,IAAM,UAAA,GAAqC;AAAA,EACzC,EAAE,OAAA,EAAS,cAAA,EAAgB,OAAO,kBAAA,EAAoB,IAAA,EAAM,gBAAgB,oBAAA,EAAqB;AAAA,EACjG,EAAE,OAAA,EAAS,aAAA,EAAe,OAAO,kBAAA,EAAoB,IAAA,EAAM,gBAAgB,mBAAA,EAAoB;AAAA,EAC/F,EAAE,SAAS,WAAA,EAAa,KAAA,EAAO,cAAc,IAAA,EAAM,eAAA,CAAgB,cAAA,EAAgB,MAAA,EAAQ,IAAA;AAC7F,CAAA;AAEA,IAAM,aAAA,GAAwC;AAAA,EAC5C,EAAE,OAAA,EAAS,iBAAA,EAAmB,OAAO,oBAAA,EAAsB,IAAA,EAAM,gBAAgB,uBAAA,EAAwB;AAAA,EACzG,EAAE,OAAA,EAAS,gBAAA,EAAkB,OAAO,qBAAA,EAAuB,IAAA,EAAM,gBAAgB,sBAAA,EAAuB;AAAA,EACxG,EAAE,SAAS,cAAA,EAAgB,KAAA,EAAO,iBAAiB,IAAA,EAAM,eAAA,CAAgB,iBAAA,EAAmB,MAAA,EAAQ,IAAA;AACtG,CAAA;AAEA,IAAM,eAAe,CAAC;AAAA,EACpB,UAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,qBAKE,GAAA,CAAC,KAAA,EAAA,EAAI,WAAA,EAAa,CAAC,UAAU,KAAA,CAAM,cAAA,EAAe,EAChD,QAAA,kBAAA,IAAA,CAAC,QAAQ,IAAA,EAAR,EAAa,YAAA,EAAW,eAAA,EAAgB,WAAU,kBAAA,EACjD,QAAA,EAAA;AAAA,kBAAA,GAAA;AAAA,IAAC,eAAA;AAAA,IAAA;AAAA,MACC,OAAA,EAAS,UAAA;AAAA,MACT,SAAA;AAAA,MACA,UAAA;AAAA,MACA,MAAM,eAAA,CAAgB,QAAA;AAAA,MACtB,KAAA,EAAM;AAAA;AAAA,GACR;AAAA,kBACA,GAAA;AAAA,IAAC,eAAA;AAAA,IAAA;AAAA,MACC,OAAA,EAAS,aAAA;AAAA,MACT,SAAA;AAAA,MACA,UAAA;AAAA,MACA,MAAM,eAAA,CAAgB,WAAA;AAAA,MACtB,KAAA,EAAM;AAAA;AAAA,GACR;AAAA,kBACA,GAAA,CAAC,MAAA,EAAA,EAAK,aAAA,EAAY,MAAA,EAAO,WAAU,4BAAA,EAA6B,CAAA;AAAA,kBAChE,GAAA;AAAA,IAAC,kBAAA;AAAA,IAAA;AAAA,MACC,QAAQ,KAAA,CAAM,SAAA;AAAA,MACd,OAAA,EAAQ,iBAAA;AAAA,MACR,UAAA;AAAA,MACA,KAAA,EAAO,KAAA,CAAM,SAAA,GAAY,mBAAA,GAAsB,yBAAA;AAAA,MAE/C,QAAA,kBAAA,GAAA,CAAC,aAAA,EAAA,EAAc,aAAA,EAAY,MAAA,EAAO,IAAA,EAAM,gBAAgB,cAAA,EAAgB,IAAA,EAAM,EAAA,EAAI,WAAA,EAAa,CAAA,EAAG;AAAA;AAAA,GACpG;AAAA,kBACA,GAAA;AAAA,IAAC,kBAAA;AAAA,IAAA;AAAA,MACC,QAAQ,KAAA,CAAM,YAAA;AAAA,MACd,OAAA,EAAQ,oBAAA;AAAA,MACR,UAAA;AAAA,MACA,KAAA,EAAO,KAAA,CAAM,YAAA,GAAe,sBAAA,GAAyB,4BAAA;AAAA,MAErD,QAAA,kBAAA,GAAA,CAAC,aAAA,EAAA,EAAc,aAAA,EAAY,MAAA,EAAO,IAAA,EAAM,gBAAgB,iBAAA,EAAmB,IAAA,EAAM,EAAA,EAAI,WAAA,EAAa,CAAA,EAAG;AAAA;AAAA,GACvG;AAAA,EACC,MAAM,YAAA,mBACL,GAAA,CAAC,sBAAmB,OAAA,EAAQ,WAAA,EAAY,YAAwB,KAAA,EAAM,YAAA,EACpE,QAAA,kBAAA,GAAA,CAAC,aAAA,EAAA,EAAc,eAAY,MAAA,EAAO,IAAA,EAAM,gBAAgB,UAAA,EAAY,IAAA,EAAM,IAAI,WAAA,EAAa,CAAA,EAAG,CAAA,EAChG,CAAA,uBAEC,kBAAA,EAAA,EAAmB,OAAA,EAAQ,cAAa,UAAA,EAAwB,KAAA,EAAM,wBACrE,QAAA,kBAAA,GAAA,CAAC,aAAA,EAAA,EAAc,aAAA,EAAY,MAAA,EAAO,MAAM,eAAA,CAAgB,UAAA,EAAY,MAAM,EAAA,EAAI,WAAA,EAAa,GAAG,CAAA,EAChG,CAAA;AAAA,kBAEF,GAAA,CAAC,sBAAmB,OAAA,EAAQ,aAAA,EAAc,YAAwB,MAAA,EAAM,IAAA,EAAC,OAAM,cAAA,EAC7E,QAAA,kBAAA,GAAA,CAAC,iBAAc,aAAA,EAAY,MAAA,EAAO,MAAM,eAAA,CAAgB,MAAA,EAAQ,MAAM,EAAA,EAAI,WAAA,EAAa,GAAG,CAAA,EAC5F;AAAA,CAAA,EACF,CAAA,EACF,CAAA;AAGK,IAAM,sBAAsB,CAAC;AAAA,EAClC,UAAA;AAAA,EACA,SAAA,GAAY,eAAA;AAAA,EACZ;AACF,CAAA,KAAgC;AAC9B,EAAA,MAAM,aAAa,uBAAA,EAAwB;AAC3C,EAAA,IAAI,CAAC,UAAA,CAAW,KAAA,EAAO,OAAO,IAAA;AAC9B,EAAA,uBACE,GAAA;AAAA,IAAC,yBAAA;AAAA,IAAA;AAAA,MACC,SAAA;AAAA,MACA,SAAA;AAAA,MACA,UAAA;AAAA,MACA,KAAA,EAAO,UAAA;AAAA,MAEN,WAAC,KAAA,qBAAU,GAAA,CAAC,YAAA,EAAA,EAAa,SAAA,EAAsB,YAAwB,KAAA,EAAc;AAAA;AAAA,GACxF;AAEJ;ACjNA,IAAM,mBAAA,GAAiD;AAAA,EACrD,cAAA,EAAgB,CAAC,EAAE,QAAA,EAAU,GAAG,KAAA,EAAM,qBACpCA,GAAAA,CAAC,SAAI,SAAA,EAAU,mBAAA,EAAqB,GAAG,KAAA,EAAQ,mBAAS,KAAA,EAAM,CAAA;AAAA,EAEhE,GAAA,EAAK,CAAC,EAAE,QAAA,EAAU,GAAG,KAAA,EAAM,qBACzBA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,cAAA,EAAgB,GAAG,OAAQ,QAAA,EAAS,CAAA;AAAA,EAErD,KAAA,EAAO,CAAC,EAAE,KAAA,EAAO,SAAS,GAAG,KAAA,uBAC3BA,GAAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACE,GAAG,KAAA;AAAA,MACJ,cAAY,KAAA,CAAM,KAAA;AAAA,MAClB,SAAA,EAAU,iBAAA;AAAA,MACV,OAAA,EAAS,CAAC,KAAA,KAAU;AAClB,QAAA,KAAA,CAAM,eAAA,EAAgB;AACtB,QAAA,OAAA,GAAU,KAAK,CAAA;AAAA,MACjB,CAAA;AAAA,MACA,IAAA,EAAK,QAAA;AAAA,MAEJ,QAAA,EAAA,KAAA,CAAM;AAAA;AAAA;AAGb,CAAA;AAgBO,IAAM,wBAAwB,CAAC;AAAA,EACpC,KAAA;AAAA,EACA,aAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA,GAAW,KAAA;AAAA,EACX,SAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,YAAA,GAAe,yBAAA;AAAA,EACf,YAAA;AAAA,EACA;AACF,CAAA,KAAkC;AAChC,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAI,SAAS,KAAK,CAAA;AAEtC,EAAA,uBACEC,KAAC,OAAA,CAAQ,IAAA,EAAR,EAAa,IAAA,EAAY,YAAA,EAAc,OAAA,EAAS,KAAA,EAAO,KAAA,EACtD,QAAA,EAAA;AAAA,oBAAAD,GAAAA;AAAA,MAAC,OAAA,CAAQ,OAAA;AAAA,MAAR;AAAA,QACC,YAAA,EAAY,KAAA;AAAA,QACZ,SAAA,EAAW,CAAC,kBAAA,EAAoB,SAAS,EAAE,MAAA,CAAO,OAAO,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA;AAAA,QACnE,QAAA;AAAA,QACA,IAAA,EAAK,QAAA;AAAA,QAEJ,sCAAYA,GAAAA,CAAC,MAAA,EAAA,EAAK,aAAA,EAAY,QAAQ,QAAA,EAAA,KAAA,EAAM;AAAA;AAAA,KAC/C;AAAA,oBACAA,GAAAA,CAAC,OAAA,CAAQ,MAAA,EAAR,EAAe,WACd,QAAA,kBAAAA,GAAAA;AAAA,MAAC,OAAA,CAAQ,UAAA;AAAA,MAAR;AAAA,QACC,KAAA,EAAM,OAAA;AAAA,QACN,gBAAA,EAAkB,EAAA;AAAA,QAClB,cAAA,EAAe,OAAA;AAAA,QACf,IAAA,EAAK,QAAA;AAAA,QACL,UAAA,EAAY,CAAA;AAAA,QAEZ,QAAA,kBAAAA,IAAC,OAAA,CAAQ,KAAA,EAAR,EAAc,SAAA,EAAU,kBAAA,EAAmB,KAAA,EAAO,UAAA,EACjD,QAAA,kBAAAC,IAAAA;AAAA,UAAC,WAAA,CAAY,IAAA;AAAA,UAAZ;AAAA,YACC,SAAA,EAAU,iBAAA;AAAA,YACV,YAAA;AAAA,YACA,YAAA;AAAA,YACA,MAAA;AAAA,YACA,aAAA,EAAe,CAAC,SAAA,KAAc;AAC5B,cAAA,aAAA,CAAc,UAAU,KAAK,CAAA;AAC7B,cAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,YACf,CAAA;AAAA,YAEA,QAAA,EAAA;AAAA,8BAAAD,GAAAA;AAAA,gBAAC,WAAA,CAAY,MAAA;AAAA,gBAAZ;AAAA,kBACC,YAAA,EAAW,cAAA;AAAA,kBACX,SAAA,EAAS,IAAA;AAAA,kBACT,SAAA,EAAU,iBAAA;AAAA,kBACV,WAAA,EAAY;AAAA;AAAA,eACd;AAAA,8BACAC,IAAAA,CAAC,WAAA,CAAY,QAAA,EAAZ,EAAqB,WAAU,mBAAA,EAC9B,QAAA,EAAA;AAAA,gCAAAD,IAAC,WAAA,CAAY,OAAA,EAAZ,EAAoB,SAAA,EAAU,kBAAiB,QAAA,EAAA,qBAAA,EAAc,CAAA;AAAA,gCAC9DA,GAAAA,CAAC,WAAA,CAAY,OAAZ,EAAkB,SAAA,EAAU,kBAAiB,QAAA,EAAA,iBAAA,EAAe,CAAA;AAAA,gCAC7DA,GAAAA;AAAA,kBAAC,WAAA,CAAY,IAAA;AAAA,kBAAZ;AAAA,oBACC,SAAA,EAAU,eAAA;AAAA,oBACV,UAAA,EAAY;AAAA;AAAA;AACd,eAAA,EACF,CAAA;AAAA,8BACAC,IAAAA,CAAC,QAAA,EAAA,EAAO,SAAA,EAAU,iBAAA,EAChB,QAAA,EAAA;AAAA,gCAAAD,GAAAA,CAAC,WAAA,CAAY,WAAA,EAAZ,EACE,QAAA,EAAA,CAAC,EAAE,KAAA,EAAO,MAAA,EAAO,KAAM,MAAA,mBAASC,IAAAA,CAAA,QAAA,EAAA,EAAE,QAAA,EAAA;AAAA,kCAAAD,GAAAA,CAAC,MAAA,EAAA,EAAK,aAAA,EAAY,MAAA,EAAQ,iBAAO,KAAA,EAAM,CAAA;AAAA,kCAAOA,GAAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,MAAA,CAAO,KAAA,EAAM;AAAA,iBAAA,EAAO,IAAM,iBAAA,EACpH,CAAA;AAAA,gCACAA,GAAAA,CAAC,WAAA,CAAY,gBAAA,EAAZ,EAA6B,cAAW,kBAAA,EAAmB;AAAA,eAAA,EAC9D;AAAA;AAAA;AAAA,SACF,EACF;AAAA;AAAA,KACF,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;ACxBO,IAAM,6BAAA,GAAgC,CAAC,EAAE,QAAA,EAAS,qBACvDA,GAAAA,CAAC,iCAAA,EAAA,EAAkC,QAAA,EAAU,qBAAA,EAC1C,QAAA,EACH;AAuCF,IAAM,kBAAA,GAAqB;AAAA,EACzB,EAAE,KAAA,EAAO,CAAA,EAAG,IAAA,EAAME,gBAAgB,QAAA,EAAS;AAAA,EAC3C,EAAE,KAAA,EAAO,CAAA,EAAG,IAAA,EAAMA,gBAAgB,QAAA,EAAS;AAAA,EAC3C,EAAE,KAAA,EAAO,CAAA,EAAG,IAAA,EAAMA,gBAAgB,QAAA,EAAS;AAAA,EAC3C,EAAE,KAAA,EAAO,CAAA,EAAG,IAAA,EAAMA,gBAAgB,QAAA,EAAS;AAAA,EAC3C,EAAE,KAAA,EAAO,CAAA,EAAG,IAAA,EAAMA,gBAAgB,QAAA,EAAS;AAAA,EAC3C,EAAE,KAAA,EAAO,CAAA,EAAG,IAAA,EAAMA,gBAAgB,QAAA;AACpC,CAAA;AAEA,IAAM,qBAAA,GAAgD;AAAA,EACpD;AAAA,IACE,GAAA,EAAK,WAAA;AAAA,IACL,KAAA,EAAO,MAAA;AAAA,IACP,MAAMA,eAAAA,CAAgB,IAAA;AAAA,IACtB,QAAA,EAAU,CAAC,UAAA,KAAe,UAAA,CAAW,SAAS,WAAW,CAAA;AAAA,IACzD,GAAA,EAAK,CAAC,UAAA,KAAe,UAAA,CAAW,YAAA;AAAa,GAC/C;AAAA,EACA,GAAG,kBAAA,CAAmB,GAAA,CAAI,CAAC,EAAE,KAAA,EAAO,MAAK,MAAO;AAAA,IAC9C,GAAA,EAAK,UAAU,KAAK,CAAA,CAAA;AAAA,IACpB,KAAA,EAAO,WAAW,KAAK,CAAA,CAAA;AAAA,IACvB,IAAA;AAAA,IACA,QAAA,EAAU,CAAC,UAAA,KAAqC,UAAA,CAAW,SAAS,SAAA,EAAW,EAAE,OAAO,CAAA;AAAA,IACxF,GAAA,EAAK,CAAC,UAAA,KAAqC,UAAA,CAAW,cAAc,KAAK;AAAA,GAC3E,CAAE,CAAA;AAAA,EACF;AAAA,IACE,GAAA,EAAK,YAAA;AAAA,IACL,KAAA,EAAO,aAAA;AAAA,IACP,MAAMA,eAAAA,CAAgB,UAAA;AAAA,IACtB,QAAA,EAAU,CAAC,UAAA,KAAe,UAAA,CAAW,SAAS,YAAY,CAAA;AAAA,IAC1D,GAAA,EAAK,CAAC,UAAA,KAAe,UAAA,CAAW,gBAAA;AAAiB,GACnD;AAAA,EACA;AAAA,IACE,GAAA,EAAK,aAAA;AAAA,IACL,KAAA,EAAO,eAAA;AAAA,IACP,MAAMA,eAAAA,CAAgB,WAAA;AAAA,IACtB,QAAA,EAAU,CAAC,UAAA,KAAe,UAAA,CAAW,SAAS,aAAa,CAAA;AAAA,IAC3D,GAAA,EAAK,CAAC,UAAA,KAAe,UAAA,CAAW,iBAAA;AAAkB,GACpD;AAAA,EACA;AAAA,IACE,GAAA,EAAK,UAAA;AAAA,IACL,KAAA,EAAO,WAAA;AAAA,IACP,MAAMA,eAAAA,CAAgB,QAAA;AAAA,IACtB,QAAA,EAAU,CAAC,UAAA,KAAe,UAAA,CAAW,SAAS,UAAU,CAAA;AAAA,IACxD,GAAA,EAAK,CAAC,UAAA,KAAe,UAAA,CAAW,cAAA;AAAe,GACjD;AAAA,EACA;AAAA,IACE,GAAA,EAAK,YAAA;AAAA,IACL,KAAA,EAAO,aAAA;AAAA,IACP,MAAMA,eAAAA,CAAgB,UAAA;AAAA,IACtB,QAAA,EAAU,CAAC,UAAA,KAAe,UAAA,CAAW,SAAS,YAAY,CAAA;AAAA,IAC1D,GAAA,EAAK,CAAC,UAAA,KAAe,UAAA,CAAW,gBAAA;AAAiB,GACnD;AAAA,EACA;AAAA,IACE,GAAA,EAAK,YAAA;AAAA,IACL,KAAA,EAAO,OAAA;AAAA,IACP,MAAMA,eAAAA,CAAgB,UAAA;AAAA,IACtB,QAAA,EAAU,CAAC,UAAA,KAAe,UAAA,CAAW,SAAS,YAAY,CAAA;AAAA,IAC1D,GAAA,EAAK,CAAC,UAAA,KAAe,UAAA,CAAW,gBAAA;AAAiB,GACnD;AAAA,EACA;AAAA,IACE,GAAA,EAAK,SAAA;AAAA,IACL,KAAA,EAAO,SAAA;AAAA,IACP,MAAMA,eAAAA,CAAgB,OAAA;AAAA,IACtB,QAAA,EAAU,CAAC,UAAA,KAAe,UAAA,CAAW,SAAS,SAAS,CAAA;AAAA,IACvD,GAAA,EAAK,CAAC,UAAA,KAAe,UAAA,CAAW,aAAA;AAAc,GAChD;AAAA,EACA;AAAA,IACE,GAAA,EAAK,WAAA;AAAA,IACL,KAAA,EAAO,MAAA;AAAA,IACP,MAAMA,eAAAA,CAAgB,SAAA;AAAA,IACtB,QAAA,EAAU,CAAC,UAAA,KAAe,UAAA,CAAW,SAAS,WAAW,CAAA;AAAA,IACzD,GAAA,EAAK,CAAC,UAAA,KAAe,UAAA,CAAW,eAAA;AAAgB;AAEpD,CAAA;AAEA,IAAM,uBAAA,GAA0B,CAAC,UAAA,KAC/B;AAAA,EACE,SAAA;AAAA,EACA,YAAA;AAAA,EACA,UAAA;AAAA,EACA,YAAA;AAAA,EACA,aAAA;AAAA,EACA,YAAA;AAAA,EACA,WAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAAA,CACG,GAAA,CAAI,CAAC,GAAA,KAAQ,qBAAA,CAAsB,KAAK,CAAC,MAAA,KAAW,OAAO,GAAA,KAAQ,GAAG,CAAC,CAAA,CACvE,IAAA,CAAK,CAAC,MAAA,KAAW,MAAA,EAAQ,SAAS,UAAU,CAAC,CAAA,IAAK,qBAAA,CAAsB,CAAC,CAAA;AAE9E,IAAM,YAAA,GAAe,CAAC,GAAA,KAAgB,gBAAA,CAAiB,KAAK,GAAG,CAAA;AAE/D,IAAM,cAAA,GAAiD;AAAA,EACrD,WAAWA,eAAAA,CAAgB,IAAA;AAAA,EAC3B,GAAG,MAAA,CAAO,WAAA,CAAY,kBAAA,CAAmB,GAAA,CAAI,CAAC,EAAE,KAAA,EAAO,IAAA,EAAK,KAAM,CAAC,CAAA,OAAA,EAAU,KAAK,CAAA,CAAA,EAAI,IAAI,CAAC,CAAC,CAAA;AAAA,EAC5F,YAAYA,eAAAA,CAAgB,UAAA;AAAA,EAC5B,aAAaA,eAAAA,CAAgB,WAAA;AAAA,EAC7B,UAAUA,eAAAA,CAAgB,QAAA;AAAA,EAC1B,YAAYA,eAAAA,CAAgB,UAAA;AAAA,EAC5B,WAAWA,eAAAA,CAAgB,SAAA;AAAA,EAC3B,SAASA,eAAAA,CAAgB,OAAA;AAAA,EACzB,OAAOA,eAAAA,CAAgB,KAAA;AAAA,EACvB,SAASA,eAAAA,CAAgB,OAAA;AAAA,EACzB,OAAOA,eAAAA,CAAgB,KAAA;AAAA,EACvB,YAAYA,eAAAA,CAAgB,UAAA;AAAA,EAC5B,SAASA,eAAAA,CAAgB,OAAA;AAAA,EACzB,SAASA,eAAAA,CAAgB,OAAA;AAAA,EACzB,MAAMA,eAAAA,CAAgB,IAAA;AAAA,EACtB,YAAYA,eAAAA,CAAgB;AAC9B,CAAA;AAEA,IAAM,gBAAA,GAAmB,CAAC,IAAA,KACxB,UAAA,IAAc,IAAA;AAChB,IAAM,gBAAA,GAAmB,CAAC,IAAA,KACxB,cAAA,CAAe,IAAA,CAAK,GAAG,CAAA,KAAM,gBAAA,CAAiB,IAAI,CAAA,GAAIA,eAAAA,CAAgB,QAAA,GAAWA,eAAAA,CAAgB,IAAA,CAAA;AACnG,IAAM,gBAAA,GAAmB,CAAC,IAAA,EAA+B,KAAA,KAA2B;AAClF,EAAA,MAAM,UAAA,GAAa,MAAM,WAAA,EAAY;AACrC,EAAA,MAAM,OAAA,GAAU,CAAA,EAAG,IAAA,CAAK,KAAK,IAAI,IAAA,CAAK,KAAK,CAAA,CAAA,EAAI,IAAA,CAAK,UAAU,IAAA,CAAK,GAAG,CAAA,IAAK,EAAE,GAAG,WAAA,EAAY;AAC5F,EAAA,OAAO,OAAA,CAAQ,QAAA,CAAS,UAAU,CAAA,IAC5B,iBAAiB,IAAI,CAAA,IAAK,IAAA,CAAK,QAAA,CAAS,KAAK,CAAC,KAAA,KAAU,gBAAA,CAAiB,KAAA,EAAO,KAAK,CAAC,CAAA;AAC9F,CAAA;AAEA,IAAM,SAAA,GAAY,CAAC,IAAA,EAAc,GAAA,MAA8B;AAAA,EAC7D,IAAA;AAAA,EACA,KAAA,EAAO,IAAA;AAAA,EACP,GAAA;AAAA,EACA,MAAA,EAAQ,GAAA;AAAA,EACR,KAAA,EAAO,CAAA;AAAA,EACP,MAAA,EAAQ;AACV,CAAA,CAAA;AAEA,IAAM,aAAA,GAAgB,CAAC,KAAA,KAAgC,KAAA,CAAM,cAAc,SAAA,CAAU,KAAA,CAAM,IAAA,EAAM,KAAA,CAAM,GAAG,CAAA;AAE1G,IAAM,eAAA,GAAkB,CACtB,KAAA,EACA,cAAA,EACA,WAAA,MACmB;AAAA,EACnB,gBAAgB,cAAA,IAAkB,MAAA;AAAA,EAClC,uBAAuB,MAAM;AAC3B,IAAA,MAAM,IAAA,GAAO,WAAA,IAAc,IAAK,aAAA,CAAc,KAAK,CAAA;AACnD,IAAA,OAAO;AAAA,MACL,GAAG,IAAA;AAAA,MACH,GAAG,IAAA,CAAK,IAAA;AAAA,MACR,GAAG,IAAA,CAAK,GAAA;AAAA,MACR,QAAQ,MAAM;AAAA,KAChB;AAAA,EACF;AACF,CAAA,CAAA;AAEA,IAAM,EAAA,GAAK,IAAI,OAAA,KAAsD,OAAA,CAAQ,OAAO,OAAO,CAAA,CAAE,KAAK,GAAG,CAAA;AAErG,IAAM,aAAA,GAAgB,CAAS,aAAA,EAAuB,SAAA,KAAgE;AACpH,EAAA,IAAI,OAAO,cAAc,UAAA,EAAY;AACnC,IAAA,OAAO,CAAC,KAAA,KAAiB,EAAA,CAAG,aAAA,EAAe,SAAA,CAAU,KAAK,CAAC,CAAA;AAAA,EAC7D;AAEA,EAAA,OAAO,EAAA,CAAG,eAAe,SAAS,CAAA;AACpC,CAAA;AAEO,IAAM,mBAAmB,CAAC,EAAE,SAAA,EAAW,GAAG,OAAM,qBACrDF,GAAAA,CAAC,MAAA,EAAA,EAAO,WAAW,aAAA,CAAgC,WAAA,EAAa,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO;AAGlF,IAAM,mBAAmB,CAAgC;AAAA,EAC9D,SAAA;AAAA,EACA,GAAG;AACL,CAAA,qBACEA,IAAC,MAAA,EAAA,EAAc,SAAA,EAAW,cAAgC,qBAAA,EAAuB,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO;AAGnG,IAAM,wBAAwB,CAAgC;AAAA,EACnE,SAAA;AAAA,EACA,GAAG;AACL,CAAA,qBACEA,IAAC,WAAA,EAAA,EAAmB,SAAA,EAAW,cAAqC,iBAAA,EAAmB,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO;AAGzG,IAAM,kBAAkB,CAAC,EAAE,SAAA,EAAW,GAAG,OAAM,qBACpDA,GAAAA,CAAC,KAAA,EAAA,EAAM,WAAW,aAAA,CAA+B,UAAA,EAAY,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO;AAGtF,IAAM,uBAAuB,CAAC;AAAA,EAC5B,UAAA;AAAA,EACA,IAAA;AAAA,EACA;AACF,CAAA,KAIM;AACJ,EAAA,MAAM,aAAaG,uBAAAA,EAAwB;AAC3C,EAAA,MAAM,CAAC,GAAA,EAAK,MAAM,CAAA,GAAIC,SAAS,EAAE,CAAA;AAEjC,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,IAAA,EAAM;AACR,MAAA,MAAA,CAAO,UAAA,CAAW,aAAA,EAAc,IAAK,UAAU,CAAA;AAAA,IACjD;AAAA,EACF,CAAA,EAAG,CAAC,IAAI,CAAC,CAAA;AAET,EAAA,MAAM,UAAA,GAAa,CAAC,KAAA,KAAsC;AACxD,IAAA,KAAA,CAAM,cAAA,EAAe;AACrB,IAAA,UAAA,CAAW,OAAA,CAAQ,GAAA,CAAI,IAAA,EAAM,CAAA;AAC7B,IAAA,YAAA,CAAa,KAAK,CAAA;AAAA,EACpB,CAAA;AAEA,EAAA,uBACEJ,GAAAA,CAAC,MAAA,CAAO,IAAA,EAAP,EAAY,IAAA,EAAY,YAAA,EACvB,QAAA,kBAAAC,IAAAA,CAAC,MAAA,CAAO,MAAA,EAAP,EACC,QAAA,EAAA;AAAA,oBAAAD,GAAAA,CAAC,MAAA,CAAO,QAAA,EAAP,EAAgB,WAAU,oBAAA,EAAqB,CAAA;AAAA,oBAChDC,IAAAA,CAAC,MAAA,CAAO,KAAA,EAAP,EAAa,WAAU,WAAA,EAAY,YAAA,EAAc,KAAA,EAAO,KAAA,EAAO,UAAA,EAC9D,QAAA,EAAA;AAAA,sBAAAD,GAAAA,CAAC,OAAO,KAAA,EAAP,EAAa,WAAU,iBAAA,EAAkB,YAAA,EAAW,qBACnD,QAAA,kBAAAA,GAAAA,CAACK,eAAA,EAAc,aAAA,EAAY,QAAO,IAAA,EAAMH,eAAAA,CAAgB,OAAO,IAAA,EAAM,EAAA,EAAI,WAAA,EAAa,CAAA,EAAG,CAAA,EAC3F,CAAA;AAAA,sBACAD,IAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qBAAA,EAAsB,UAAU,UAAA,EAC9C,QAAA,EAAA;AAAA,wBAAAD,IAAC,MAAA,CAAO,KAAA,EAAP,EAAa,SAAA,EAAU,mBAAkB,QAAA,EAAA,MAAA,EAAI,CAAA;AAAA,wBAC9CA,GAAAA;AAAA,UAAC,eAAA;AAAA,UAAA;AAAA,YACC,YAAA,EAAW,UAAA;AAAA,YACX,YAAA,EAAa,KAAA;AAAA,YACb,SAAA,EAAU,KAAA;AAAA,YACV,KAAA,EAAO,GAAA;AAAA,YACP,aAAA,EAAe,MAAA;AAAA,YACf,WAAA,EAAY;AAAA;AAAA,SACd;AAAA,wBACAC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mBAAA,EACb,QAAA,EAAA;AAAA,0BAAAD,GAAAA;AAAA,YAAC,gBAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,QAAA;AAAA,cACL,SAAA,EAAU,0CAAA;AAAA,cACV,SAAS,MAAM;AACb,gBAAA,UAAA,CAAW,QAAQ,IAAI,CAAA;AACvB,gBAAA,YAAA,CAAa,KAAK,CAAA;AAAA,cACpB,CAAA;AAAA,cACD,QAAA,EAAA;AAAA;AAAA,WAED;AAAA,0BACAA,GAAAA,CAAC,gBAAA,EAAA,EAAiB,MAAK,QAAA,EAAS,SAAA,EAAU,6CAA4C,QAAA,EAAA,OAAA,EAAK;AAAA,SAAA,EAC7F;AAAA,OAAA,EACF;AAAA,KAAA,EACF;AAAA,GAAA,EACF,CAAA,EACF,CAAA;AAEJ,CAAA;AAEA,IAAM,kBAAkB,CAAC;AAAA,EACvB;AACF,CAAA,qBAGEA,GAAAA;AAAA,EAACM,OAAAA,CAAQ,MAAA;AAAA,EAAR;AAAA,IACC,IAAA,EAAK,QAAA;AAAA,IACL,cAAY,MAAA,CAAO,KAAA;AAAA,IACnB,gBAAc,MAAA,CAAO,MAAA;AAAA,IACrB,SAAA,EAAU,mBAAA;AAAA,IACV,aAAA,EAAa,MAAA,CAAO,MAAA,GAAS,EAAA,GAAK,MAAA;AAAA,IAClC,SAAS,MAAA,CAAO,GAAA;AAAA,IAEhB,QAAA,kBAAAN,GAAAA,CAACK,aAAAA,EAAA,EAAc,eAAY,MAAA,EAAO,SAAA,EAAU,iBAAA,EAAkB,IAAA,EAAM,MAAA,CAAO,IAAA,EAAM,IAAA,EAAM,EAAA,EAAI,aAAa,CAAA,EAAG;AAAA;AAC7G,CAAA;AAGF,IAAM,8BAA8B,CAAC;AAAA,EACnC,UAAA;AAAA,EACA;AACF,CAAA,KAGM;AACJ,EAAA,MAAM,aAAaF,uBAAAA,EAAwB;AAC3C,EAAA,MAAM,YAAA,GAAe,wBAAwB,UAAU,CAAA;AACvD,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIC,SAAS,KAAK,CAAA;AAC9C,EAAA,MAAM,CAAC,gBAAA,EAAkB,mBAAmB,CAAA,GAAIA,SAAS,KAAK,CAAA;AAC9D,EAAA,MAAM,cAAA,GAAiB,sBAAsB,MAAA,CAAO,CAAC,WAAW,YAAA,CAAa,MAAA,CAAO,GAAG,CAAC,CAAA;AAExF,EAAA,uBACEH,IAAAA;AAAA,IAACM,IAAAA,CAAK,IAAA;AAAA,IAAL;AAAA,MACC,KAAA,EAAO,KAAA;AAAA,MACP,IAAA,EAAM,QAAA;AAAA,MACN,YAAA,EAAc,CAAC,IAAA,KAAS;AACtB,QAAA,WAAA,CAAY,IAAI,CAAA;AAChB,QAAA,IAAI,CAAC,IAAA,EAAM,mBAAA,CAAoB,KAAK,CAAA;AAAA,MACtC,CAAA;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAAN,IAAAA;AAAA,UAACM,IAAAA,CAAK,OAAA;AAAA,UAAL;AAAA,YACC,IAAA,EAAK,QAAA;AAAA,YACL,YAAA,EAAY,CAAA,EAAG,YAAA,CAAa,KAAK,CAAA,WAAA,CAAA;AAAA,YACjC,SAAA,EAAU,8CAAA;AAAA,YACV,WAAA,EAAa,CAAC,KAAA,KAAU,KAAA,CAAM,cAAA,EAAe;AAAA,YAE7C,QAAA,EAAA;AAAA,8BAAAP,GAAAA,CAACK,aAAAA,EAAA,EAAc,aAAA,EAAY,MAAA,EAAO,SAAA,EAAU,iBAAA,EAAkB,IAAA,EAAM,YAAA,CAAa,IAAA,EAAM,IAAA,EAAM,EAAA,EAAI,aAAa,CAAA,EAAG,CAAA;AAAA,8BACjHL,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,kCAAA,EAAoC,uBAAa,KAAA,EAAM,CAAA;AAAA,8BACvEA,GAAAA,CAACK,aAAAA,EAAA,EAAc,eAAY,MAAA,EAAO,SAAA,EAAU,oBAAA,EAAqB,IAAA,EAAMH,eAAAA,CAAgB,WAAA,EAAa,IAAA,EAAM,EAAA,EAAI,aAAa,CAAA,EAAG;AAAA;AAAA;AAAA,SAChI;AAAA,wBACAF,GAAAA,CAACO,IAAAA,CAAK,MAAA,EAAL,EAAY,WACX,QAAA,kBAAAP,GAAAA;AAAA,UAACO,IAAAA,CAAK,UAAA;AAAA,UAAL;AAAA,YACC,cAAA,EAAe,OAAA;AAAA,YACf,IAAA,EAAK,QAAA;AAAA,YACL,KAAA,EAAM,OAAA;AAAA,YACN,UAAA,EAAY,CAAA;AAAA,YACZ,gBAAA,EAAkB,EAAA;AAAA,YAClB,oBAAoB,EAAE,IAAA,EAAM,QAAQ,KAAA,EAAO,OAAA,EAAS,kBAAkB,MAAA,EAAO;AAAA,YAE7E,QAAA,kBAAAN,IAAAA;AAAA,cAACM,IAAAA,CAAK,KAAA;AAAA,cAAL;AAAA,gBACC,SAAA,EAAU,iBAAA;AAAA,gBACV,KAAA,EAAO,UAAA;AAAA,gBACP,YAAA,EAAc,MAAM,mBAAA,CAAoB,KAAK,CAAA;AAAA,gBAE7C,QAAA,EAAA;AAAA,kCAAAP,IAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4CACZ,QAAA,EAAA,qBAAA,CAAsB,GAAA,CAAI,CAAC,MAAA,KAAW;AACrC,oBAAA,IAAI,YAAA,CAAa,MAAA,CAAO,GAAG,CAAA,EAAG;AAC5B,sBAAA,IAAI,MAAA,CAAO,GAAA,KAAQ,UAAA,EAAY,OAAO,IAAA;AACtC,sBAAA,uBACEC,IAAAA;AAAA,wBAACM,IAAAA,CAAK,IAAA;AAAA,wBAAL;AAAA,0BACC,YAAA,EAAc,KAAA;AAAA,0BAEd,SAAA,EAAU,yBAAA;AAAA,0BACV,aAAA,EAAa,YAAA,CAAa,YAAA,CAAa,GAAG,IAAI,EAAA,GAAK,MAAA;AAAA,0BACnD,KAAA,EAAM,SAAA;AAAA,0BACN,OAAA,EAAS,MAAM,mBAAA,CAAoB,IAAI,CAAA;AAAA,0BACvC,OAAA,EAAS,MAAM,mBAAA,CAAoB,IAAI,CAAA;AAAA,0BACvC,YAAA,EAAc,MAAM,mBAAA,CAAoB,IAAI,CAAA;AAAA,0BAE5C,QAAA,EAAA;AAAA,4CAAAP,GAAAA,CAACK,aAAAA,EAAA,EAAc,aAAA,EAAY,MAAA,EAAO,SAAA,EAAU,yBAAA,EAA0B,IAAA,EAAMH,eAAAA,CAAgB,QAAA,EAAU,IAAA,EAAM,EAAA,EAAI,aAAa,CAAA,EAAG,CAAA;AAAA,4CAChIF,GAAAA,CAAC,MAAA,EAAA,EAAK,QAAA,EAAA,SAAA,EAAO,CAAA;AAAA,4CACbA,GAAAA,CAACK,aAAAA,EAAA,EAAc,eAAY,MAAA,EAAO,SAAA,EAAU,oBAAA,EAAqB,IAAA,EAAMH,eAAAA,CAAgB,YAAA,EAAc,IAAA,EAAM,EAAA,EAAI,aAAa,CAAA,EAAG;AAAA;AAAA,yBAAA;AAAA,wBAV3H;AAAA,uBAWN;AAAA,oBAEJ;AAEA,oBAAA,MAAM,MAAA,GAAS,MAAA,CAAO,GAAA,KAAQ,YAAA,CAAa,GAAA;AAC3C,oBAAA,uBACED,IAAAA;AAAA,sBAACM,IAAAA,CAAK,IAAA;AAAA,sBAAL;AAAA,wBAEC,SAAA,EAAU,yBAAA;AAAA,wBACV,aAAA,EAAa,SAAS,EAAA,GAAK,MAAA;AAAA,wBAC3B,OAAO,MAAA,CAAO,KAAA;AAAA,wBACd,YAAA,EAAc,MAAM,mBAAA,CAAoB,KAAK,CAAA;AAAA,wBAC7C,SAAS,MAAM;AAAE,0BAAA,IAAI,CAAC,MAAA,EAAQ,MAAA,CAAO,GAAA,CAAI,UAAU,CAAA;AAAA,wBAAG,CAAA;AAAA,wBAEtD,QAAA,EAAA;AAAA,0CAAAP,GAAAA,CAACK,aAAAA,EAAA,EAAc,aAAA,EAAY,MAAA,EAAO,SAAA,EAAU,yBAAA,EAA0B,IAAA,EAAM,MAAA,CAAO,IAAA,EAAM,IAAA,EAAM,EAAA,EAAI,aAAa,CAAA,EAAG,CAAA;AAAA,0CACnHL,GAAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,MAAA,CAAO,KAAA,EAAM;AAAA;AAAA,uBAAA;AAAA,sBARf,MAAA,CAAO;AAAA,qBASd;AAAA,kBAEJ,CAAC,CAAA,EACH,CAAA;AAAA,kBACC,gBAAA,mBACCA,GAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,qEAAA,EACZ,QAAA,EAAA,cAAA,CAAe,GAAA,CAAI,CAAC,aAAA,KAAkB;AACrC,oBAAA,MAAM,aAAA,GAAgB,aAAA,CAAc,GAAA,KAAQ,YAAA,CAAa,GAAA;AACzD,oBAAA,uBACEC,IAAAA;AAAA,sBAAC,QAAA;AAAA,sBAAA;AAAA,wBACC,IAAA,EAAK,QAAA;AAAA,wBAEL,SAAA,EAAU,yBAAA;AAAA,wBACV,aAAA,EAAa,gBAAgB,EAAA,GAAK,MAAA;AAAA,wBAClC,WAAA,EAAa,CAAC,KAAA,KAAU,KAAA,CAAM,cAAA,EAAe;AAAA,wBAC7C,SAAS,MAAM;AACb,0BAAA,IAAI,CAAC,aAAA,EAAe,aAAA,CAAc,GAAA,CAAI,UAAU,CAAA;AAChD,0BAAA,WAAA,CAAY,KAAK,CAAA;AAAA,wBACnB,CAAA;AAAA,wBACA,IAAA,EAAK,UAAA;AAAA,wBAEL,QAAA,EAAA;AAAA,0CAAAD,GAAAA,CAACK,aAAAA,EAAA,EAAc,aAAA,EAAY,MAAA,EAAO,SAAA,EAAU,yBAAA,EAA0B,IAAA,EAAM,aAAA,CAAc,IAAA,EAAM,IAAA,EAAM,EAAA,EAAI,aAAa,CAAA,EAAG,CAAA;AAAA,0CAC1HL,GAAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,aAAA,CAAc,KAAA,EAAM;AAAA;AAAA,uBAAA;AAAA,sBAXtB,aAAA,CAAc;AAAA,qBAYrB;AAAA,kBAEJ,CAAC,GACH,CAAA,GACE;AAAA;AAAA;AAAA;AACN;AAAA,SACF,EACF;AAAA;AAAA;AAAA,GACF;AAEJ,CAAA;AAEO,IAAM,4BAA4B,CAAC;AAAA,EACxC,UAAA;AAAA,EACA,SAAA,GAAY,gBAAA;AAAA,EACZ;AACF,CAAA,KAAsC;AACpC,EAAA,MAAM,aAAaG,uBAAAA,EAAwB;AAC3C,EAAA,MAAM,WAAA,GAAc,WAAW,cAAA,EAAe;AAC9C,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GAAIC,SAAS,KAAK,CAAA;AAC1D,EAAA,MAAM,UAAA,GAAa,OAA8B,IAAI,CAAA;AAErD,EAAA,MAAM,OAAA,GAA6B,WAAW,KAAA,GAC1C;AAAA,IACE;AAAA,MACE,GAAA,EAAK,MAAA;AAAA,MACL,KAAA,EAAO,MAAA;AAAA,MACP,MAAA,EAAQ,UAAA,CAAW,QAAA,CAAS,MAAM,CAAA;AAAA,MAClC,MAAMF,eAAAA,CAAgB,IAAA;AAAA,MACtB,GAAA,EAAK,MAAM,UAAA,CAAW,UAAA;AAAW,KACnC;AAAA,IACA;AAAA,MACE,GAAA,EAAK,QAAA;AAAA,MACL,KAAA,EAAO,QAAA;AAAA,MACP,MAAA,EAAQ,UAAA,CAAW,QAAA,CAAS,QAAQ,CAAA;AAAA,MACpC,MAAMA,eAAAA,CAAgB,MAAA;AAAA,MACtB,GAAA,EAAK,MAAM,UAAA,CAAW,YAAA;AAAa,KACrC;AAAA,IACA;AAAA,MACE,GAAA,EAAK,WAAA;AAAA,MACL,KAAA,EAAO,WAAA;AAAA,MACP,MAAA,EAAQ,UAAA,CAAW,QAAA,CAAS,WAAW,CAAA;AAAA,MACvC,MAAMA,eAAAA,CAAgB,SAAA;AAAA,MACtB,GAAA,EAAK,MAAM,UAAA,CAAW,eAAA;AAAgB,KACxC;AAAA,IACA;AAAA,MACE,GAAA,EAAK,QAAA;AAAA,MACL,KAAA,EAAO,eAAA;AAAA,MACP,MAAA,EAAQ,UAAA,CAAW,QAAA,CAAS,QAAQ,CAAA;AAAA,MACpC,MAAMA,eAAAA,CAAgB,MAAA;AAAA,MACtB,GAAA,EAAK,MAAM,UAAA,CAAW,YAAA;AAAa,KACrC;AAAA,IACA;AAAA,MACE,GAAA,EAAK,MAAA;AAAA,MACL,KAAA,EAAO,aAAA;AAAA,MACP,MAAA,EAAQ,UAAA,CAAW,QAAA,CAAS,MAAM,CAAA;AAAA,MAClC,MAAMA,eAAAA,CAAgB,IAAA;AAAA,MACtB,GAAA,EAAK,MAAM,UAAA,CAAW,gBAAA;AAAiB;AACzC,MAEF,EAAC;AAEL,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,WAAA,EAAa;AAClB,IAAA,MAAM,YAAA,GAAe,CAAC,KAAA,KAAoC;AACxD,MAAA,IAAI,EAAE,KAAA,CAAM,MAAA,IAAU,KAAA,CAAM,QAAQ,KAAA,CAAA,EAAQ;AAC5C,MAAA,MAAM,UAAU,UAAA,CAAW,OAAA;AAC3B,MAAA,MAAM,IAAA,GAAO,SAAS,aAAA,EAAe,aAAA;AACrC,MAAA,IAAI,CAAC,WAAW,CAAC,IAAA,IAAQ,iBAAiB,IAAI,CAAA,CAAE,eAAe,QAAA,EAAU;AACzE,MAAA,MAAM,YAAA,GAAe,WAAW,OAAA,EAAS,aAAA;AAAA,QACvC;AAAA,OACF;AACA,MAAA,IAAI,CAAC,YAAA,EAAc;AACnB,MAAA,KAAA,CAAM,cAAA,EAAe;AACrB,MAAA,YAAA,CAAa,KAAA,EAAM;AAAA,IACrB,CAAA;AACA,IAAA,WAAA,CAAY,gBAAA,CAAiB,SAAA,EAAW,YAAA,EAAc,IAAI,CAAA;AAC1D,IAAA,OAAO,MAAM,WAAA,CAAY,mBAAA,CAAoB,SAAA,EAAW,cAAc,IAAI,CAAA;AAAA,EAC5E,CAAA,EAAG,CAAC,WAAW,CAAC,CAAA;AAEhB,EAAA,IAAI,CAAC,UAAA,CAAW,KAAA,EAAO,OAAO,IAAA;AAE9B,EAAA,uBACED,IAAAA,CAAAO,QAAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAAR,GAAAA;AAAA,MAAC,oBAAA;AAAA,MAAA;AAAA,QACC,SAAA;AAAA,QACA,SAAA;AAAA,QACA,UAAA;AAAA,QACA,KAAA,EAAO,UAAA;AAAA,QAEP,QAAA,kBAAAA,GAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAW,CAAC,KAAA,KAAU;AACpB,cAAA,IAAI,KAAA,CAAM,QAAQ,QAAA,EAAU;AAC5B,cAAA,KAAA,CAAM,cAAA,EAAe;AACrB,cAAA,UAAA,CAAW,KAAA,EAAM;AAAA,YACnB,CAAA;AAAA,YACA,WAAA,EAAa,CAAC,KAAA,KAAU,KAAA,CAAM,cAAA,EAAe;AAAA,YAE7C,QAAA,kBAAAC,IAAAA;AAAA,cAACK,OAAAA,CAAQ,IAAA;AAAA,cAAR;AAAA,gBACC,SAAA,EAAU,sBAAA;AAAA,gBACV,YAAA,EAAW,sBAAA;AAAA,gBACX,GAAA,EAAK,UAAA;AAAA,gBAEL,QAAA,EAAA;AAAA,kCAAAN,GAAAA,CAAC,2BAAA,EAAA,EAA4B,UAAA,EAAwB,SAAA,EAAsB,CAAA;AAAA,kBAC1E,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAA,qBACZA,IAAC,eAAA,EAAA,EAAiC,MAAA,EAAA,EAAZ,MAAA,CAAO,GAAqB,CACnD,CAAA;AAAA,kCACDA,GAAAA;AAAA,oBAACM,OAAAA,CAAQ,MAAA;AAAA,oBAAR;AAAA,sBACC,IAAA,EAAK,QAAA;AAAA,sBACL,YAAA,EAAW,MAAA;AAAA,sBACX,SAAA,EAAU,mBAAA;AAAA,sBACV,aAAA,EAAa,UAAA,CAAW,QAAA,CAAS,MAAM,IAAI,EAAA,GAAK,MAAA;AAAA,sBAChD,OAAA,EAAS,MAAM,iBAAA,CAAkB,IAAI,CAAA;AAAA,sBAErC,QAAA,kBAAAN,GAAAA,CAACK,aAAAA,EAAA,EAAc,eAAY,MAAA,EAAO,SAAA,EAAU,iBAAA,EAAkB,IAAA,EAAMH,eAAAA,CAAgB,IAAA,EAAM,IAAA,EAAM,EAAA,EAAI,aAAa,CAAA,EAAG;AAAA;AAAA;AACtH;AAAA;AAAA;AACF;AAAA;AACF;AAAA,KACF;AAAA,oBACAF,GAAAA;AAAA,MAAC,oBAAA;AAAA,MAAA;AAAA,QACC,UAAA;AAAA,QACA,IAAA,EAAM,cAAA;AAAA,QACN,YAAA,EAAc;AAAA;AAAA;AAChB,GAAA,EACF,CAAA;AAEJ;AAEO,IAAM,sBAAsB,CAAC;AAAA,EAClC,UAAA;AAAA,EACA,SAAA,GAAY,eAAA;AAAA,EACZ,KAAA;AAAA,EACA;AACF,CAAA,KAAgC;AAC9B,EAAA,MAAM,aAAaG,uBAAAA,EAAwB;AAC3C,EAAA,MAAM,cAAA,GAAiB,kBAAA,CAAmB,KAAA,IAAS,wBAAA,CAAyB,UAAU,CAAC,CAAA;AACvF,EAAA,MAAM,aAAa,UAAA,CAAW,UAAA;AAC9B,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAIC,SAAS,CAAC,CAAA;AACpD,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIA,SAAwB,IAAI,CAAA;AACpE,EAAA,MAAM,gBAAA,GAAmB,OAAO,CAAC,CAAA;AACjC,EAAA,MAAM,SAAS,KAAA,EAAM;AACrB,EAAA,MAAM,OAAA,GAAU,OAA8B,IAAI,CAAA;AAClD,EAAA,MAAM,MAAA,GAAS,OAAA;AAAA,IACb,MACE,UAAA,GACI,eAAA;AAAA,MACE,UAAA;AAAA,MACA,WAAW,cAAA,EAAe;AAAA,MAC1B,MAAM,UAAA,CAAW,eAAA,CAAgB,UAAA,CAAW,EAAE;AAAA,KAChD,GACA,IAAA;AAAA,IACN,CAAC,YAAY,UAAU;AAAA,GACzB;AACA,EAAA,MAAM,aAAA,GAAgB,UAAA,GAClB,cAAA,CAAe,MAAA,CAAO,CAAC,IAAA,KAAS,gBAAA,CAAiB,IAAA,EAAM,UAAA,CAAW,KAAK,CAAC,CAAA,GACxE,EAAC;AACL,EAAA,MAAM,YAAY,aAAA,CAAc,IAAA;AAAA,IAC9B,CAAC,IAAA,KAA2C,gBAAA,CAAiB,IAAI,CAAA,IAAK,KAAK,GAAA,KAAQ;AAAA,GACrF;AACA,EAAA,MAAM,gBAAA,GAAmB,SAAA,GACrB,SAAA,CAAU,QAAA,CAAS,OAAO,CAAC,IAAA,KAAS,gBAAA,CAAiB,IAAA,EAAM,UAAA,EAAY,KAAA,IAAS,EAAE,CAAC,IACnF,EAAC;AACL,EAAA,MAAM,WAAA,GAAkD,YAAY,gBAAA,GAAmB,aAAA;AAEvF,EAAA,gBAAA,CAAiB,OAAA,GAAU,aAAA;AAE3B,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,gBAAA,CAAiB,OAAA,GAAU,CAAA;AAC3B,IAAA,gBAAA,CAAiB,CAAC,CAAA;AAClB,IAAA,eAAA,CAAgB,IAAI,CAAA;AAAA,EACtB,GAAG,CAAC,UAAA,EAAY,IAAA,EAAM,UAAA,EAAY,KAAK,CAAC,CAAA;AAExC,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,aAAA,GAAgB,YAAY,MAAA,EAAQ;AACxC,IAAA,gBAAA,CAAiB,KAAK,GAAA,CAAI,CAAA,EAAG,WAAA,CAAY,MAAA,GAAS,CAAC,CAAC,CAAA;AAAA,EACtD,CAAA,EAAG,CAAC,WAAA,CAAY,MAAA,EAAQ,aAAa,CAAC,CAAA;AAEtC,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,UAAA,IAAc,aAAA,CAAc,MAAA,KAAW,CAAA,aAAc,gBAAA,EAAiB;AAAA,EAC5E,GAAG,CAAC,UAAA,EAAY,aAAA,CAAc,MAAA,EAAQ,UAAU,CAAC,CAAA;AAEjD,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,MAAM,aAAA,GAAgB,WAAW,cAAA,EAAe;AAChD,IAAA,IAAI,CAAC,UAAA,IAAc,CAAC,aAAA,EAAe;AACnC,IAAA,MAAM,QAAA,GAAW;AAAA,MACf,QAAA,EAAU,aAAA,CAAc,YAAA,CAAa,eAAe,CAAA;AAAA,MACpD,QAAA,EAAU,aAAA,CAAc,YAAA,CAAa,eAAe,CAAA;AAAA,MACpD,gBAAA,EAAkB,aAAA,CAAc,YAAA,CAAa,uBAAuB;AAAA,KACtE;AACA,IAAA,MAAM,UAAA,GAAa,WAAA,CAAY,aAAa,CAAA,GACxC,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,SAAA,GAAY,SAAA,CAAU,GAAA,GAAM,MAAM,CAAA,QAAA,EAAW,aAAa,CAAA,CAAA,GACvE,IAAA;AACJ,IAAA,aAAA,CAAc,YAAA,CAAa,iBAAiB,MAAM,CAAA;AAClD,IAAA,aAAA,CAAc,YAAA,CAAa,iBAAiB,MAAM,CAAA;AAClD,IAAA,IAAI,UAAA,EAAY,aAAA,CAAc,YAAA,CAAa,uBAAA,EAAyB,UAAU,CAAA;AAAA,SACzE,aAAA,CAAc,gBAAgB,uBAAuB,CAAA;AAE1D,IAAA,MAAM,aAAA,GAAgB,CAAC,KAAA,KAAoC;AACzD,MAAA,IAAI,KAAA,CAAM,aAAa,OAAO,KAAA;AAC9B,MAAA,IAAI,SAAA,GAA2B,IAAA;AAC/B,MAAA,MAAM,eAAe,gBAAA,CAAiB,OAAA;AACtC,MAAA,IAAI,KAAA,CAAM,GAAA,KAAQ,WAAA,EAAa,SAAA,GAAA,CAAa,YAAA,GAAe,KAAK,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,WAAA,CAAY,MAAM,CAAA;AAC9F,MAAA,IAAI,MAAM,GAAA,KAAQ,SAAA,EAAW,SAAA,GAAA,CAAa,YAAA,GAAe,IAAI,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,WAAA,CAAY,MAAM,CAAA,IAAK,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,YAAY,MAAM,CAAA;AAC9H,MAAA,IAAI,MAAM,GAAA,KAAQ,MAAA,IAAU,KAAA,CAAM,GAAA,KAAQ,UAAU,SAAA,GAAY,CAAA;AAChE,MAAA,IAAI,KAAA,CAAM,GAAA,KAAQ,KAAA,IAAS,KAAA,CAAM,GAAA,KAAQ,UAAA,EAAY,SAAA,GAAY,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,WAAA,CAAY,MAAA,GAAS,CAAC,CAAA;AACnG,MAAA,IAAI,cAAc,IAAA,EAAM;AACtB,QAAA,KAAA,CAAM,cAAA,EAAe;AACrB,QAAA,gBAAA,CAAiB,OAAA,GAAU,SAAA;AAC3B,QAAA,gBAAA,CAAiB,SAAS,CAAA;AAC1B,QAAA,OAAO,IAAA;AAAA,MACT;AACA,MAAA,IAAA,CAAK,MAAM,GAAA,KAAQ,WAAA,IAAe,KAAA,CAAM,GAAA,KAAQ,aAAa,SAAA,EAAW;AACtE,QAAA,KAAA,CAAM,cAAA,EAAe;AACrB,QAAA,eAAA,CAAgB,IAAI,CAAA;AACpB,QAAA,gBAAA,CAAiB,OAAA,GAAU,CAAA;AAC3B,QAAA,gBAAA,CAAiB,CAAC,CAAA;AAClB,QAAA,OAAO,IAAA;AAAA,MACT;AACA,MAAA,IAAI,KAAA,CAAM,QAAQ,YAAA,EAAc;AAC9B,QAAA,MAAM,IAAA,GAAO,WAAA,CAAY,gBAAA,CAAiB,OAAO,CAAA;AACjD,QAAA,IAAI,CAAC,IAAA,IAAQ,CAAC,gBAAA,CAAiB,IAAI,GAAG,OAAO,KAAA;AAC7C,QAAA,KAAA,CAAM,cAAA,EAAe;AACrB,QAAA,eAAA,CAAgB,KAAK,GAAG,CAAA;AACxB,QAAA,gBAAA,CAAiB,OAAA,GAAU,CAAA;AAC3B,QAAA,gBAAA,CAAiB,CAAC,CAAA;AAClB,QAAA,OAAO,IAAA;AAAA,MACT;AACA,MAAA,IAAI,KAAA,CAAM,QAAQ,OAAA,EAAS;AACzB,QAAA,MAAM,IAAA,GAAO,WAAA,CAAY,gBAAA,CAAiB,OAAO,CAAA;AACjD,QAAA,IAAI,CAAC,MAAM,OAAO,KAAA;AAClB,QAAA,KAAA,CAAM,cAAA,EAAe;AACrB,QAAA,KAAA,CAAM,eAAA,EAAgB;AACtB,QAAA,IAAI,gBAAA,CAAiB,IAAI,CAAA,EAAG;AAC1B,UAAA,eAAA,CAAgB,KAAK,GAAG,CAAA;AACxB,UAAA,gBAAA,CAAiB,OAAA,GAAU,CAAA;AAC3B,UAAA,gBAAA,CAAiB,CAAC,CAAA;AAClB,UAAA,OAAO,IAAA;AAAA,QACT;AACA,QAAA,IAAA,CAAK,OAAA,CAAQ,EAAE,UAAA,EAAY,KAAA,EAAO,EAAE,IAAA,EAAM,UAAA,CAAW,IAAA,EAAM,EAAA,EAAI,UAAA,CAAW,EAAA,EAAG,EAAG,CAAA;AAChF,QAAA,OAAO,IAAA;AAAA,MACT;AACA,MAAA,OAAO,KAAA;AAAA,IACT,CAAA;AACA,IAAA,MAAM,yBAAA,GAA4B,UAAA,CAAW,gCAAA,CAAiC,aAAa,CAAA;AAC3F,IAAA,OAAO,MAAM;AACX,MAAA,yBAAA,EAA0B;AAC1B,MAAA,KAAA,MAAW,CAAC,SAAA,EAAW,KAAK,CAAA,IAAK;AAAA,QAC/B,CAAC,eAAA,EAAiB,QAAA,CAAS,QAAQ,CAAA;AAAA,QACnC,CAAC,eAAA,EAAiB,QAAA,CAAS,QAAQ,CAAA;AAAA,QACnC,CAAC,uBAAA,EAAyB,QAAA,CAAS,gBAAgB;AAAA,OACrD,EAAY;AACV,QAAA,IAAI,KAAA,KAAU,IAAA,EAAM,aAAA,CAAc,eAAA,CAAgB,SAAS,CAAA;AAAA,aACtD,aAAA,CAAc,YAAA,CAAa,SAAA,EAAW,KAAK,CAAA;AAAA,MAClD;AAAA,IACF,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,WAAA,EAAa,UAAA,EAAY,QAAQ,SAAA,EAAW,aAAA,EAAe,UAAU,CAAC,CAAA;AAE1E,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,OAAA,CAAQ,OAAA,EACJ,cAA2B,oBAAoB,CAAA,EAC/C,eAAe,EAAE,KAAA,EAAO,WAAW,CAAA;AAAA,EACzC,CAAA,EAAG,CAAC,aAAa,CAAC,CAAA;AAElB,EAAA,IAAI,CAAC,UAAA,IAAc,aAAA,CAAc,MAAA,KAAW,GAAG,OAAO,IAAA;AAEtD,EAAA,uBACEJ,GAAAA,CAACS,OAAAA,CAAQ,IAAA,EAAR,EAAa,IAAA,EAAI,IAAA,EAAC,KAAA,EAAO,KAAA,EACxB,0BAAAT,GAAAA,CAACS,OAAAA,CAAQ,MAAA,EAAR,EAAe,WACd,QAAA,kBAAAT,GAAAA;AAAA,IAACS,OAAAA,CAAQ,UAAA;AAAA,IAAR;AAAA,MACC,MAAA;AAAA,MACA,SAAA,EAAU,gCAAA;AAAA,MACV,cAAA,EAAe,OAAA;AAAA,MACf,IAAA,EAAK,QAAA;AAAA,MACL,KAAA,EAAM,OAAA;AAAA,MACN,UAAA,EAAY,CAAA;AAAA,MACZ,gBAAA,EAAkB,EAAA;AAAA,MAClB,oBAAoB,EAAE,IAAA,EAAM,QAAQ,KAAA,EAAO,OAAA,EAAS,kBAAkB,MAAA,EAAO;AAAA,MAE7E,QAAA,kBAAAR,IAAAA;AAAA,QAACQ,OAAAA,CAAQ,KAAA;AAAA,QAAR;AAAA,UACC,SAAA,EAAU,iBAAA;AAAA,UACV,UAAA,EAAY,KAAA;AAAA,UACZ,KAAA,EAAO,UAAA;AAAA,UACP,YAAA,EAAc,KAAA;AAAA,UAEd,QAAA,EAAA;AAAA,4BAAAT,GAAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACC,YAAA,EAAW,cAAA;AAAA,gBACX,SAAA,EAAW,GAAG,SAAS,CAAA,iBAAA,CAAA;AAAA,gBACvB,EAAA,EAAI,MAAA;AAAA,gBACJ,GAAA,EAAK,OAAA;AAAA,gBACL,IAAA,EAAK,SAAA;AAAA,gBAEL,QAAA,kBAAAA,IAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wBACZ,QAAA,EAAA,aAAA,CAAc,GAAA,CAAI,CAAC,IAAA,EAAM,KAAA,KAAU;AAClC,kBAAA,MAAM,aAAa,IAAA,CAAK,IAAA;AACxB,kBAAA,MAAM,IAAA,GAAO,iBAAiB,IAAI,CAAA;AAElC,kBAAA,uBACEC,IAAAA;AAAA,oBAAC,QAAA;AAAA,oBAAA;AAAA,sBACC,eAAA,EAAe,CAAC,SAAA,IAAa,KAAA,KAAU,aAAA;AAAA,sBACvC,IAAA,EAAK,QAAA;AAAA,sBAEL,SAAA,EAAU,oBAAA;AAAA,sBACV,kBAAA,EAAkB,CAAC,SAAA,IAAa,KAAA,KAAU,gBAAgB,EAAA,GAAK,MAAA;AAAA,sBAC/D,EAAA,EAAI,CAAA,EAAG,MAAM,CAAA,aAAA,EAAgB,KAAK,CAAA,CAAA;AAAA,sBAClC,cAAc,MAAM;AAClB,wBAAA,gBAAA,CAAiB,OAAA,GAAU,KAAA;AAC3B,wBAAA,gBAAA,CAAiB,KAAK,CAAA;AACtB,wBAAA,eAAA,CAAgB,gBAAA,CAAiB,IAAI,CAAA,GAAI,IAAA,CAAK,MAAM,IAAI,CAAA;AAAA,sBAC1D,CAAA;AAAA,sBACA,WAAA,EAAa,CAAC,KAAA,KAAU,KAAA,CAAM,cAAA,EAAe;AAAA,sBAC7C,SAAS,MAAM;AACb,wBAAA,IAAI,gBAAA,CAAiB,IAAI,CAAA,EAAG;AAC1B,0BAAA,eAAA,CAAgB,KAAK,GAAG,CAAA;AACxB,0BAAA,gBAAA,CAAiB,OAAA,GAAU,CAAA;AAC3B,0BAAA,gBAAA,CAAiB,CAAC,CAAA;AAAA,wBACpB,CAAA,MAAO;AACL,0BAAA,IAAA,CAAK,OAAA,CAAQ,EAAE,UAAA,EAAY,KAAA,EAAO,EAAE,IAAA,EAAM,UAAA,CAAW,IAAA,EAAM,EAAA,EAAI,UAAA,CAAW,EAAA,EAAG,EAAG,CAAA;AAAA,wBAClF;AAAA,sBACF,CAAA;AAAA,sBACA,IAAA,EAAK,QAAA;AAAA,sBAEJ,QAAA,EAAA;AAAA,wBAAA,UAAA,mBACGD,GAAAA,CAAC,UAAA,EAAA,EAAW,aAAA,EAAa,IAAA,EAAM,WAAU,oBAAA,EAAqB,IAAA,EAAM,EAAA,EAAI,WAAA,EAAa,CAAA,EAAG,CAAA,mBACxFA,GAAAA,CAACK,aAAAA,EAAA,EAAc,aAAA,EAAY,MAAA,EAAO,SAAA,EAAU,sBAAqB,IAAA,EAAY,IAAA,EAAM,EAAA,EAAI,WAAA,EAAa,CAAA,EAAG,CAAA;AAAA,wCAC3GL,GAAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,IAAA,CAAK,KAAA,EAAM,CAAA;AAAA,wBACjB,iBAAiB,IAAI,CAAA,mBAClBA,GAAAA,CAACK,aAAAA,EAAA,EAAc,aAAA,EAAY,MAAA,EAAO,SAAA,EAAU,oBAAA,EAAqB,MAAMH,eAAAA,CAAgB,YAAA,EAAc,MAAM,EAAA,EAAI,WAAA,EAAa,GAAG,CAAA,GAC/H;AAAA;AAAA,qBAAA;AAAA,oBA3BC,IAAA,CAAK;AAAA,mBA4BZ;AAAA,gBAEJ,CAAC,CAAA,EACH;AAAA;AAAA,aACF;AAAA,YACC,4BACCF,GAAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACC,cAAY,SAAA,CAAU,KAAA;AAAA,gBACtB,SAAA,EAAW,GAAG,SAAS,CAAA,4CAAA,CAAA;AAAA,gBACvB,IAAA,EAAK,SAAA;AAAA,gBAEL,QAAA,kBAAAA,IAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wBACZ,QAAA,EAAA,gBAAA,CAAiB,GAAA,CAAI,CAAC,IAAA,EAAM,KAAA,KAAU;AACrC,kBAAA,MAAM,aAAa,IAAA,CAAK,IAAA;AACxB,kBAAA,MAAM,IAAA,GAAO,iBAAiB,IAAI,CAAA;AAClC,kBAAA,uBACEC,IAAAA;AAAA,oBAAC,QAAA;AAAA,oBAAA;AAAA,sBACC,iBAAe,KAAA,KAAU,aAAA;AAAA,sBACzB,SAAA,EAAU,oBAAA;AAAA,sBACV,kBAAA,EAAkB,KAAA,KAAU,aAAA,GAAgB,EAAA,GAAK,MAAA;AAAA,sBACjD,IAAI,CAAA,EAAG,MAAM,IAAI,SAAA,CAAU,GAAG,WAAW,KAAK,CAAA,CAAA;AAAA,sBAE9C,OAAA,EAAS,MAAM,IAAA,CAAK,OAAA,CAAQ,EAAE,UAAA,EAAY,KAAA,EAAO,EAAE,IAAA,EAAM,WAAW,IAAA,EAAM,EAAA,EAAI,UAAA,CAAW,EAAA,IAAM,CAAA;AAAA,sBAC/F,WAAA,EAAa,CAAC,KAAA,KAAU,KAAA,CAAM,cAAA,EAAe;AAAA,sBAC7C,cAAc,MAAM;AAClB,wBAAA,gBAAA,CAAiB,OAAA,GAAU,KAAA;AAC3B,wBAAA,gBAAA,CAAiB,KAAK,CAAA;AAAA,sBACxB,CAAA;AAAA,sBACA,IAAA,EAAK,QAAA;AAAA,sBACL,IAAA,EAAK,QAAA;AAAA,sBAEJ,QAAA,EAAA;AAAA,wBAAA,UAAA,mBACGD,GAAAA,CAAC,UAAA,EAAA,EAAW,aAAA,EAAa,IAAA,EAAM,WAAU,oBAAA,EAAqB,IAAA,EAAM,EAAA,EAAI,WAAA,EAAa,CAAA,EAAG,CAAA,mBACxFA,GAAAA,CAACK,aAAAA,EAAA,EAAc,aAAA,EAAY,MAAA,EAAO,SAAA,EAAU,sBAAqB,IAAA,EAAY,IAAA,EAAM,EAAA,EAAI,WAAA,EAAa,CAAA,EAAG,CAAA;AAAA,wCAC3GL,GAAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,IAAA,CAAK,KAAA,EAAM;AAAA;AAAA,qBAAA;AAAA,oBAbb,IAAA,CAAK;AAAA,mBAcZ;AAAA,gBAEJ,CAAC,CAAA,EACH;AAAA;AAAA,aACF,GACE;AAAA;AAAA;AAAA;AACN;AAAA,KAEJ,CAAA,EACF,CAAA;AAEJ;AAYA,IAAM,aAAA,GAAgB,CAAC,EAAE,IAAA,EAAK,KAC7B,IAAA,CAAK,IAAA,mBACFA,GAAAA,CAACK,aAAAA,EAAA,EAAc,aAAA,EAAY,MAAA,EAAO,IAAA,EAAM,IAAA,CAAK,IAAA,EAAM,IAAA,EAAM,EAAA,EAAI,WAAA,EAAa,CAAA,EAAG,CAAA,mBAC7EL,GAAAA,CAAC,MAAA,EAAA,EAAK,aAAA,EAAY,MAAA,EAAO,SAAA,EAAU,gCAAA,EAAiC,CAAA;AAExE,IAAM,kBAAkB,CAAC;AAAA,EACxB,MAAA;AAAA,EACA;AACD,CAAA,KAGM;AACL,EAAA,MAAM,WAAW,oBAAA,CAAqB,OAAA,CAAQ,WAAW,OAAA,CAAQ,WAAA,EAAa,QAAQ,WAAW,CAAA;AACjG,EAAA,MAAM,OAAA,GAAU,QAAA,CAAS,aAAA,KAAkB,MAAA,CAAO,EAAA;AAClD,EAAA,uBACCC,IAAAA;AAAA,IAACM,IAAAA,CAAK,IAAA;AAAA,IAAL;AAAA,MACA,cAAA,EAAc,OAAO,MAAA,IAAU,MAAA;AAAA,MAC/B,oBAAkB,MAAA,CAAO,cAAA,GAAiB,CAAA,EAAG,MAAA,CAAO,EAAE,CAAA,OAAA,CAAA,GAAY,MAAA;AAAA,MAClE,SAAA,EAAU,oBAAA;AAAA,MACV,aAAA,EAAa,MAAA,CAAO,MAAA,GAAS,EAAA,GAAK,MAAA;AAAA,MAClC,aAAA,EAAa,MAAA,CAAO,MAAA,KAAW,QAAA,GAAW,EAAA,GAAK,MAAA;AAAA,MAC/C,QAAA,EAAU,MAAA,CAAO,QAAA,IAAY,OAAA,CAAQ,SAAS,aAAa,CAAA;AAAA,MAC3D,OAAO,MAAA,CAAO,KAAA;AAAA,MACd,SAAS,MAAM;AAAE,QAAA,KAAK,OAAA,CAAQ,IAAI,MAAM,CAAA;AAAA,MAAG,CAAA;AAAA,MAE3C,QAAA,EAAA;AAAA,wBAAAP,GAAAA,CAAC,aAAA,EAAA,EAAc,IAAA,EAAM,MAAA,EAAQ,CAAA;AAAA,wBAC7BA,IAAC,MAAA,EAAA,EAAM,QAAA,EAAA,OAAA,GAAU,GAAG,MAAA,CAAO,KAAK,CAAA,MAAA,CAAA,GAAM,MAAA,CAAO,KAAA,EAAM,CAAA;AAAA,QAClD,MAAA,CAAO,cAAA,mBAAiBA,GAAAA,CAAC,UAAK,SAAA,EAAU,oBAAA,EAAqB,EAAA,EAAI,CAAA,EAAG,MAAA,CAAO,EAAE,CAAA,OAAA,CAAA,EAAY,QAAA,EAAA,MAAA,CAAO,gBAAe,CAAA,GAAU;AAAA;AAAA;AAAA,GAC3H;AAEF,CAAA;AAEA,IAAM,iBAAiB,CAAC;AAAA,EACvB,SAAA;AAAA,EACA,IAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA;AACD,CAAA,KAMM;AACL,EAAA,MAAM,WAAW,oBAAA,CAAqB,OAAA,CAAQ,WAAW,OAAA,CAAQ,WAAA,EAAa,QAAQ,WAAW,CAAA;AACjG,EAAA,MAAM,IAAA,GAAO,QAAA,CAAS,IAAA,IAAQ,QAAA,CAAS,OAAA,CAAQ,SAAS,OAAA,IAAW,QAAA,CAAS,OAAA,CAAQ,EAAA,KAAO,IAAA,CAAK,EAAA;AAChG,EAAA,MAAM,QAAQ,IAAA,CAAK,KAAA;AACnB,EAAA,uBACCC,IAAAA;AAAA,IAACQ,OAAAA,CAAQ,IAAA;AAAA,IAAR;AAAA,MACA,KAAA,EAAO,KAAA;AAAA,MACP,YAAA,EAAc,CAAC,QAAA,KAAa;AAC3B,QAAA,IAAI,QAAA,EAAU,OAAA,CAAQ,SAAA,CAAU,IAAA,CAAK,EAAE,CAAA;AAAA,aAAA,IAC9B,IAAA,UAAc,YAAA,EAAa;AAAA,MACrC,CAAA;AAAA,MACA,IAAA;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAAR,IAAAA;AAAA,UAACQ,OAAAA,CAAQ,OAAA;AAAA,UAAR;AAAA,YACA,UAAU,IAAA,CAAK,QAAA;AAAA,YACf,YAAA,EAAc,KAAA;AAAA,YACd,MAAA,EAAQ,CAAC,YAAA,qBACRT,GAAAA;AAAA,cAACO,IAAAA,CAAK,IAAA;AAAA,cAAL;AAAA,gBACC,GAAG,YAAA;AAAA,gBACJ,oBAAkB,IAAA,CAAK,cAAA,GAAiB,CAAA,EAAG,IAAA,CAAK,EAAE,CAAA,OAAA,CAAA,GAAY,MAAA;AAAA,gBAC9D,SAAA,EAAU,oBAAA;AAAA,gBACV,YAAA,EAAc,KAAA;AAAA,gBACd,OAAO,IAAA,CAAK,KAAA;AAAA,gBACZ,IAAA,EAAK;AAAA;AAAA,aACN;AAAA,YAGD,QAAA,EAAA;AAAA,8BAAAP,GAAAA,CAAC,iBAAc,IAAA,EAAY,CAAA;AAAA,8BAC3BA,GAAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,IAAA,CAAK,KAAA,EAAM,CAAA;AAAA,cACjB,IAAA,CAAK,cAAA,mBAAiBA,GAAAA,CAAC,UAAK,SAAA,EAAU,oBAAA,EAAqB,EAAA,EAAI,CAAA,EAAG,IAAA,CAAK,EAAE,CAAA,OAAA,CAAA,EAAY,QAAA,EAAA,IAAA,CAAK,gBAAe,CAAA,GAAU;AAAA;AAAA;AAAA,SACrH;AAAA,wBACAA,GAAAA,CAACS,OAAAA,CAAQ,MAAA,EAAR,EAAe,WACf,QAAA,kBAAAT,GAAAA;AAAA,UAACS,OAAAA,CAAQ,UAAA;AAAA,UAAR;AAAA,YACA,KAAA,EAAM,OAAA;AAAA,YACN,oBAAoB,EAAE,IAAA,EAAM,QAAQ,KAAA,EAAO,OAAA,EAAS,kBAAkB,MAAA,EAAO;AAAA,YAC7E,gBAAA,EAAkB,EAAA;AAAA,YAClB,cAAA,EAAe,OAAA;AAAA,YACf,IAAA,EAAK,OAAA;AAAA,YACL,UAAA,EAAY,CAAA;AAAA,YAEZ,QAAA,kBAAAT,IAACS,OAAAA,CAAQ,KAAA,EAAR,EAAc,YAAA,EAAY,IAAA,CAAK,KAAA,EAAO,SAAA,EAAU,qBAAA,EAAsB,IAAA,EAAK,UAAS,KAAA,EACpF,QAAA,kBAAAT,IAAC,KAAA,EAAA,EAAM,MAAA,EAAgB,OAAO,MAAM,OAAA,CAAQ,YAAA,EAAa,EAAG,CAAA,EAC7D;AAAA;AAAA,SACD,EACD;AAAA;AAAA;AAAA,GACD;AAEF,CAAA;AAEA,IAAM,mBAAmB,CAAC;AAAA,EACzB,SAAA;AAAA,EACA,IAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA;AACD,CAAA,qBAOCC,IAAAA;AAAA,EAACM,IAAAA,CAAK,WAAA;AAAA,EAAL;AAAA,IACA,YAAA,EAAc,CAAC,IAAA,KAAS;AAAE,MAAA,IAAI,IAAA,EAAM,OAAA,CAAQ,WAAA,CAAY,IAAA,CAAK,EAAE,CAAA;AAAA,mBAAgB,YAAA,EAAa;AAAA,IAAG,CAAA;AAAA,IAE/F,QAAA,EAAA;AAAA,sBAAAN,KAACM,IAAAA,CAAK,cAAA,EAAL,EAAoB,kBAAA,EAAkB,IAAA,CAAK,iBAAiB,CAAA,EAAG,IAAA,CAAK,EAAE,CAAA,OAAA,CAAA,GAAY,MAAA,EAAW,WAAU,oBAAA,EAAqB,QAAA,EAAU,KAAK,QAAA,EAAU,KAAA,EAAO,KAAK,KAAA,EACjK,QAAA,EAAA;AAAA,wBAAAP,GAAAA,CAAC,iBAAc,IAAA,EAAY,CAAA;AAAA,wBAC3BA,GAAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,IAAA,CAAK,KAAA,EAAM,CAAA;AAAA,QACjB,IAAA,CAAK,cAAA,mBAAiBA,GAAAA,CAAC,UAAK,SAAA,EAAU,oBAAA,EAAqB,EAAA,EAAI,CAAA,EAAG,IAAA,CAAK,EAAE,CAAA,OAAA,CAAA,EAAY,QAAA,EAAA,IAAA,CAAK,gBAAe,CAAA,GAAU,IAAA;AAAA,wBACpHA,GAAAA,CAACK,aAAAA,EAAA,EAAc,eAAY,MAAA,EAAO,SAAA,EAAU,uBAAA,EAAwB,IAAA,EAAMH,eAAAA,CAAgB,YAAA,EAAc,IAAA,EAAM,EAAA,EAAI,aAAa,CAAA,EAAG;AAAA,OAAA,EACnI,CAAA;AAAA,sBACAF,IAACO,IAAAA,CAAK,MAAA,EAAL,EAAY,SAAA,EACZ,QAAA,kBAAAP,GAAAA,CAACO,IAAAA,CAAK,UAAA,EAAL,EAAgB,OAAM,OAAA,EAAQ,gBAAA,EAAkB,EAAA,EAAI,cAAA,EAAe,OAAA,EAAQ,IAAA,EAAK,SAAQ,UAAA,EAAY,CAAA,EACpG,QAAA,kBAAAP,GAAAA,CAACO,IAAAA,CAAK,KAAA,EAAL,EAAW,YAAA,EAAY,IAAA,CAAK,KAAA,EAAO,SAAA,EAAU,eAAA,EAAgB,KAAA,EAC5D,eAAK,QAAA,CAAS,GAAA,CAAI,CAAC,KAAA,qBAAUP,GAAAA,CAAC,iBAAc,SAAA,EAAsB,IAAA,EAAM,KAAA,EAAsB,OAAA,EAAkB,KAAA,EAAc,MAAA,EAAA,EAA1C,MAAM,EAAoD,CAAE,CAAA,EAClJ,CAAA,EACD,CAAA,EACD;AAAA;AAAA;AACD,CAAA;AAGD,IAAM,gBAAgB,CAAC;AAAA,EACtB,SAAA;AAAA,EACA,IAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA;AACD,CAAA,KAMM;AACL,EAAA,IAAI,IAAA,CAAK,SAAS,QAAA,EAAU,uBAAOA,GAAAA,CAAC,eAAA,EAAA,EAAgB,MAAA,EAAQ,IAAA,EAAM,OAAA,EAAkB,CAAA;AACpF,EAAA,IAAI,IAAA,CAAK,IAAA,KAAS,OAAA,EAAS,uBAAOA,GAAAA,CAAC,cAAA,EAAA,EAAe,SAAA,EAAsB,IAAA,EAAY,OAAA,EAAkB,KAAA,EAAc,MAAA,EAAgB,CAAA;AACpI,EAAA,uBAAOA,GAAAA,CAAC,gBAAA,EAAA,EAAiB,WAAsB,IAAA,EAAY,OAAA,EAAkB,OAAc,MAAA,EAAgB,CAAA;AAC5G,CAAA;AAEO,IAAM,kCAAkC,CAAC;AAAA,EAC/C,QAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA;AAAA,EACA;AACD,CAAA,KAA4C;AAC3C,EAAA,MAAM,WAAW,oBAAA,CAAqB,OAAA,CAAQ,WAAW,OAAA,CAAQ,WAAA,EAAa,QAAQ,WAAW,CAAA;AACjG,EAAA,MAAM,cAAA,GAAiB,oBAAA,CAAqB,QAAA,CAAS,MAAA,CAAO,SAAA,EAAW,SAAS,MAAA,CAAO,WAAA,EAAa,QAAA,CAAS,MAAA,CAAO,WAAW,CAAA;AAC/H,EAAA,MAAM,IAAA,GAAO,SAAS,OAAA,EAAQ;AAC9B,EAAA,SAAA,CAAU,MAAM;AACf,IAAA,IAAI,QAAA,CAAS,IAAA,IAAQ,CAAC,cAAA,UAAwB,KAAA,EAAM;AAAA,EACrD,GAAG,CAAC,OAAA,EAAS,QAAA,CAAS,IAAA,EAAM,cAAc,CAAC,CAAA;AAC3C,EAAA,uBAAOC,IAAAA;AAAA,IAACM,IAAAA,CAAK,IAAA;AAAA,IAAL;AAAA,MACP,KAAA,EAAO,KAAA;AAAA,MACP,YAAA,EAAc,CAAC,IAAA,KAAS;AAAE,QAAA,IAAI,CAAC,IAAA,EAAM,OAAA,CAAQ,KAAA,EAAM;AAAA,MAAG,CAAA;AAAA,MACtD,oBAAA,EAAsB,CAAC,IAAA,KAAS;AAC/B,QAAA,IAAI,IAAA,EAAM;AACV,QAAA,MAAM,aAAA,GAAgB,kBAAkB,WAAA,GAAc,MAAA,GAAS,UAAU,SAAA,IAAa,MAAA,GAAS,OAAO,OAAA,GAAU,IAAA;AAChH,QAAA,aAAA,EAAe,KAAA,EAAM;AAAA,MACtB,CAAA;AAAA,MACA,MAAM,QAAA,CAAS,IAAA;AAAA,MAEd,QAAA,EAAA;AAAA,QAAA,OAAA;AAAA,QACA,QAAA,CAAS,uBAAOP,GAAAA,CAACO,KAAK,MAAA,EAAL,EAAY,WAC7B,QAAA,kBAAAP,GAAAA;AAAA,UAACO,IAAAA,CAAK,UAAA;AAAA,UAAL;AAAA,YACA,KAAA,EAAM,OAAA;AAAA,YACN,MAAA;AAAA,YACA,oBAAoB,EAAE,IAAA,EAAM,QAAQ,KAAA,EAAO,OAAA,EAAS,kBAAkB,MAAA,EAAO;AAAA,YAC7E,gBAAA,EAAkB,EAAA;AAAA,YAClB,cAAA,EAAe,OAAA;AAAA,YACf,IAAA,EAAK,QAAA;AAAA,YACL,UAAA,EAAY,CAAA;AAAA,YAEZ,QAAA,kBAAAN,KAACM,IAAAA,CAAK,KAAA,EAAL,EAAW,YAAA,EAAY,SAAA,EAAW,SAAA,EAAU,eAAA,EAAgB,KAAA,EAC3D,QAAA,EAAA;AAAA,cAAA,IAAA,CAAK,QAAA,CAAS,IAAI,CAAC,OAAA,EAAS,iCAC5BN,IAAAA,CAACO,YAAA,EACC,QAAA,EAAA;AAAA,gBAAA,YAAA,GAAe,CAAA,mBAAIR,GAAAA,CAACO,IAAAA,CAAK,WAAL,EAAe,SAAA,EAAU,2BAA0B,CAAA,GAAK,IAAA;AAAA,gBAC5E,QAAQ,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,qBAASP,GAAAA,CAAC,aAAA,EAAA,EAAc,SAAA,EAAsB,IAAA,EAA0B,SAAkB,KAAA,EAAc,MAAA,EAAQ,KAAK,MAAA,EAAA,EAAtD,IAAA,CAAK,EAAyD,CAAE;AAAA,eAAA,EAAA,EAFrI,OAAA,CAAQ,EAGvB,CACA,CAAA;AAAA,cACA,QAAA,CAAS,KAAA,mBAAQA,GAAAA,CAAC,KAAA,EAAA,EAAI,WAAA,EAAU,QAAA,EAAS,SAAA,EAAU,qBAAA,EAAsB,IAAA,EAAK,QAAA,EAAS,QAAA,EAAA,+BAAA,EAA6B,CAAA,GAAS;AAAA,aAAA,EAC/H;AAAA;AAAA,WAEF,CAAA,GAAiB;AAAA;AAAA;AAAA,GACjB;AACF;AAEO,IAAM,sBAAsB,CAAC;AAAA,EAClC,UAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,KAAgC;AAC9B,EAAA,MAAM,WAAA,GAAc,8BAA8B,UAAU,CAAA;AAC5D,EAAA,MAAM,QAAQ,WAAA,CAAY,WAAA;AAC1B,EAAA,MAAM,aAAaG,uBAAAA,EAAwB;AAC3C,EAAA,MAAM,gBAAA,GAAmB,OAA8B,IAAI,CAAA;AAC3D,EAAA,MAAM,YAAA,GAAe,OAAkC,IAAI,CAAA;AAC3D,EAAA,MAAM,OAAA,GAAU,WAAW,SAAA,CAAU,OAAA;AACrC,EAAA,MAAM,eAAe,oBAAA,CAAqB,OAAA,CAAQ,WAAW,OAAA,CAAQ,WAAA,EAAa,QAAQ,WAAW,CAAA;AACrG,EAAA,MAAM,eAAA,GAAkB,MAAA,CAAO,YAAA,CAAa,IAAI,CAAA;AAChD,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,UAAA;AACJ,IAAA,IAAI,eAAA,CAAgB,OAAA,IAAW,CAAC,YAAA,CAAa,IAAA,EAAM;AACjD,MAAA,UAAA,GAAa,WAAW,MAAM;AAC5B,QAAA,IAAI,gBAAA,CAAiB,OAAA,EAAS,WAAA,EAAa,gBAAA,CAAiB,QAAQ,KAAA,EAAM;AAAA,MAC5E,CAAC,CAAA;AAAA,IACH;AACA,IAAA,eAAA,CAAgB,UAAU,YAAA,CAAa,IAAA;AACvC,IAAA,OAAO,MAAM;AACX,MAAA,IAAI,UAAA,eAAyB,UAAU,CAAA;AAAA,IACzC,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,YAAA,CAAa,IAAI,CAAC,CAAA;AACtB,EAAA,IAAI,KAAA,IAAS,CAAC,YAAA,CAAa,IAAA,eAAmB,OAAA,GAAU,KAAA;AACxD,EAAA,MAAM,WAAA,GAAc,aAAa,MAAA,IAAU,KAAA;AAE3C,EAAA,MAAM,WAAA,GAAc,WAAA,CAAY,CAAC,QAAA,KAAsB;AACrD,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,IAAI,CAAC,aAAa,OAAA,EAAS;AACzB,QAAA,OAAA,CAAQ,KAAA,EAAM;AACd,QAAA;AAAA,MACF;AACA,MAAA,OAAA,CAAQ,IAAA,CAAK,aAAa,OAAO,CAAA;AACjC,MAAA;AAAA,IACF;AACA,IAAA,OAAA,CAAQ,KAAA,EAAM;AAAA,EAChB,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AAEZ,EAAA,IAAI,CAAC,UAAA,CAAW,QAAA,EAAU,OAAO,IAAA;AACjC,EAAA,MAAM,yBACJH,GAAAA;AAAA,IAAC,yBAAA;AAAA,IAAA;AAAA,MACC,WAAW,WAAA,GACP,CAAA,YAAA,EAAe,YAAY,SAAA,IAAa,WAAA,CAAY,QAAQ,CAAA,MAAA,CAAA,GAC5D,MAAA;AAAA,MACJ,SAAA,EAAU,wBAAA;AAAA,MACV,UAAA;AAAA,MACA,UAAA,EAAY,gBAAA;AAAA,MACZ,UAAU,YAAA,CAAa,IAAA;AAAA,MACvB,YAAY,MAAM;AAChB,QAAA,WAAA,CAAY,CAAC,aAAa,IAAI,CAAA;AAAA,MAChC,CAAA;AAAA,MACA,gBAAA,EAAkB,CAAC,QAAA,KAAa;AAC9B,QAAA,IAAI,QAAA,cAAsB,KAAK,CAAA;AAAA,MACjC,CAAA;AAAA,MAEC,QAAA,EAAA,WAAA,mBACCA,GAAAA,CAAC,MAAA,EAAA,EAAK,aAAA,EAAY,QAAO,SAAA,EAAW,EAAA,CAAG,iBAAA,EAAmB,SAAS,CAAA,EACjE,QAAA,kBAAAA,IAACK,aAAAA,EAAA,EAAc,aAAA,EAAY,MAAA,EAAO,IAAA,EAAMH,eAAAA,CAAgB,UAAA,EAAY,IAAA,EAAM,EAAA,EAAI,WAAA,EAAa,CAAA,EAAG,CAAA,EAChG,CAAA,GACE;AAAA;AAAA,GACN;AAEH,EAAA,MAAM,WAAW,WAAA,GAAc,UAAA,CAAW,SAAA,CAAU,OAAA,CAAQ,WAAW,CAAA,GAAI,IAAA;AAC3E,EAAA,uBAAOD,IAAAA,CAAAO,QAAAA,EAAA,EACL,QAAA,EAAA;AAAA,IAAA,MAAA;AAAA,IACA,2BAAWR,GAAAA;AAAA,MAAC,+BAAA;AAAA,MAAA;AAAA,QACZ,QAAA;AAAA,QACA,OAAA;AAAA,QACA,MAAA,EAAQ,gBAAA;AAAA,QACR,WAAW,WAAA,GAAc,CAAA,YAAA,EAAe,YAAY,SAAA,IAAa,WAAA,CAAY,QAAQ,CAAA,MAAA,CAAA,GAAW,eAAA;AAAA,QAChG,SAAA;AAAA,QACA,KAAA,EAAO;AAAA;AAAA,KACR,GAAK;AAAA,GAAA,EACN,CAAA;AACD;AAEO,IAAM,aAAa,CAAC;AAAA,EACzB,SAAA,GAAY,mBAAA;AAAA,EACZ,gBAAA;AAAA,EACA,gBAAA;AAAA,EACA,KAAA;AAAA,EACA,GAAG;AACL,CAAA,KAAuB;AACrB,EAAA,MAAM,UAAA,GAAa,wBAAwB,KAAK,CAAA;AAEhD,EAAA,MAAM,yBACJA,GAAAA,CAAC,iCACC,QAAA,kBAAAC,IAAAA,CAAC,SAAI,SAAA,EACH,QAAA,EAAA;AAAA,oBAAAD,GAAAA,CAAC,iBAAA,EAAA,EAAkB,UAAA,EAAwB,SAAA,EAAW,gBAAA,EAAkB,CAAA;AAAA,oBACxEA,GAAAA,CAAC,mBAAA,EAAA,EAAoB,UAAA,EAAwB,WAAW,gBAAA,EAAkB,CAAA;AAAA,oBAC1EA,GAAAA,CAAC,yBAAA,EAAA,EAA0B,UAAA,EAAwB,WAAW,gBAAA,EAAkB,CAAA;AAAA,oBAChFA,GAAAA,CAAC,mBAAA,EAAA,EAAoB,UAAA,EAAwB,WAAW,gBAAA,EAAkB,CAAA;AAAA,oBAC1EA,GAAAA,CAAC,mBAAA,EAAA,EAAoB,UAAA,EAAwB,WAAW,gBAAA,EAAkB;AAAA,GAAA,EAC5E,CAAA,EACF,CAAA;AAEF,EAAA,OAAO,wBAAQA,GAAAA,CAACU,yBAAA,EAAwB,KAAA,EAAe,kBAAO,CAAA,GAA6B,MAAA;AAC7F","file":"index.js","sourcesContent":["import { Menu } from \"@base-ui/react/menu\";\nimport { Toolbar } from \"@base-ui/react/toolbar\";\nimport {\n OpenEditorTableBubbleMenu,\n useOpenEditorThemeStyle,\n type OpenEditorController,\n type OpenEditorTableCommand,\n type OpenEditorTableState,\n} from \"@openeditor/react\";\nimport { HugeiconsIcon } from \"@hugeicons/react\";\nimport { openEditorIcons, type OpenEditorIcon } from \"@openeditor/icons\";\nimport type { MouseEvent as ReactMouseEvent, ReactNode } from \"react\";\n\nexport type OpenEditorTableMenuProps = {\n controller: OpenEditorController;\n className?: string;\n container?: HTMLElement | null;\n};\n\ntype TableAction = {\n command: OpenEditorTableCommand;\n label: string;\n icon: OpenEditorIcon;\n danger?: boolean;\n};\n\nconst runTableCommandOnMouseDown = (\n event: ReactMouseEvent<HTMLElement>,\n controller: OpenEditorController,\n command: OpenEditorTableCommand,\n) => {\n if (event.button !== 0) return;\n event.preventDefault();\n controller.table.run(command);\n};\n\nconst runTableCommandOnKeyboardClick = (\n event: ReactMouseEvent<HTMLElement>,\n controller: OpenEditorController,\n command: OpenEditorTableCommand,\n) => {\n // Pointer activation already ran on mousedown, before a portaled menu can\n // blur and unmount its owning table bubble. Keyboard clicks have detail 0.\n if (event.detail === 0) controller.table.run(command);\n};\n\nconst TableActionMenu = ({\n controller,\n container,\n label,\n icon,\n actions,\n}: {\n controller: OpenEditorController;\n container?: HTMLElement | null;\n label: string;\n icon: OpenEditorIcon;\n actions: readonly TableAction[];\n}) => {\n const themeStyle = useOpenEditorThemeStyle();\n return (\n <Menu.Root modal={false}>\n <Menu.Trigger\n aria-label={`${label} actions`}\n className=\"oe-table-toolbar-trigger\"\n onMouseDown={(event) => event.preventDefault()}\n type=\"button\"\n >\n <HugeiconsIcon aria-hidden=\"true\" icon={icon} size={15} strokeWidth={2} />\n <span>{label}</span>\n <HugeiconsIcon aria-hidden=\"true\" icon={openEditorIcons.chevronDown} size={12} strokeWidth={2} />\n </Menu.Trigger>\n <Menu.Portal container={container}>\n <Menu.Positioner\n align=\"start\"\n collisionAvoidance={{ side: \"flip\", align: \"shift\", fallbackAxisSide: \"none\" }}\n collisionPadding={12}\n positionMethod=\"fixed\"\n side=\"bottom\"\n sideOffset={8}\n >\n <Menu.Popup aria-label={`${label} actions`} className=\"oe-table-action-menu\" style={themeStyle}>\n {actions.map((action) => (\n <Menu.Item\n className=\"oe-table-action-item\"\n data-danger={action.danger ? \"\" : undefined}\n disabled={!controller.table.can(action.command)}\n key={action.command}\n onClick={(event) => runTableCommandOnKeyboardClick(event, controller, action.command)}\n onMouseDown={(event) => runTableCommandOnMouseDown(event, controller, action.command)}\n >\n <HugeiconsIcon aria-hidden=\"true\" icon={action.icon} size={15} strokeWidth={2} />\n <span>{action.label}</span>\n </Menu.Item>\n ))}\n </Menu.Popup>\n </Menu.Positioner>\n </Menu.Portal>\n </Menu.Root>\n );\n};\n\nconst TableToolbarButton = ({\n active,\n children,\n controller,\n command,\n label,\n danger,\n}: {\n active?: boolean;\n children: ReactNode;\n controller: OpenEditorController;\n command: OpenEditorTableCommand;\n label: string;\n danger?: boolean;\n}) => (\n <Toolbar.Button\n aria-label={label}\n className=\"oe-table-toolbar-button\"\n data-active={active ? \"\" : undefined}\n data-danger={danger ? \"\" : undefined}\n disabled={!controller.table.can(command)}\n onClick={(event) => runTableCommandOnKeyboardClick(event, controller, command)}\n onMouseDown={(event) => runTableCommandOnMouseDown(event, controller, command)}\n title={label}\n type=\"button\"\n >\n {children}\n </Toolbar.Button>\n);\n\nconst rowActions: readonly TableAction[] = [\n { command: \"addRowBefore\", label: \"Insert row above\", icon: openEditorIcons.tableRowInsertBefore },\n { command: \"addRowAfter\", label: \"Insert row below\", icon: openEditorIcons.tableRowInsertAfter },\n { command: \"deleteRow\", label: \"Delete row\", icon: openEditorIcons.tableRowDelete, danger: true },\n];\n\nconst columnActions: readonly TableAction[] = [\n { command: \"addColumnBefore\", label: \"Insert column left\", icon: openEditorIcons.tableColumnInsertBefore },\n { command: \"addColumnAfter\", label: \"Insert column right\", icon: openEditorIcons.tableColumnInsertAfter },\n { command: \"deleteColumn\", label: \"Delete column\", icon: openEditorIcons.tableColumnDelete, danger: true },\n];\n\nconst TableToolbar = ({\n controller,\n container,\n state,\n}: {\n controller: OpenEditorController;\n container?: HTMLElement | null;\n state: OpenEditorTableState;\n}) => (\n <div onMouseDown={(event) => event.preventDefault()}>\n <Toolbar.Root aria-label=\"Table editing\" className=\"oe-table-toolbar\">\n <TableActionMenu\n actions={rowActions}\n container={container}\n controller={controller}\n icon={openEditorIcons.tableRow}\n label=\"Row\"\n />\n <TableActionMenu\n actions={columnActions}\n container={container}\n controller={controller}\n icon={openEditorIcons.tableColumn}\n label=\"Column\"\n />\n <span aria-hidden=\"true\" className=\"oe-table-toolbar-separator\" />\n <TableToolbarButton\n active={state.headerRow}\n command=\"toggleHeaderRow\"\n controller={controller}\n label={state.headerRow ? \"Remove header row\" : \"Make first row a header\"}\n >\n <HugeiconsIcon aria-hidden=\"true\" icon={openEditorIcons.tableHeaderRow} size={15} strokeWidth={2} />\n </TableToolbarButton>\n <TableToolbarButton\n active={state.headerColumn}\n command=\"toggleHeaderColumn\"\n controller={controller}\n label={state.headerColumn ? \"Remove header column\" : \"Make first column a header\"}\n >\n <HugeiconsIcon aria-hidden=\"true\" icon={openEditorIcons.tableHeaderColumn} size={15} strokeWidth={2} />\n </TableToolbarButton>\n {state.canSplitCell ? (\n <TableToolbarButton command=\"splitCell\" controller={controller} label=\"Split cell\">\n <HugeiconsIcon aria-hidden=\"true\" icon={openEditorIcons.splitCells} size={15} strokeWidth={2} />\n </TableToolbarButton>\n ) : (\n <TableToolbarButton command=\"mergeCells\" controller={controller} label=\"Merge selected cells\">\n <HugeiconsIcon aria-hidden=\"true\" icon={openEditorIcons.mergeCells} size={15} strokeWidth={2} />\n </TableToolbarButton>\n )}\n <TableToolbarButton command=\"deleteTable\" controller={controller} danger label=\"Delete table\">\n <HugeiconsIcon aria-hidden=\"true\" icon={openEditorIcons.delete} size={15} strokeWidth={2} />\n </TableToolbarButton>\n </Toolbar.Root>\n </div>\n);\n\nexport const OpenEditorTableMenu = ({\n controller,\n className = \"oe-table-menu\",\n container,\n}: OpenEditorTableMenuProps) => {\n const themeStyle = useOpenEditorThemeStyle();\n if (!controller.ready) return null;\n return (\n <OpenEditorTableBubbleMenu\n className={className}\n container={container}\n controller={controller}\n style={themeStyle}\n >\n {(state) => <TableToolbar container={container} controller={controller} state={state} />}\n </OpenEditorTableBubbleMenu>\n );\n};\n","import { Popover } from \"@base-ui/react/popover\";\nimport { OPENEDITOR_EMOJI_DATA_URL } from \"@openeditor/document/emoji\";\nimport {\n EmojiPicker,\n type EmojiPickerListComponents,\n type Locale,\n} from \"frimousse\";\nimport { useState, type CSSProperties, type ReactNode } from \"react\";\nexport { OPENEDITOR_EMOJI_DATA_URL } from \"@openeditor/document/emoji\";\n\nconst emojiListComponents: EmojiPickerListComponents = {\n CategoryHeader: ({ category, ...props }) => (\n <div className=\"oe-emoji-category\" {...props}>{category.label}</div>\n ),\n Row: ({ children, ...props }) => (\n <div className=\"oe-emoji-row\" {...props}>{children}</div>\n ),\n Emoji: ({ emoji, onClick, ...props }) => (\n <button\n {...props}\n aria-label={emoji.label}\n className=\"oe-emoji-option\"\n onClick={(event) => {\n event.stopPropagation();\n onClick?.(event);\n }}\n type=\"button\"\n >\n {emoji.emoji}\n </button>\n ),\n};\n\nexport type OpenEditorEmojiPickerProps = {\n emoji: string;\n onEmojiSelect: (emoji: string) => void;\n label: string;\n disabled?: boolean;\n container?: HTMLElement | null;\n className?: string;\n children?: ReactNode;\n locale?: Locale;\n emojibaseUrl?: string;\n emojiVersion?: number;\n popupStyle?: CSSProperties;\n};\n\nexport const OpenEditorEmojiPicker = ({\n emoji,\n onEmojiSelect,\n label,\n disabled = false,\n container,\n className,\n children,\n locale,\n emojibaseUrl = OPENEDITOR_EMOJI_DATA_URL,\n emojiVersion,\n popupStyle,\n}: OpenEditorEmojiPickerProps) => {\n const [open, setOpen] = useState(false);\n\n return (\n <Popover.Root open={open} onOpenChange={setOpen} modal={false}>\n <Popover.Trigger\n aria-label={label}\n className={[\"oe-emoji-trigger\", className].filter(Boolean).join(\" \")}\n disabled={disabled}\n type=\"button\"\n >\n {children ?? <span aria-hidden=\"true\">{emoji}</span>}\n </Popover.Trigger>\n <Popover.Portal container={container}>\n <Popover.Positioner\n align=\"start\"\n collisionPadding={12}\n positionMethod=\"fixed\"\n side=\"bottom\"\n sideOffset={8}\n >\n <Popover.Popup className=\"oe-emoji-popover\" style={popupStyle}>\n <EmojiPicker.Root\n className=\"oe-emoji-picker\"\n emojibaseUrl={emojibaseUrl}\n emojiVersion={emojiVersion}\n locale={locale}\n onEmojiSelect={(selection) => {\n onEmojiSelect(selection.emoji);\n setOpen(false);\n }}\n >\n <EmojiPicker.Search\n aria-label=\"Search emoji\"\n autoFocus\n className=\"oe-emoji-search\"\n placeholder=\"Search emoji…\"\n />\n <EmojiPicker.Viewport className=\"oe-emoji-viewport\">\n <EmojiPicker.Loading className=\"oe-emoji-state\">Loading emoji…</EmojiPicker.Loading>\n <EmojiPicker.Empty className=\"oe-emoji-state\">No emoji found.</EmojiPicker.Empty>\n <EmojiPicker.List\n className=\"oe-emoji-list\"\n components={emojiListComponents}\n />\n </EmojiPicker.Viewport>\n <footer className=\"oe-emoji-footer\">\n <EmojiPicker.ActiveEmoji>\n {({ emoji: active }) => active ? <><span aria-hidden=\"true\">{active.emoji}</span><span>{active.label}</span></> : \"Choose an emoji\"}\n </EmojiPicker.ActiveEmoji>\n <EmojiPicker.SkinToneSelector aria-label=\"Change skin tone\" />\n </footer>\n </EmojiPicker.Root>\n </Popover.Popup>\n </Popover.Positioner>\n </Popover.Portal>\n </Popover.Root>\n );\n};\n","import \"./styles.css\";\nimport { OpenEditorTableMenu } from \"./table-menu\";\nexport { OpenEditorTableMenu, type OpenEditorTableMenuProps } from \"./table-menu\";\nexport {\n createOpenEditorThemeStyle,\n OpenEditorThemeProvider,\n openEditorThemeTokenNames,\n type OpenEditorTheme,\n type OpenEditorThemeStyle,\n type OpenEditorThemeToken,\n} from \"@openeditor/react\";\nimport { OpenEditorEmojiPicker } from \"./emoji-picker\";\nexport { OpenEditorEmojiPicker, type OpenEditorEmojiPickerProps } from \"./emoji-picker\";\nimport { Button, type Button as BaseButton } from \"@base-ui/react/button\";\nimport { Dialog } from \"@base-ui/react/dialog\";\nimport { Input, type Input as BaseInput } from \"@base-ui/react/input\";\nimport { Menu } from \"@base-ui/react/menu\";\nimport { Popover } from \"@base-ui/react/popover\";\nimport { Toggle, type Toggle as BaseToggle } from \"@base-ui/react/toggle\";\nimport { ToggleGroup, type ToggleGroup as BaseToggleGroup } from \"@base-ui/react/toggle-group\";\nimport { Toolbar } from \"@base-ui/react/toolbar\";\nimport { HugeiconsIcon } from \"@hugeicons/react\";\nimport { openEditorIcons, type OpenEditorIcon } from \"@openeditor/icons\";\nimport {\n getDefaultSlashMenuItems,\n OpenEditorBubbleMenu,\n OpenEditorBlockDragHandle,\n OpenEditorContent,\n sortSlashMenuItems,\n useOpenEditorBlockInteraction,\n useOpenEditorController,\n type OpenEditorController,\n type OpenEditorBlockRef,\n type OpenEditorBlockMenuSession,\n type OpenEditorBlockMenuResolver,\n type OpenEditorResolvedBlockMenu,\n type OpenEditorResolvedBlockMenuAction,\n type OpenEditorResolvedBlockMenuItem,\n type OpenEditorResolvedBlockMenuPanel,\n type OpenEditorReactProps,\n type OpenEditorSlashMenuGroup,\n type OpenEditorSlashMenuItem,\n OpenEditorThemeProvider,\n OpenEditorEmojiPickerSlotProvider,\n useOpenEditorThemeStyle,\n type OpenEditorTheme,\n} from \"@openeditor/react\";\nimport {\n Fragment,\n useCallback,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n useSyncExternalStore,\n type FormEvent,\n type CSSProperties,\n type ReactNode,\n type RefObject,\n} from \"react\";\n\nexport type OpenEditorSlashMenuProps = {\n controller: OpenEditorController;\n className?: string;\n items?: readonly OpenEditorSlashMenuItem[];\n container?: HTMLElement | null;\n};\n\nexport type OpenEditorSelectionBubbleProps = {\n controller: OpenEditorController;\n className?: string;\n container?: HTMLElement | null;\n};\n\nexport type OpenEditorBlockMenuProps = {\n controller: OpenEditorController;\n className?: string;\n container?: HTMLElement | null;\n};\n\nexport type OpenEditorProps = OpenEditorReactProps & {\n className?: string;\n contentClassName?: string;\n overlayContainer?: HTMLElement | null;\n theme?: OpenEditorTheme;\n};\n\nexport type OpenEditorButtonProps = BaseButton.Props;\nexport type OpenEditorToggleProps<Value extends string = string> = BaseToggle.Props<Value>;\nexport type OpenEditorToggleGroupProps<Value extends string = string> = BaseToggleGroup.Props<Value>;\nexport type OpenEditorInputProps = BaseInput.Props;\n\nexport const OpenEditorEmojiPickerProvider = ({ children }: { children: ReactNode }) => (\n <OpenEditorEmojiPickerSlotProvider renderer={OpenEditorEmojiPicker}>\n {children}\n </OpenEditorEmojiPickerSlotProvider>\n);\n\ntype OverlayRect = {\n left: number;\n right: number;\n top: number;\n bottom: number;\n width: number;\n height: number;\n};\n\ntype AnchoredOverlayState = {\n left: number;\n top: number;\n anchorRect?: OverlayRect;\n};\n\ntype VirtualAnchor = {\n contextElement?: Element;\n getBoundingClientRect: () => DOMRect;\n};\n\ntype SelectionAction = {\n key: string;\n label: string;\n active: boolean;\n icon: OpenEditorIcon;\n run: () => void;\n};\n\ntype BlockTransformAction = {\n key: string;\n label: string;\n icon: OpenEditorIcon;\n isActive: (controller: OpenEditorController) => boolean;\n run: (controller: OpenEditorController) => void;\n};\n\nconst headingDefinitions = [\n { level: 1, icon: openEditorIcons.heading1 },\n { level: 2, icon: openEditorIcons.heading2 },\n { level: 3, icon: openEditorIcons.heading3 },\n { level: 4, icon: openEditorIcons.heading4 },\n { level: 5, icon: openEditorIcons.heading5 },\n { level: 6, icon: openEditorIcons.heading6 },\n] as const;\n\nconst blockTransformActions: BlockTransformAction[] = [\n {\n key: \"paragraph\",\n label: \"Text\",\n icon: openEditorIcons.text,\n isActive: (controller) => controller.isActive(\"paragraph\"),\n run: (controller) => controller.setParagraph(),\n },\n ...headingDefinitions.map(({ level, icon }) => ({\n key: `heading${level}`,\n label: `Heading ${level}`,\n icon,\n isActive: (controller: OpenEditorController) => controller.isActive(\"heading\", { level }),\n run: (controller: OpenEditorController) => controller.toggleHeading(level),\n })),\n {\n key: \"bulletList\",\n label: \"Bullet List\",\n icon: openEditorIcons.bulletList,\n isActive: (controller) => controller.isActive(\"bulletList\"),\n run: (controller) => controller.toggleBulletList(),\n },\n {\n key: \"orderedList\",\n label: \"Numbered List\",\n icon: openEditorIcons.orderedList,\n isActive: (controller) => controller.isActive(\"orderedList\"),\n run: (controller) => controller.toggleOrderedList(),\n },\n {\n key: \"taskList\",\n label: \"Task List\",\n icon: openEditorIcons.taskList,\n isActive: (controller) => controller.isActive(\"taskList\"),\n run: (controller) => controller.toggleTaskList(),\n },\n {\n key: \"toggleList\",\n label: \"Toggle List\",\n icon: openEditorIcons.toggleList,\n isActive: (controller) => controller.isActive(\"toggleList\"),\n run: (controller) => controller.toggleToggleList(),\n },\n {\n key: \"blockquote\",\n label: \"Quote\",\n icon: openEditorIcons.blockquote,\n isActive: (controller) => controller.isActive(\"blockquote\"),\n run: (controller) => controller.toggleBlockquote(),\n },\n {\n key: \"callout\",\n label: \"Callout\",\n icon: openEditorIcons.callout,\n isActive: (controller) => controller.isActive(\"callout\"),\n run: (controller) => controller.toggleCallout(),\n },\n {\n key: \"codeBlock\",\n label: \"Code\",\n icon: openEditorIcons.codeBlock,\n isActive: (controller) => controller.isActive(\"codeBlock\"),\n run: (controller) => controller.toggleCodeBlock(),\n },\n];\n\nconst getActiveBlockTransform = (controller: OpenEditorController) =>\n [\n \"callout\",\n \"toggleList\",\n \"taskList\",\n \"bulletList\",\n \"orderedList\",\n \"blockquote\",\n \"codeBlock\",\n \"heading1\",\n \"heading2\",\n \"heading3\",\n \"heading4\",\n \"heading5\",\n \"heading6\",\n \"paragraph\",\n ]\n .map((key) => blockTransformActions.find((action) => action.key === key))\n .find((action) => action?.isActive(controller)) ?? blockTransformActions[0];\n\nconst isHeadingKey = (key: string) => /^heading[1-6]$/.test(key);\n\nconst slashMenuIcons: Record<string, OpenEditorIcon> = {\n paragraph: openEditorIcons.text,\n ...Object.fromEntries(headingDefinitions.map(({ level, icon }) => [`heading${level}`, icon])),\n bulletList: openEditorIcons.bulletList,\n orderedList: openEditorIcons.orderedList,\n taskList: openEditorIcons.taskList,\n blockquote: openEditorIcons.blockquote,\n codeBlock: openEditorIcons.codeBlock,\n divider: openEditorIcons.divider,\n image: openEditorIcons.image,\n columns: openEditorIcons.columns,\n table: openEditorIcons.table,\n toggleList: openEditorIcons.toggleList,\n callout: openEditorIcons.callout,\n diagram: openEditorIcons.diagram,\n page: openEditorIcons.page,\n attachment: openEditorIcons.attachment,\n};\n\nconst isSlashMenuGroup = (item: OpenEditorSlashMenuItem): item is OpenEditorSlashMenuGroup =>\n \"children\" in item;\nconst getSlashMenuIcon = (item: OpenEditorSlashMenuItem) =>\n slashMenuIcons[item.key] ?? (isSlashMenuGroup(item) ? openEditorIcons.heading1 : openEditorIcons.text);\nconst slashItemMatches = (item: OpenEditorSlashMenuItem, query: string): boolean => {\n const normalized = query.toLowerCase();\n const ownText = `${item.label} ${item.group} ${item.keywords?.join(\" \") ?? \"\"}`.toLowerCase();\n return ownText.includes(normalized)\n || (isSlashMenuGroup(item) && item.children.some((child) => slashItemMatches(child, query)));\n};\n\nconst pointRect = (left: number, top: number): OverlayRect => ({\n left,\n right: left,\n top,\n bottom: top,\n width: 0,\n height: 0,\n});\n\nconst getAnchorRect = (state: AnchoredOverlayState) => state.anchorRect ?? pointRect(state.left, state.top);\n\nconst toVirtualAnchor = (\n state: AnchoredOverlayState,\n contextElement?: Element | null,\n resolveRect?: () => OverlayRect | null,\n): VirtualAnchor => ({\n contextElement: contextElement ?? undefined,\n getBoundingClientRect: () => {\n const rect = resolveRect?.() ?? getAnchorRect(state);\n return {\n ...rect,\n x: rect.left,\n y: rect.top,\n toJSON: () => rect,\n } as DOMRect;\n },\n});\n\nconst cx = (...classes: Array<string | false | null | undefined>) => classes.filter(Boolean).join(\" \");\n\nconst withBaseClass = <State,>(baseClassName: string, className?: string | ((state: State) => string | undefined)) => {\n if (typeof className === \"function\") {\n return (state: State) => cx(baseClassName, className(state));\n }\n\n return cx(baseClassName, className);\n};\n\nexport const OpenEditorButton = ({ className, ...props }: OpenEditorButtonProps) => (\n <Button className={withBaseClass<BaseButton.State>(\"oe-button\", className)} {...props} />\n);\n\nexport const OpenEditorToggle = <Value extends string = string>({\n className,\n ...props\n}: OpenEditorToggleProps<Value>) => (\n <Toggle<Value> className={withBaseClass<BaseToggle.State>(\"oe-button oe-toggle\", className)} {...props} />\n);\n\nexport const OpenEditorToggleGroup = <Value extends string = string>({\n className,\n ...props\n}: OpenEditorToggleGroupProps<Value>) => (\n <ToggleGroup<Value> className={withBaseClass<BaseToggleGroup.State>(\"oe-toggle-group\", className)} {...props} />\n);\n\nexport const OpenEditorInput = ({ className, ...props }: OpenEditorInputProps) => (\n <Input className={withBaseClass<BaseInput.State>(\"oe-input\", className)} {...props} />\n);\n\nconst OpenEditorLinkDialog = ({\n controller,\n open,\n onOpenChange,\n}: {\n controller: OpenEditorController;\n open: boolean;\n onOpenChange: (open: boolean) => void;\n}) => {\n const themeStyle = useOpenEditorThemeStyle();\n const [url, setUrl] = useState(\"\");\n\n useEffect(() => {\n if (open) {\n setUrl(controller.getActiveLink() ?? \"https://\");\n }\n }, [open]);\n\n const submitLink = (event: FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n controller.setLink(url.trim());\n onOpenChange(false);\n };\n\n return (\n <Dialog.Root open={open} onOpenChange={onOpenChange}>\n <Dialog.Portal>\n <Dialog.Backdrop className=\"oe-dialog-backdrop\" />\n <Dialog.Popup className=\"oe-dialog\" initialFocus={false} style={themeStyle}>\n <Dialog.Close className=\"oe-dialog-close\" aria-label=\"Close link dialog\">\n <HugeiconsIcon aria-hidden=\"true\" icon={openEditorIcons.close} size={15} strokeWidth={2} />\n </Dialog.Close>\n <form className=\"oe-link-dialog-form\" onSubmit={submitLink}>\n <Dialog.Title className=\"oe-dialog-title\">Link</Dialog.Title>\n <OpenEditorInput\n aria-label=\"Link URL\"\n autoComplete=\"url\"\n inputMode=\"url\"\n value={url}\n onValueChange={setUrl}\n placeholder=\"https://example.com\"\n />\n <div className=\"oe-dialog-actions\">\n <OpenEditorButton\n type=\"button\"\n className=\"oe-dialog-button oe-dialog-button-remove\"\n onClick={() => {\n controller.setLink(null);\n onOpenChange(false);\n }}\n >\n Remove\n </OpenEditorButton>\n <OpenEditorButton type=\"submit\" className=\"oe-dialog-button oe-dialog-button-primary\">Apply</OpenEditorButton>\n </div>\n </form>\n </Dialog.Popup>\n </Dialog.Portal>\n </Dialog.Root>\n );\n};\n\nconst SelectionButton = ({\n action,\n}: {\n action: SelectionAction;\n}) => (\n <Toolbar.Button\n type=\"button\"\n aria-label={action.label}\n aria-pressed={action.active}\n className=\"oe-toolbar-button\"\n data-active={action.active ? \"\" : undefined}\n onClick={action.run}\n >\n <HugeiconsIcon aria-hidden=\"true\" className=\"oe-toolbar-icon\" icon={action.icon} size={15} strokeWidth={2} />\n </Toolbar.Button>\n);\n\nconst SelectionBlockTransformMenu = ({\n controller,\n container,\n}: {\n controller: OpenEditorController;\n container?: HTMLElement | null;\n}) => {\n const themeStyle = useOpenEditorThemeStyle();\n const activeAction = getActiveBlockTransform(controller);\n const [menuOpen, setMenuOpen] = useState(false);\n const [headingPanelOpen, setHeadingPanelOpen] = useState(false);\n const headingActions = blockTransformActions.filter((action) => isHeadingKey(action.key));\n\n return (\n <Menu.Root\n modal={false}\n open={menuOpen}\n onOpenChange={(open) => {\n setMenuOpen(open);\n if (!open) setHeadingPanelOpen(false);\n }}\n >\n <Menu.Trigger\n type=\"button\"\n aria-label={`${activeAction.label}. Turn into`}\n className=\"oe-toolbar-button oe-block-transform-trigger\"\n onMouseDown={(event) => event.preventDefault()}\n >\n <HugeiconsIcon aria-hidden=\"true\" className=\"oe-toolbar-icon\" icon={activeAction.icon} size={15} strokeWidth={2} />\n <span className=\"oe-block-transform-trigger-label\">{activeAction.label}</span>\n <HugeiconsIcon aria-hidden=\"true\" className=\"oe-toolbar-chevron\" icon={openEditorIcons.chevronDown} size={12} strokeWidth={2} />\n </Menu.Trigger>\n <Menu.Portal container={container}>\n <Menu.Positioner\n positionMethod=\"fixed\"\n side=\"bottom\"\n align=\"start\"\n sideOffset={8}\n collisionPadding={12}\n collisionAvoidance={{ side: \"flip\", align: \"shift\", fallbackAxisSide: \"none\" }}\n >\n <Menu.Popup\n className=\"oe-cascade-menu\"\n style={themeStyle}\n onMouseLeave={() => setHeadingPanelOpen(false)}\n >\n <div className=\"oe-block-transform-menu oe-cascade-panel\">\n {blockTransformActions.map((action) => {\n if (isHeadingKey(action.key)) {\n if (action.key !== \"heading1\") return null;\n return (\n <Menu.Item\n closeOnClick={false}\n key=\"heading\"\n className=\"oe-block-transform-item\"\n data-active={isHeadingKey(activeAction.key) ? \"\" : undefined}\n label=\"Heading\"\n onClick={() => setHeadingPanelOpen(true)}\n onFocus={() => setHeadingPanelOpen(true)}\n onMouseEnter={() => setHeadingPanelOpen(true)}\n >\n <HugeiconsIcon aria-hidden=\"true\" className=\"oe-block-transform-icon\" icon={openEditorIcons.heading1} size={15} strokeWidth={2} />\n <span>Heading</span>\n <HugeiconsIcon aria-hidden=\"true\" className=\"oe-submenu-chevron\" icon={openEditorIcons.chevronRight} size={13} strokeWidth={2} />\n </Menu.Item>\n );\n }\n\n const active = action.key === activeAction.key;\n return (\n <Menu.Item\n key={action.key}\n className=\"oe-block-transform-item\"\n data-active={active ? \"\" : undefined}\n label={action.label}\n onMouseEnter={() => setHeadingPanelOpen(false)}\n onClick={() => { if (!active) action.run(controller); }}\n >\n <HugeiconsIcon aria-hidden=\"true\" className=\"oe-block-transform-icon\" icon={action.icon} size={15} strokeWidth={2} />\n <span>{action.label}</span>\n </Menu.Item>\n );\n })}\n </div>\n {headingPanelOpen ? (\n <div className=\"oe-block-transform-menu oe-block-transform-submenu oe-cascade-panel\">\n {headingActions.map((headingAction) => {\n const headingActive = headingAction.key === activeAction.key;\n return (\n <button\n type=\"button\"\n key={headingAction.key}\n className=\"oe-block-transform-item\"\n data-active={headingActive ? \"\" : undefined}\n onMouseDown={(event) => event.preventDefault()}\n onClick={() => {\n if (!headingActive) headingAction.run(controller);\n setMenuOpen(false);\n }}\n role=\"menuitem\"\n >\n <HugeiconsIcon aria-hidden=\"true\" className=\"oe-block-transform-icon\" icon={headingAction.icon} size={15} strokeWidth={2} />\n <span>{headingAction.label}</span>\n </button>\n );\n })}\n </div>\n ) : null}\n </Menu.Popup>\n </Menu.Positioner>\n </Menu.Portal>\n </Menu.Root>\n );\n};\n\nexport const OpenEditorSelectionBubble = ({\n controller,\n className = \"oe-bubble-menu\",\n container,\n}: OpenEditorSelectionBubbleProps) => {\n const themeStyle = useOpenEditorThemeStyle();\n const rootElement = controller.getRootElement();\n const [linkDialogOpen, setLinkDialogOpen] = useState(false);\n const toolbarRef = useRef<HTMLDivElement | null>(null);\n\n const actions: SelectionAction[] = controller.ready\n ? [\n {\n key: \"bold\",\n label: \"Bold\",\n active: controller.isActive(\"bold\"),\n icon: openEditorIcons.bold,\n run: () => controller.toggleBold(),\n },\n {\n key: \"italic\",\n label: \"Italic\",\n active: controller.isActive(\"italic\"),\n icon: openEditorIcons.italic,\n run: () => controller.toggleItalic(),\n },\n {\n key: \"underline\",\n label: \"Underline\",\n active: controller.isActive(\"underline\"),\n icon: openEditorIcons.underline,\n run: () => controller.toggleUnderline(),\n },\n {\n key: \"strike\",\n label: \"Strikethrough\",\n active: controller.isActive(\"strike\"),\n icon: openEditorIcons.strike,\n run: () => controller.toggleStrike(),\n },\n {\n key: \"code\",\n label: \"Inline code\",\n active: controller.isActive(\"code\"),\n icon: openEditorIcons.code,\n run: () => controller.toggleInlineCode(),\n },\n ]\n : [];\n\n useEffect(() => {\n if (!rootElement) return;\n const focusToolbar = (event: globalThis.KeyboardEvent) => {\n if (!(event.altKey && event.key === \"F10\")) return;\n const toolbar = toolbarRef.current;\n const menu = toolbar?.parentElement?.parentElement;\n if (!toolbar || !menu || getComputedStyle(menu).visibility === \"hidden\") return;\n const firstControl = toolbarRef.current?.querySelector<HTMLElement>(\n \"button:not(:disabled), [href], [tabindex]:not([tabindex='-1'])\",\n );\n if (!firstControl) return;\n event.preventDefault();\n firstControl.focus();\n };\n rootElement.addEventListener(\"keydown\", focusToolbar, true);\n return () => rootElement.removeEventListener(\"keydown\", focusToolbar, true);\n }, [rootElement]);\n\n if (!controller.ready) return null;\n\n return (\n <>\n <OpenEditorBubbleMenu\n className={className}\n container={container}\n controller={controller}\n style={themeStyle}\n >\n <div\n onKeyDown={(event) => {\n if (event.key !== \"Escape\") return;\n event.preventDefault();\n controller.focus();\n }}\n onMouseDown={(event) => event.preventDefault()}\n >\n <Toolbar.Root\n className=\"oe-selection-toolbar\"\n aria-label=\"Selection formatting\"\n ref={toolbarRef}\n >\n <SelectionBlockTransformMenu controller={controller} container={container} />\n {actions.map((action) => (\n <SelectionButton key={action.key} action={action} />\n ))}\n <Toolbar.Button\n type=\"button\"\n aria-label=\"Link\"\n className=\"oe-toolbar-button\"\n data-active={controller.isActive(\"link\") ? \"\" : undefined}\n onClick={() => setLinkDialogOpen(true)}\n >\n <HugeiconsIcon aria-hidden=\"true\" className=\"oe-toolbar-icon\" icon={openEditorIcons.link} size={15} strokeWidth={2} />\n </Toolbar.Button>\n </Toolbar.Root>\n </div>\n </OpenEditorBubbleMenu>\n <OpenEditorLinkDialog\n controller={controller}\n open={linkDialogOpen}\n onOpenChange={setLinkDialogOpen}\n />\n </>\n );\n};\n\nexport const OpenEditorSlashMenu = ({\n controller,\n className = \"oe-slash-menu\",\n items,\n container,\n}: OpenEditorSlashMenuProps) => {\n const themeStyle = useOpenEditorThemeStyle();\n const slashMenuItems = sortSlashMenuItems(items ?? getDefaultSlashMenuItems(controller));\n const slashState = controller.slashState;\n const [selectedIndex, setSelectedIndex] = useState(0);\n const [openGroupKey, setOpenGroupKey] = useState<string | null>(null);\n const selectedIndexRef = useRef(0);\n const menuId = useId();\n const menuRef = useRef<HTMLDivElement | null>(null);\n const anchor = useMemo(\n () =>\n slashState\n ? toVirtualAnchor(\n slashState,\n controller.getRootElement(),\n () => controller.getPositionRect(slashState.to),\n )\n : null,\n [controller, slashState],\n );\n const matchingItems = slashState\n ? slashMenuItems.filter((item) => slashItemMatches(item, slashState.query))\n : [];\n const openGroup = matchingItems.find(\n (item): item is OpenEditorSlashMenuGroup => isSlashMenuGroup(item) && item.key === openGroupKey,\n );\n const matchingChildren = openGroup\n ? openGroup.children.filter((item) => slashItemMatches(item, slashState?.query ?? \"\"))\n : [];\n const activeItems: readonly OpenEditorSlashMenuItem[] = openGroup ? matchingChildren : matchingItems;\n\n selectedIndexRef.current = selectedIndex;\n\n useEffect(() => {\n selectedIndexRef.current = 0;\n setSelectedIndex(0);\n setOpenGroupKey(null);\n }, [slashState?.from, slashState?.query]);\n\n useEffect(() => {\n if (selectedIndex < activeItems.length) return;\n setSelectedIndex(Math.max(0, activeItems.length - 1));\n }, [activeItems.length, selectedIndex]);\n\n useEffect(() => {\n if (slashState && matchingItems.length === 0) controller.dismissSlashMenu();\n }, [controller, matchingItems.length, slashState]);\n\n useEffect(() => {\n const editorElement = controller.getRootElement();\n if (!slashState || !editorElement) return;\n const previous = {\n controls: editorElement.getAttribute(\"aria-controls\"),\n expanded: editorElement.getAttribute(\"aria-expanded\"),\n activeDescendant: editorElement.getAttribute(\"aria-activedescendant\"),\n };\n const selectedId = activeItems[selectedIndex]\n ? `${menuId}-${openGroup ? openGroup.key : \"root\"}-option-${selectedIndex}`\n : null;\n editorElement.setAttribute(\"aria-controls\", menuId);\n editorElement.setAttribute(\"aria-expanded\", \"true\");\n if (selectedId) editorElement.setAttribute(\"aria-activedescendant\", selectedId);\n else editorElement.removeAttribute(\"aria-activedescendant\");\n\n const handleKeyDown = (event: globalThis.KeyboardEvent) => {\n if (event.isComposing) return false;\n let nextIndex: number | null = null;\n const currentIndex = selectedIndexRef.current;\n if (event.key === \"ArrowDown\") nextIndex = (currentIndex + 1) % Math.max(1, activeItems.length);\n if (event.key === \"ArrowUp\") nextIndex = (currentIndex - 1 + Math.max(1, activeItems.length)) % Math.max(1, activeItems.length);\n if (event.key === \"Home\" || event.key === \"PageUp\") nextIndex = 0;\n if (event.key === \"End\" || event.key === \"PageDown\") nextIndex = Math.max(0, activeItems.length - 1);\n if (nextIndex !== null) {\n event.preventDefault();\n selectedIndexRef.current = nextIndex;\n setSelectedIndex(nextIndex);\n return true;\n }\n if ((event.key === \"ArrowLeft\" || event.key === \"Escape\") && openGroup) {\n event.preventDefault();\n setOpenGroupKey(null);\n selectedIndexRef.current = 0;\n setSelectedIndex(0);\n return true;\n }\n if (event.key === \"ArrowRight\") {\n const item = activeItems[selectedIndexRef.current];\n if (!item || !isSlashMenuGroup(item)) return false;\n event.preventDefault();\n setOpenGroupKey(item.key);\n selectedIndexRef.current = 0;\n setSelectedIndex(0);\n return true;\n }\n if (event.key === \"Enter\") {\n const item = activeItems[selectedIndexRef.current];\n if (!item) return false;\n event.preventDefault();\n event.stopPropagation();\n if (isSlashMenuGroup(item)) {\n setOpenGroupKey(item.key);\n selectedIndexRef.current = 0;\n setSelectedIndex(0);\n return true;\n }\n item.execute({ controller, range: { from: slashState.from, to: slashState.to } });\n return true;\n }\n return false;\n };\n const unregisterKeyboardHandler = controller.registerSlashMenuKeyboardHandler(handleKeyDown);\n return () => {\n unregisterKeyboardHandler();\n for (const [attribute, value] of [\n [\"aria-controls\", previous.controls],\n [\"aria-expanded\", previous.expanded],\n [\"aria-activedescendant\", previous.activeDescendant],\n ] as const) {\n if (value === null) editorElement.removeAttribute(attribute);\n else editorElement.setAttribute(attribute, value);\n }\n };\n }, [activeItems, controller, menuId, openGroup, selectedIndex, slashState]);\n\n useEffect(() => {\n menuRef.current\n ?.querySelector<HTMLElement>(\"[data-highlighted]\")\n ?.scrollIntoView({ block: \"nearest\" });\n }, [selectedIndex]);\n\n if (!slashState || matchingItems.length === 0) return null;\n\n return (\n <Popover.Root open modal={false}>\n <Popover.Portal container={container}>\n <Popover.Positioner\n anchor={anchor}\n className=\"oe-anchored-overlay-positioner\"\n positionMethod=\"fixed\"\n side=\"bottom\"\n align=\"start\"\n sideOffset={8}\n collisionPadding={12}\n collisionAvoidance={{ side: \"flip\", align: \"shift\", fallbackAxisSide: \"none\" }}\n >\n <Popover.Popup\n className=\"oe-cascade-menu\"\n finalFocus={false}\n style={themeStyle}\n initialFocus={false}\n >\n <div\n aria-label=\"Insert block\"\n className={`${className} oe-cascade-panel`}\n id={menuId}\n ref={menuRef}\n role=\"listbox\"\n >\n <div className=\"oe-slash-menu-scroll\">\n {matchingItems.map((item, index) => {\n const CustomIcon = item.icon;\n const icon = getSlashMenuIcon(item);\n\n return (\n <button\n aria-selected={!openGroup && index === selectedIndex}\n type=\"button\"\n key={item.key}\n className=\"oe-slash-menu-item\"\n data-highlighted={!openGroup && index === selectedIndex ? \"\" : undefined}\n id={`${menuId}-root-option-${index}`}\n onMouseEnter={() => {\n selectedIndexRef.current = index;\n setSelectedIndex(index);\n setOpenGroupKey(isSlashMenuGroup(item) ? item.key : null);\n }}\n onMouseDown={(event) => event.preventDefault()}\n onClick={() => {\n if (isSlashMenuGroup(item)) {\n setOpenGroupKey(item.key);\n selectedIndexRef.current = 0;\n setSelectedIndex(0);\n } else {\n item.execute({ controller, range: { from: slashState.from, to: slashState.to } });\n }\n }}\n role=\"option\"\n >\n {CustomIcon\n ? <CustomIcon aria-hidden={true} className=\"oe-slash-menu-icon\" size={15} strokeWidth={2} />\n : <HugeiconsIcon aria-hidden=\"true\" className=\"oe-slash-menu-icon\" icon={icon} size={15} strokeWidth={2} />}\n <span>{item.label}</span>\n {isSlashMenuGroup(item)\n ? <HugeiconsIcon aria-hidden=\"true\" className=\"oe-submenu-chevron\" icon={openEditorIcons.chevronRight} size={13} strokeWidth={2} />\n : null}\n </button>\n );\n })}\n </div>\n </div>\n {openGroup ? (\n <div\n aria-label={openGroup.label}\n className={`${className} oe-cascade-panel oe-block-transform-submenu`}\n role=\"listbox\"\n >\n <div className=\"oe-slash-menu-scroll\">\n {matchingChildren.map((item, index) => {\n const CustomIcon = item.icon;\n const icon = getSlashMenuIcon(item);\n return (\n <button\n aria-selected={index === selectedIndex}\n className=\"oe-slash-menu-item\"\n data-highlighted={index === selectedIndex ? \"\" : undefined}\n id={`${menuId}-${openGroup.key}-option-${index}`}\n key={item.key}\n onClick={() => item.execute({ controller, range: { from: slashState.from, to: slashState.to } })}\n onMouseDown={(event) => event.preventDefault()}\n onMouseEnter={() => {\n selectedIndexRef.current = index;\n setSelectedIndex(index);\n }}\n role=\"option\"\n type=\"button\"\n >\n {CustomIcon\n ? <CustomIcon aria-hidden={true} className=\"oe-slash-menu-icon\" size={15} strokeWidth={2} />\n : <HugeiconsIcon aria-hidden=\"true\" className=\"oe-slash-menu-icon\" icon={icon} size={15} strokeWidth={2} />}\n <span>{item.label}</span>\n </button>\n );\n })}\n </div>\n </div>\n ) : null}\n </Popover.Popup>\n </Popover.Positioner>\n </Popover.Portal>\n </Popover.Root>\n );\n};\n\nexport type OpenEditorResolvedBlockMenuViewProps = {\n\tresolver: OpenEditorBlockMenuResolver;\n\tsession: OpenEditorBlockMenuSession;\n\tanchor: HTMLElement | RefObject<HTMLElement | null> | null;\n\tariaLabel: string;\n\tcontainer?: HTMLElement | null;\n\tstyle?: CSSProperties;\n\ttrigger?: ReactNode;\n};\n\nconst BlockMenuIcon = ({ item }: { item: OpenEditorResolvedBlockMenuItem }) =>\n\titem.icon\n\t\t? <HugeiconsIcon aria-hidden=\"true\" icon={item.icon} size={15} strokeWidth={2} />\n\t\t: <span aria-hidden=\"true\" className=\"oe-block-menu-icon-placeholder\" />;\n\nconst BlockMenuAction = ({\n\taction,\n\tsession,\n}: {\n\taction: OpenEditorResolvedBlockMenuAction;\n\tsession: OpenEditorBlockMenuSession;\n}) => {\n\tconst snapshot = useSyncExternalStore(session.subscribe, session.getSnapshot, session.getSnapshot);\n\tconst pending = snapshot.pendingItemId === action.id;\n\treturn (\n\t\t<Menu.Item\n\t\t\taria-current={action.active || undefined}\n\t\t\taria-describedby={action.disabledReason ? `${action.id}-reason` : undefined}\n\t\t\tclassName=\"oe-block-menu-item\"\n\t\t\tdata-active={action.active ? \"\" : undefined}\n\t\t\tdata-danger={action.intent === \"danger\" ? \"\" : undefined}\n\t\t\tdisabled={action.disabled || Boolean(snapshot.pendingItemId)}\n\t\t\tlabel={action.label}\n\t\t\tonClick={() => { void session.run(action); }}\n\t\t>\n\t\t\t<BlockMenuIcon item={action} />\n\t\t\t<span>{pending ? `${action.label}…` : action.label}</span>\n\t\t\t{action.disabledReason ? <span className=\"oe-visually-hidden\" id={`${action.id}-reason`}>{action.disabledReason}</span> : null}\n\t\t</Menu.Item>\n\t);\n};\n\nconst BlockMenuPanel = ({\n\tcontainer,\n\titem,\n\ttarget,\n\tsession,\n\tstyle,\n}: {\n\tcontainer?: HTMLElement | null;\n\titem: OpenEditorResolvedBlockMenuPanel;\n\ttarget: OpenEditorResolvedBlockMenu[\"target\"];\n\tsession: OpenEditorBlockMenuSession;\n\tstyle?: CSSProperties;\n}) => {\n\tconst snapshot = useSyncExternalStore(session.subscribe, session.getSnapshot, session.getSnapshot);\n\tconst open = snapshot.open && snapshot.surface.type === \"panel\" && snapshot.surface.id === item.id;\n\tconst Panel = item.panel;\n\treturn (\n\t\t<Popover.Root\n\t\t\tmodal={false}\n\t\t\tonOpenChange={(nextOpen) => {\n\t\t\t\tif (nextOpen) session.openPanel(item.id);\n\t\t\t\telse if (open) session.closeSurface();\n\t\t\t}}\n\t\t\topen={open}\n\t\t>\n\t\t\t<Popover.Trigger\n\t\t\t\tdisabled={item.disabled}\n\t\t\t\tnativeButton={false}\n\t\t\t\trender={(triggerProps) => (\n\t\t\t\t\t<Menu.Item\n\t\t\t\t\t\t{...triggerProps}\n\t\t\t\t\t\taria-describedby={item.disabledReason ? `${item.id}-reason` : undefined}\n\t\t\t\t\t\tclassName=\"oe-block-menu-item\"\n\t\t\t\t\t\tcloseOnClick={false}\n\t\t\t\t\t\tlabel={item.label}\n\t\t\t\t\t\trole=\"menuitem\"\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<BlockMenuIcon item={item} />\n\t\t\t\t<span>{item.label}</span>\n\t\t\t\t{item.disabledReason ? <span className=\"oe-visually-hidden\" id={`${item.id}-reason`}>{item.disabledReason}</span> : null}\n\t\t\t</Popover.Trigger>\n\t\t\t<Popover.Portal container={container}>\n\t\t\t\t<Popover.Positioner\n\t\t\t\t\talign=\"start\"\n\t\t\t\t\tcollisionAvoidance={{ side: \"flip\", align: \"shift\", fallbackAxisSide: \"none\" }}\n\t\t\t\t\tcollisionPadding={12}\n\t\t\t\t\tpositionMethod=\"fixed\"\n\t\t\t\t\tside=\"right\"\n\t\t\t\t\tsideOffset={8}\n\t\t\t\t>\n\t\t\t\t\t<Popover.Popup aria-label={item.label} className=\"oe-block-menu-panel\" role=\"dialog\" style={style}>\n\t\t\t\t\t\t<Panel target={target} close={() => session.closeSurface()} />\n\t\t\t\t\t</Popover.Popup>\n\t\t\t\t</Popover.Positioner>\n\t\t\t</Popover.Portal>\n\t\t</Popover.Root>\n\t);\n};\n\nconst BlockMenuSubmenu = ({\n\tcontainer,\n\titem,\n\ttarget,\n\tsession,\n\tstyle,\n}: {\n\tcontainer?: HTMLElement | null;\n\titem: Extract<OpenEditorResolvedBlockMenuItem, { type: \"submenu\" }>;\n\ttarget: OpenEditorResolvedBlockMenu[\"target\"];\n\tsession: OpenEditorBlockMenuSession;\n\tstyle?: CSSProperties;\n}) => (\n\t<Menu.SubmenuRoot\n\t\tonOpenChange={(open) => { if (open) session.openSubmenu(item.id); else session.closeSurface(); }}\n\t>\n\t\t<Menu.SubmenuTrigger aria-describedby={item.disabledReason ? `${item.id}-reason` : undefined} className=\"oe-block-menu-item\" disabled={item.disabled} label={item.label}>\n\t\t\t<BlockMenuIcon item={item} />\n\t\t\t<span>{item.label}</span>\n\t\t\t{item.disabledReason ? <span className=\"oe-visually-hidden\" id={`${item.id}-reason`}>{item.disabledReason}</span> : null}\n\t\t\t<HugeiconsIcon aria-hidden=\"true\" className=\"oe-block-menu-chevron\" icon={openEditorIcons.chevronRight} size={13} strokeWidth={2} />\n\t\t</Menu.SubmenuTrigger>\n\t\t<Menu.Portal container={container}>\n\t\t\t<Menu.Positioner align=\"start\" collisionPadding={12} positionMethod=\"fixed\" side=\"right\" sideOffset={4}>\n\t\t\t\t<Menu.Popup aria-label={item.label} className=\"oe-block-menu\" style={style}>\n\t\t\t\t\t{item.children.map((child) => <BlockMenuItem container={container} item={child} key={child.id} session={session} style={style} target={target} />)}\n\t\t\t\t</Menu.Popup>\n\t\t\t</Menu.Positioner>\n\t\t</Menu.Portal>\n\t</Menu.SubmenuRoot>\n);\n\nconst BlockMenuItem = ({\n\tcontainer,\n\titem,\n\ttarget,\n\tsession,\n\tstyle,\n}: {\n\tcontainer?: HTMLElement | null;\n\titem: OpenEditorResolvedBlockMenuItem;\n\ttarget: OpenEditorResolvedBlockMenu[\"target\"];\n\tsession: OpenEditorBlockMenuSession;\n\tstyle?: CSSProperties;\n}) => {\n\tif (item.type === \"action\") return <BlockMenuAction action={item} session={session} />;\n\tif (item.type === \"panel\") return <BlockMenuPanel container={container} item={item} session={session} style={style} target={target} />;\n\treturn <BlockMenuSubmenu container={container} item={item} session={session} style={style} target={target} />;\n};\n\nexport const OpenEditorResolvedBlockMenuView = ({\n\tresolver,\n\tsession,\n\tanchor,\n\tariaLabel,\n\tcontainer,\n\tstyle,\n\ttrigger,\n}: OpenEditorResolvedBlockMenuViewProps) => {\n\tconst snapshot = useSyncExternalStore(session.subscribe, session.getSnapshot, session.getSnapshot);\n\tconst targetSnapshot = useSyncExternalStore(resolver.target.subscribe, resolver.target.getSnapshot, resolver.target.getSnapshot);\n\tconst menu = resolver.resolve();\n\tuseEffect(() => {\n\t\tif (snapshot.open && !targetSnapshot) session.close();\n\t}, [session, snapshot.open, targetSnapshot]);\n\treturn <Menu.Root\n\t\tmodal={false}\n\t\tonOpenChange={(open) => { if (!open) session.close(); }}\n\t\tonOpenChangeComplete={(open) => {\n\t\t\tif (open) return;\n\t\t\tconst anchorElement = anchor instanceof HTMLElement ? anchor : anchor && \"current\" in anchor ? anchor.current : null;\n\t\t\tanchorElement?.focus();\n\t\t}}\n\t\topen={snapshot.open}\n\t>\n\t\t{trigger}\n\t\t{snapshot.open ? <Menu.Portal container={container}>\n\t\t\t<Menu.Positioner\n\t\t\t\talign=\"start\"\n\t\t\t\tanchor={anchor}\n\t\t\t\tcollisionAvoidance={{ side: \"flip\", align: \"shift\", fallbackAxisSide: \"none\" }}\n\t\t\t\tcollisionPadding={12}\n\t\t\t\tpositionMethod=\"fixed\"\n\t\t\t\tside=\"bottom\"\n\t\t\t\tsideOffset={8}\n\t\t\t>\n\t\t\t\t<Menu.Popup aria-label={ariaLabel} className=\"oe-block-menu\" style={style}>\n\t\t\t\t\t{menu.sections.map((section, sectionIndex) => (\n\t\t\t\t\t\t<Fragment key={section.id}>\n\t\t\t\t\t\t\t{sectionIndex > 0 ? <Menu.Separator className=\"oe-block-menu-separator\" /> : null}\n\t\t\t\t\t\t\t{section.items.map((item) => <BlockMenuItem container={container} item={item} key={item.id} session={session} style={style} target={menu.target} />)}\n\t\t\t\t\t\t</Fragment>\n\t\t\t\t\t))}\n\t\t\t\t\t{snapshot.error ? <div aria-live=\"polite\" className=\"oe-block-menu-error\" role=\"status\">The action failed. Try again.</div> : null}\n\t\t\t\t</Menu.Popup>\n\t\t\t</Menu.Positioner>\n\t\t</Menu.Portal> : null}\n\t\t</Menu.Root>\n};\n\nexport const OpenEditorBlockMenu = ({\n controller,\n className,\n container,\n}: OpenEditorBlockMenuProps) => {\n const interaction = useOpenEditorBlockInteraction(controller);\n const block = interaction.activeBlock;\n const themeStyle = useOpenEditorThemeStyle();\n const handleElementRef = useRef<HTMLDivElement | null>(null);\n const lastBlockRef = useRef<OpenEditorBlockRef | null>(null);\n const session = controller.blockMenu.session;\n const sessionState = useSyncExternalStore(session.subscribe, session.getSnapshot, session.getSnapshot);\n const previousOpenRef = useRef(sessionState.open);\n useEffect(() => {\n let focusTimer: ReturnType<typeof setTimeout> | undefined;\n if (previousOpenRef.current && !sessionState.open) {\n focusTimer = setTimeout(() => {\n if (handleElementRef.current?.isConnected) handleElementRef.current.focus();\n });\n }\n previousOpenRef.current = sessionState.open;\n return () => {\n if (focusTimer) clearTimeout(focusTimer);\n };\n }, [sessionState.open]);\n if (block && !sessionState.open) lastBlockRef.current = block;\n const activeBlock = sessionState.target ?? block;\n\n const setMenuOpen = useCallback((nextOpen: boolean) => {\n if (nextOpen) {\n if (!lastBlockRef.current) {\n session.close();\n return;\n }\n session.open(lastBlockRef.current);\n return;\n }\n session.close();\n }, [session]);\n\n if (!controller.editable) return null;\n const handle = (\n <OpenEditorBlockDragHandle\n ariaLabel={activeBlock\n ? `Actions for ${activeBlock.blockName ?? activeBlock.nodeType} block`\n : undefined}\n className=\"oe-block-handle-anchor\"\n controller={controller}\n elementRef={handleElementRef}\n expanded={sessionState.open}\n onActivate={() => {\n setMenuOpen(!sessionState.open);\n }}\n onDraggingChange={(dragging) => {\n if (dragging) setMenuOpen(false);\n }}\n >\n {activeBlock ? (\n <span aria-hidden=\"true\" className={cx(\"oe-block-handle\", className)}>\n <HugeiconsIcon aria-hidden=\"true\" icon={openEditorIcons.dragHandle} size={16} strokeWidth={2} />\n </span>\n ) : null}\n </OpenEditorBlockDragHandle>\n );\n\tconst resolver = activeBlock ? controller.blockMenu.resolve(activeBlock) : null;\n\treturn <>\n\t\t{handle}\n\t\t{resolver ? <OpenEditorResolvedBlockMenuView\n\t\t\tresolver={resolver}\n\t\t\tsession={session}\n\t\t\tanchor={handleElementRef}\n\t\t\tariaLabel={activeBlock ? `Actions for ${activeBlock.blockName ?? activeBlock.nodeType} block` : \"Block actions\"}\n\t\t\tcontainer={container}\n\t\t\tstyle={themeStyle}\n\t\t/> : null}\n\t</>;\n};\n\nexport const OpenEditor = ({\n className = \"oe-editor-surface\",\n contentClassName,\n overlayContainer,\n theme,\n ...props\n}: OpenEditorProps) => {\n const controller = useOpenEditorController(props);\n\n const editor = (\n <OpenEditorEmojiPickerProvider>\n <div className={className}>\n <OpenEditorContent controller={controller} className={contentClassName} />\n <OpenEditorBlockMenu controller={controller} container={overlayContainer} />\n <OpenEditorSelectionBubble controller={controller} container={overlayContainer} />\n <OpenEditorTableMenu controller={controller} container={overlayContainer} />\n <OpenEditorSlashMenu controller={controller} container={overlayContainer} />\n </div>\n </OpenEditorEmojiPickerProvider>\n );\n return theme ? <OpenEditorThemeProvider theme={theme}>{editor}</OpenEditorThemeProvider> : editor;\n};\n\nexport { OpenEditorContent, useOpenEditorController };\nexport type {\n OpenEditorBlockRef,\n OpenEditorController,\n OpenEditorReactProps,\n OpenEditorSlashMenuIcon,\n OpenEditorSlashMenuIconProps,\n OpenEditorSlashMenuItem,\n} from \"@openeditor/react\";\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openeditor/ui",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.53",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"sideEffects": [
|
|
6
6
|
"**/*.css"
|
|
@@ -33,12 +33,20 @@
|
|
|
33
33
|
"dependencies": {
|
|
34
34
|
"@base-ui/react": "^1.6.0",
|
|
35
35
|
"@hugeicons/react": "^1.1.9",
|
|
36
|
-
"@openeditor/
|
|
37
|
-
"@openeditor/icons": "0.0.
|
|
38
|
-
"@openeditor/react": "0.0.
|
|
36
|
+
"@openeditor/document": "0.0.53",
|
|
37
|
+
"@openeditor/icons": "0.0.53",
|
|
38
|
+
"@openeditor/react": "0.0.53",
|
|
39
|
+
"frimousse": "0.3.0"
|
|
39
40
|
},
|
|
40
41
|
"peerDependencies": {
|
|
41
42
|
"react": ">=19",
|
|
42
43
|
"react-dom": ">=19"
|
|
43
|
-
}
|
|
44
|
+
},
|
|
45
|
+
"keywords": [
|
|
46
|
+
"block-editor",
|
|
47
|
+
"prosemirror",
|
|
48
|
+
"tiptap",
|
|
49
|
+
"react-native",
|
|
50
|
+
"rich-text"
|
|
51
|
+
]
|
|
44
52
|
}
|